汉扬编程 编程大纲 C语言字符型变量赋值语句?

C语言字符型变量赋值语句?

一维和二维的都可以:

一维的情况如下:

char string0[10];

char string1[]=\”prison break\”;

char string2[100]=\”michael scofield\”;

第一句表示定义个长度为10的字符串,但未赋值;

第二句表示定义了一个字符数组string1,并进行初始化,使得其长度自动为13(字符串”prison break\”中的字符个数加上结尾的\’\’);

第三句定义了一个有100个元素的字符数组string2,并初始化了17个元素(\”michael scofield\”;加上结尾的\’\’)。

二维的情况如下:

char string3[6][30];

char string3[6][30]=;

此句表示有6个字符串,每个字符串的长度为30,每个字符串的初始值与“joy\”、\”phosee\”、\”monses\”、\”chandele\”、\”ross\”、\”rather\”相对应。

请问在c语言中如何通过输入字符串为字符指针数组赋值?

注意初始化和赋值是不同的。{\’a\’, \’b\’, \’c\’} 这东西不是表达式,没有类型,只能用来初始化数组或结构体。而数组可以隐式转换成指向其首元素的指针右值,该值能初始化或复制给指针对象。另外 C 字符串指的是以零值字符结尾的连续字符对象序列,并不是字符指针,只是可以通过字符指针处理字符串。C 语言可以写 char *p = (char[]){\’a\’, \’b\’, \’c\’}; 。也可以用在赋值里。右边的东西是复合字面量,是左值。生存期为当前块(函数内部)或整个程序执行期(函数外部)。这段声明的作用是创建一个无名数组,再由它隐式转换出来的指针值初始化指针对象 p ,和题目上的写法相比少声明了一个标识符。

c语言,如何将已赋值的字符串初始化为空?

可以使用memset函数将字符串数组中所有元素全部设置为\\0即可。函数原型:void *memset(void *s, int ch, size_t n);函数说明:将s中前n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。 示例:

#include <stdio.h>#include <string.h> int main(){char buf[256] = \”hello world\”; //buf字符数组初始化printf(\”%d\\n\”, strlen(buf)); memset(buf, 0x00, sizeof (char) * 256); //全部设置为0x00即\\0字符printf(\”%d\\n\”, strlen(buf)); return 0;}

C语言字符串输入问题。怎么办?

  首先,sizeof(str)的值肯定是5,这个没啥好说的,和你输入多少个字符木有关系。
关于你发现的问题,请注意scanf和printf调出使用当中传递给函数的2个参数str实际上(或说本质上)都是字符型的指针,意思是说你只是告知了函数1个内存当中的地址而已,并不包含任何关于字符串长度的信息。
  
scanf函数只负责把你输入的一串字符保存到内存中从你指定的那个地址开始的空间中去,并不负责检查你输入的字符串是不是实际超出了你定义的字符数组的长度。这里1个很严重的问题是:虽然貌似你输入了多的字符也保存起来了,但实际山是占用了非法的内存空间保存起来的,也就是不属于str字符数组的空间。
  
对于像scanf这类输入函数不检查用户输入是不是合理合法就保存的做法是非常危险的。(原因是由于涉及到了指针的操作了。)换句话说,这样的代码是非常脆弱的。(不健壮)
而对于printf函数,道理差不多。
  你只是给出了1个地址,之后printf函数就从这个地址开始读入数据并转换输出,对于%s指示符而言,直到读出的字符是“空字符”为止。
要想完全正确理解这个现象,要对指针的概念有比较正确的认识。

本文来自网络,不代表汉扬编程立场,转载请注明出处:http://www.hyzlch.com/mianfei/5971.html

词频统计怎么做?无需代码,一键生成!

计算机二级的考试大纲是什么?

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

返回顶部