如果你有
char test1[] = { 'a', 'b', 'c' };
char test2[] = "abc";
我理解sizeof(test1)
是3,因为char只有1个字节,因此1x3 = 3
但为什么不是sizeof(test2)
3?是4吗?
答案 0 :(得分:2)
test2实际上是一个已终止的字符串,因此对于此'\ 0'还有一个字符串,因此大小为4.
test2[] = { 'a', 'b', 'c', '\0' };
答案 1 :(得分:2)
字符串文字是具有隐含的附加的最终元素,其值为零的数组。这是各种str
- 函数使用的惯例(例如,在<string.h>
中告诉字符串结尾,即使你只给它们一个指向开头的指针。
通俗地说,我们说“C字符串是空终止的”,即使C实际上没有字符串 - 只是具有一些约定的字符数组。 (这些惯例相当脆弱,正如您刚才证明的那样:您可以将test1
和test2
都传递给字符串函数,并产生不同程度的灾难性结果。)