指向字符串的数组

时间:2014-10-05 06:02:31

标签: c arrays string pointers

我们知道c会在字符数组的末尾自动插入NULL(\ 0)。但是为什么它不会在指向字符串的指针数组的末尾插入NULL字符。

例如:如果我写

char name[]={40,20,30,20,22,22,'c','a','b'}

将自动添加NULL字符。但是如果我创建一个类型为Char的指针数组 不会在数组末尾添加空字符 例如

char *names[]={"aaa","bbb","cccc"}

2 个答案:

答案 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的末尾找到了一个终结符,那么它就是纯粹的巧合,并且它依赖于未完成的行为领域。