繁体   English   中英

指向字符串的指针数组

[英]Array of pointers to strings

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

对于示例:如果我写

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

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

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

您的理解不正确。 你说,

对于示例:如果我写

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

NULL字符将被自动添加。

那是不对的。

如果您使用:

char name[] = "abc";

将添加一个终止的空字符,但不会以您使用的形式出现。

C 没有做到这一点对字符数组(或任何其他阵列的这个问题),它会为字符串文字,如"xyzzy" ISO C标准C11 6.4.5 String literals /7的相关位:

在转换阶段7中,一个或多个字符串文字产生的每个多字节字符序列将附加一个零值的字节或代码。 然后,多字节字符序列用于初始化一个足以包含该序列的静态存储持续时间和长度数组。

对于字符串文字,数组元素的类型为char,并使用多字节字符序列的各个字节进行初始化。

这样做的原因是因为它知道您希望字符串以null终止,否则它们实际上根本不是C字符串。

如果您确实在非字符串文字字符数组name的末尾找到了终止符,那纯粹是巧合,并且依靠它很容易进入未定义的行为范围。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM