下面能正确进行字符串数组赋值赋值操作的是

176、以下能正确进行字符串赋值、赋初值的语句组是(
s[5]={‘a’,’e’,’i’,’o’,’u’};  B、
s=”good!”;  C、
s[5]=”good!”;  D、
s=”good”;
选DA错,A是对字符数组赋值,不是字符串赋值,因为没有字符串终结符'\0'B错,s只是一个指向字符串常量的指针C错,位数不够,没有字符串终结符'\0
为您推荐:
扫描下载二维码下面各语句行中,能正确进行赋字符串操作的语句行是( )A) char st[4][5]={"ABCDE"};B) char s[5]={‘A’,‘B’,‘C’,‘D’,‘E’};C) char *s; s= “ABCDE”;D) char *s; scanf(“%s”,s);说下哪个对,哪些错,为什么对,为什么错?B我看是字符组数跟题目的意思会搭么?
选C.A不用说了.B是一个合法的“字符数组”初始化语句,但是不是一个正确的“字符串”赋值语句,因为字符串要求最后有字符串结束标志'\0'.C对."ABCDE"是一个字符串常量,它存储在静态数据区中.D不对.这个语句跟下面这种情况类似:int *p;scanf("%d", p);p是一个野指针,不能直接往p指向的内存空间中输入数据.对于这个题目来说,只能用:char s[10];scanf("%s", s);这种操作.
C和D的*s都是指针啊!为什么一个行,一个不行啊?不理解啊!!参考答案选择B,更不解
正确答案绝对是C,毫无疑问。
D是有关野指针的问题。
这种写法,跟:
*p = 10;是一样的。
char* s,s也是一个野指针,它指向的内存空间是随机的,不是一块合法的内存空间。用scanf("%s", s);就是往一块不合法的内存空间里写入内容,会造成非法写错误。
这个问题,刚开始学指针不理解很正常,时间久了就理解了。
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 字符串数组赋值 的文章

 

随机推荐