sizeof char数组被一个

时间:2015-09-14 17:53:54

标签: c++ arrays sizeof

我想使用sizeof函数来获取char数组的大小。我得到的尺寸太多了。例如:

#include <stdio.h>

char text[] = "hey";
const int n = sizeof(text);

int main(int argc, char *argv[])
{
    printf("%i\n", n);
    return 0;
}

输出4,而不是预期的3.我在各种在线c ++编译器上重现了这种行为,所以我认为这是有意的(奇怪的是,我无法在互联网上找到任何东西)。我在网上找到的大多数消息来源都说它应该是3 * sizeof(char)(大多数普通系统都是3)。

如果我理解正确,那么有一个额外的字节以某种方式用于数组表示。为什么会这样?

1 个答案:

答案 0 :(得分:4)

字符串文字隐式Int终止,因此NUL实际上是四个字符;您看到的三个字母加上"hey"(又名\0)。

初始化数组而不指定大小时,它会调整大小以匹配初始化程序,初始化程序是包含NUL的四字节数量。 NUL相当于说char text[] = "hey";。如果它不能像这样工作,尝试将数组的内容作为C风格的字符串使用将通过缓冲区运行到相邻的内存中,直到它找到一个char text[] = {'h', 'e', 'y', '\0'};终止符重合。