32)下面各语句行中,能正确进行赋值字符串操作的是( )。 A)char s[5]={'a','b','c','d', 'e'};

B)char *s;gets(s);
C)char *s;s="ABCDEF"; D)char s[5];scanf("%s",&s);
答案是B 求解C为什么不对啊?

如果你没贴错的话
那么答案是错误的,正确的是C
A) 因为没有字符串结束符'\0',所以s不算字符串
B) char *s;gets(s); s还是个野指针,所以gets(s)是不安全的

C) char *s;s="ABCDEF"; 正确,定义了一个指针s,然后把s指向存储"ABCDEF"这个字符串的内存首地址。 s="ABCDEF" ; 就是在初始化s

D) char s[5];scanf("%s",&s); 实际上这个也不会错,看起来&s的类型是char(*)[5],和scanf要求的char*类型不符,但实际上scanf的%s格式决定了scanf不会理睬参数的类型,不管是什么类型,它都会看作是char*,只要地址数值一样就行

目前c语言的考试也就那么回事
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-04-13
c选项:char *s;定义一个指针,但没有分配内存,系统默认分配4个字节
s="ABCDEF";给它赋值的字符串已经超过四个字节,所以是错的
第2个回答  2014-03-26
未经初始化的指针变量严禁使用,必须先初始化后才能用 C答案的指针s还没有初始化
第3个回答  2019-03-29
如果你没有写错的话,ABC应该都是对的,以上三种方式我都在书上看到过并且在程序中可以成功运行,只有D是有问题的,多了一个&符号。
第4个回答  2014-03-26
C中s=&A才行,s是指向char的指针变量,应该放地址
相似回答