11

请看以下 C++ 代码:

char a1[] = {'a','b','c'};
char a2[] = "abc";
cout << sizeof(a1) << endl << sizeof(a2) << endl;

虽然sizeof(char)是 1 个字节,但为什么输出显示sizeof(a2)为 4 而不是 3(如a1)?

4

3 回答 3

22

C 字符串包含一个空终止符,因此添加了一个字符。

本质上是这样的:

char a2[] = {'a','b','c','\0'};
于 2012-05-24T10:51:15.070 回答
2

这是因为'\0'在 C 字符串的末尾添加了一个额外的空字符,而第一个变量a1是一个由三个单独字符组成的数组。

sizeof会告诉你变量的字节大小,但strlen如果你想在运行时获得 C 字符串的长度,则更喜欢。

于 2012-05-24T11:02:55.227 回答
0

对于 a2,这是一个字符串,因此它还包含 '\n'

更正,在 Ethan 和 Adam 评论之后,这当然不是 '\n' 而是空终止符,即 '\0'

于 2012-05-24T10:52:02.137 回答