C 以空终止符结尾的字符串文本是否包含额外的空终止符?

C 以空终止符结尾的字符串文本是否包含额外的空终止符?,c,string,standards,C,String,Standards,例如: char a[] = "abc\0"; 标准C是否规定,即使字符串末尾已经有一个零,也必须追加另一个字节的值0?因此,sizeof(a)等于4还是5?所有字符串文字都有一个隐式空终止符,而不管字符串的内容如何 标准(6.4.5字符串文字)规定: 值为零的字节或代码附加到由字符串文字产生的每个多字节字符序列 因此,字符串literal“abc\0”除了显式终止符外,还包含隐式null终止符。因此,数组a包含5个元素。你的问题中的英语完全没有问题。但是你不能通过简单的尝试来找到答案吗?如果

例如:

char a[] = "abc\0";

标准C是否规定,即使字符串末尾已经有一个零,也必须追加另一个字节的值
0
?因此,
sizeof(a)
等于4还是5?

所有字符串文字都有一个隐式空终止符,而不管字符串的内容如何

标准(6.4.5字符串文字)规定:

值为零的字节或代码附加到由字符串文字产生的每个多字节字符序列


因此,字符串literal
“abc\0”
除了显式终止符外,还包含隐式null终止符。因此,数组
a
包含5个元素。

你的问题中的英语完全没有问题。但是你不能通过简单的尝试来找到答案吗?如果你想明确,你可以写:
chara[]={'a','b','c','\0'}。这不是声明为字符串文字,因此不会附加额外的终止null。后者似乎有点错误,因为标准中说附加了一个“\0”,使字符串文字大小为5个字符,因此对于4个字符的数组来说似乎太大了。但是,如果初始值设定项对于固定大小的数组来说太大,多余的元素将被忽略/不用于初始化(§6.7.8第14段),这在本例中是可以的,但我会避免这样写。因此,数组a包含5个元素。你的意思是
4
元素吗?@BikalGurung:No,5是正确的。{'a'、'b'、'c'、'\0'、'\0'}