-3

如果你有

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

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

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

4

2 回答 2

2

字符串字面量是具有隐式附加的最终元素且值为 0 的数组。str这是各种-functions使用的约定(例如,<string.h>即使您只给它们一个指向开头的指针,也可以告诉字符串的结尾。

通俗地说,我们说“C 字符串是以空值结尾的”,尽管 C 并没有真正的字符串——只是具有一些约定的字符数组。(约定相当脆弱,正如您刚刚展示的那样:您可以将test1test2传递给字符串函数,但会产生不同程度的灾难性结果。)

于 2013-09-13T23:46:48.083 回答
2

test2 实际上是一个终止的字符串,所以这个 '\0' 多了一个字符,所以大小是 4。

 test2[] = { 'a', 'b', 'c', '\0' };
于 2013-09-13T23:41:49.973 回答