我们知道c会在字符数组的末尾自动插入NULL(\ 0)。但是为什么它不会在指向字符串的指针数组的末尾插入NULL字符。
例如:如果我写
char name[]={40,20,30,20,22,22,'c','a','b'}
将自动添加NULL字符。但是如果我创建一个类型为Char的指针数组 不会在数组末尾添加空字符 例如
char *names[]={"aaa","bbb","cccc"}
答案 0 :(得分:3)
您的理解不正确。你说,
例如:如果我写
char name[]={40,20,30,20,22,22,'c','a','b'}
将自动添加NULL字符。
事实并非如此。
如果您使用:
char name[] = "abc";
添加了终止空字符,但未添加到您正在使用的表单中。
答案 1 :(得分:2)
C 不为字符数组(或任何其他数组)执行此操作,它为字符串文字(例如"xyzzy"
)执行此操作。 ISO C标准的相关位C11 6.4.5 String literals /7
:
在转换阶段7中,将值为零的字节或代码附加到每个多字节 由字符串文字或文字产生的字符序列。多字节字符 然后,序列用于初始化静态存储持续时间和长度的数组 足以包含序列。
对于字符串文字,数组元素的类型为char,并使用多字节字符序列的各个字节进行初始化。
原因它这样做是因为它知道你希望字符串被空终止,否则它们根本就不是C字符串。
如果你做碰巧在你的非字符串文字字符数组name
的末尾找到了一个终结符,那么它就是纯粹的巧合,并且它依赖于未完成的行为领域。