【问题标题】:C++: size of a char array using sizeofC++:使用 sizeof 的 char 数组的大小
【发布时间】:2012-05-24 10:49:32
【问题描述】:

看看下面这段 C++ 代码:

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

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

【问题讨论】:

  • +1 从答案(以及我对初级程序员的经验)来看,这个问题会引起很多混乱,并导致许多难以发现的细微错误。

标签: c++ arrays string sizeof


【解决方案1】:

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

基本上是这样的:

char a2[] = {'a','b','c','\0'};

【讨论】:

  • 我喜欢这个答案,因为它清楚地说明了初始化的等价性,但对我来说,谈论 a2, 而不是 a1 更有意义 - 你在这里引用的 init 是你通过填充得到的将 C 字符串转换为 a2
【解决方案2】:

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

sizeof 会告诉您变量的字节大小,但如果您想在运行时获得 C 字符串的长度,则首选 strlen

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • a2 的末尾没有\n(换行符)。字符串末尾有一个空 (\0) 字符。为你感到羞耻,支持者。
    • -1: 错误,a2 最后不包含'\n',而是包含'\0'
    • 对不起,你是对的,我的意思是空终止符 '\0' 感谢您的更正
    • @miks Adam 在我之前发表了评论。但是,在您更正后,我删除了反对票:)
    猜你喜欢
    • 2018-04-14
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    相关资源
    最近更新 更多