sizeof char 数组差一

sizeof char array is off by one

我想使用 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)。

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

字符串字面值隐式 NUL 终止,所以 "hey" 实际上是四个字符的大小;您看到的三个字母,加上 [=12=](又名 NUL)。

当你初始化一个数组而不指定大小时,它会调整它的大小以匹配初始化器,而初始化器是包括 NUL 在内的四个字节数量。 char text[] = "hey"; 相当于说 char text[] = {'h', 'e', 'y', '[=16=]'};。如果它不是这样工作的,尝试将数组的内容作为 C 风格的字符串来处理会 运行 通过缓冲区进入邻近的内存,直到它巧合地找到一个 NUL 终止符。