sizeof char数组减一

Rub*_*ben -3 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;
}
Run Code Online (Sandbox Code Playgroud)

输出4,而不是预期的3。我在各种在线c ++编译器上重现了此行为,所以我认为这是有目的的(奇怪的是,我在Internet上找不到任何东西)。我在网上可以找到的大多数资源都说应该为3 * sizeof(char)(在大多数普通系统上为3)。

如果我正确理解了所有内容,那么将以某种方式将多余的字节用于数组表示。为什么会这样?

Sha*_*ger 5

字符串文字是隐式NUL终止的,"hey"实际上是四个字符。您看到的三个字母,再加上一个\0(aka NUL)。

当您在不指定大小的情况下初始化数组时,它会调整其大小以匹配初始值设定项,并且初始值设定项是包括在内的四个字节NULchar text[] = "hey";等于说char text[] = {'h', 'e', 'y', '\0'};。如果它不能这样工作,则尝试以C样式字符串的形式处理数组的内容将越过缓冲区进入相邻的内存,直到NUL巧合地找到终止符为止。

  • 是的。必须或尝试使用字符串文字,就好像它们是C样式的字符串一样,都将导致缓冲区读取溢出。每个与C字符串相关的函数都需要存在一个空格,并用`NUL`终止符填充。如果您不尝试使用真实的字符串,只需将数组初始化为这些值(并且您绝不会在没有显式大小的情况下对数组进行“ printf”处理,“ strlen”处理等),那么可以通过以下方式使用显式值:值初始化(`{'h','e','y'}`)。您也可以将数组的大小显式设置为3;不知道C标准是否正式支持。 (2认同)