如果你有
char test1[]  = { 'a', 'b', 'c' };
char test2[]  = "abc";
我知道sizeof(test1)是 3,因为 char 只有 1 个字节,因此 1x3 = 3
但是为什么不是sizeof(test2)3?你是4吗?
如果你有
char test1[]  = { 'a', 'b', 'c' };
char test2[]  = "abc";
我知道sizeof(test1)是 3,因为 char 只有 1 个字节,因此 1x3 = 3
但是为什么不是sizeof(test2)3?你是4吗?
字符串字面量是具有隐式附加的最终元素且值为 0 的数组。str这是各种-functions使用的约定(例如,<string.h>即使您只给它们一个指向开头的指针,也可以告诉字符串的结尾。
通俗地说,我们说“C 字符串是以空值结尾的”,尽管 C 并没有真正的字符串——只是具有一些约定的字符数组。(约定相当脆弱,正如您刚刚展示的那样:您可以将test1和test2传递给字符串函数,但会产生不同程度的灾难性结果。)
test2 实际上是一个终止的字符串,所以这个 '\0' 多了一个字符,所以大小是 4。
 test2[] = { 'a', 'b', 'c', '\0' };