如果你有
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' };