C 数组和字符串之间的字符大小不一致

C 数组和字符串之间的字符大小不一致,c,C,如果你有 char test1[] = { 'a', 'b', 'c' }; char test2[] = "abc"; 我理解sizeof(test1)是3,因为char只有1个字节,因此1x3=3 但是为什么sizeof(test2)3不存在呢?y是4吗?test2实际上是一个终止的字符串,所以这个“\0”还有一个字符,所以大小是4 test2[] = { 'a', 'b', 'c', '\0' }; 字符串文字是具有值为零的隐式附加最终元素的数组。这是各种str-函数(例如,在中

如果你有

char test1[]  = { 'a', 'b', 'c' };
char test2[]  = "abc";
我理解
sizeof(test1)
是3,因为char只有1个字节,因此1x3=3


但是为什么
sizeof(test2)
3不存在呢?y是4吗?

test2实际上是一个终止的字符串,所以这个“\0”还有一个字符,所以大小是4

 test2[] = { 'a', 'b', 'c', '\0' };

字符串文字是具有值为零的隐式附加最终元素的数组。这是各种
str
-函数(例如,在
中)所使用的约定,用于告诉字符串的结尾,即使您只给它们一个指向开头的指针


通俗地说,我们说“C字符串以null结尾”,即使C实际上没有字符串——只是具有某些约定的字符数组。(正如您刚才演示的那样,这些约定相当脆弱:您可以将
test1
test2
传递给字符串函数,从而产生不同程度的灾难性结果。)

对于终止的
'\0'
?C确实有字符串。根据定义,字符串是“以第一个空字符结尾并包含第一个空字符的连续字符序列”(ISO C标准,第7.1.1节)。C没有的是字符串类型。