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)
不,它没有.您的数组x只有4个元素.您正在传递std::cout指针char,该指针不是以null结尾的字符串的开头.这是未定义的行为.
例如,在我的平台上,打印出类似的代码Word?,带有虚假的问号.
在 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)