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

时间:2013-09-13 23:39:49

标签: c

如果你有

char test1[]  = { 'a', 'b', 'c' };
char test2[]  = "abc";

我理解sizeof(test1)是3,因为char只有1个字节,因此1x3 = 3

但为什么不是sizeof(test2) 3?是4吗?

2 个答案:

答案 0 :(得分:2)

test2实际上是一个已终止的字符串,因此对于此'\ 0'还有一个字符串,因此大小为4.

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

答案 1 :(得分:2)

字符串文字是具有隐含的附加的最终元素,其值为零的数组。这是各种str - 函数使用的惯例(例如,在<string.h>中告诉字符串结尾,即使你只给它们一个指向开头的指针。

通俗地说,我们说“C字符串是空终止的”,即使C实际上没有字符串 - 只是具有一些约定的字符数组。 (这些惯例相当脆弱,正如您刚才证明的那样:您可以将test1test2都传递给字符串函数,并产生不同程度的灾难性结果。)