石家庄国际丽都物业:[c]下面是对数组s的初始化,其中错误的是?

来源:百度文库 编辑:杭州交通信息网 时间:2024/04/29 08:34:04
a.char s[5]={"abc"};
b.char s[5]={'a','b','c'};
c.char s[5]=""
d.char s[5]="abcde"

答案是D为什么阿?

前面三个都使s储存了一个字符串,都自动加了串结束符,D因为“abcde”本身就有5个字符了,s这个字符数组满了,电脑就不会自动加串结束符,所以D中的s代表的不是字符串,从这个意义上讲它就错了

to pright先生:
D选项并不会引起编译错误,这点在TC20下证实.另外B选项的初始化因为不满5个,编译器会自动为未初始化的项赋0值,这个也在TC20下证实

因为编译器会自动在字符串常量后面添加一个'\0'作为结束标志。
d.的"abcde"实际上是5+1个字符,而定义的时候只分配了5个字节大小的空间,会导致编译错误。
ps:a和d右边所赋的值都由编译器给添加了1个结束标志,但是b没有,因为b所赋的是3个字符常量,而不是字符串常量。
to 利德:
确实d.在tc下不会出现编译错误,不过在dev c++下是通不过编译的,这完全由编译器决定。
至于b选项,确实是我疏忽,忘了左边是char s[5]而不是char s[],但是这是因为初始化项数少于维数,所以编译器自动赋的'\0'值,并不是由于所赋的是字符串常量而添加的结束标志。