是否会自动插入空字符?

cha*_*255 1 c++ arrays string initialization string-literals

C++编译器是否应该在char数组结束后自动插入空字符?以下打印"Word".那么C++编译器会自动在数组的最后位置插入一个空字符吗?

int main()
{
    char x[] = {'W', 'o', 'r', 'd'};
    cout << x << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

jua*_*nza 5

不,它没有.您的数组x只有4个元素.您正在传递std::cout指针char,该指针不是以null结尾的字符串的开头.这是未定义的行为.

例如,在我的平台上,打印出类似的代码Word?,带有虚假的问号.


Vla*_*cow 5

在 C/C++ 中,字符串文字会自动附加以零结尾。所以如果你会写例如

char x[] = "Word";
Run Code Online (Sandbox Code Playgroud)

那么数组的大小将等于 5,并且数组的最后一个元素将包含 '\0'。

当如您所示使用以下记录时

char x[] = {'W', 'o', 'r', 'd'};
Run Code Online (Sandbox Code Playgroud)

那么编译器分配的元素数量与初始化器的数量完全相同。也就是说,在这种情况下,数组将只有 4 个元素。

但是如果你写成下面的方式

char x[5] = {'W', 'o', 'r', 'd'};
Run Code Online (Sandbox Code Playgroud)

那么第五个元素将包含终止零,因为它没有相应的初始化程序并且将被零初始化。

还要考虑到以下记录在 C 中有效,但在 C++ 中无效

char x[4] = "Word";
Run Code Online (Sandbox Code Playgroud)