以这种方式初始化的char数组是否自动添加了null终止符?

bcv*_*saf 2 c++ memory string char

char数组是否初始化为:

char foo[] = {0x31, 0x32, 0x33}; //123
Run Code Online (Sandbox Code Playgroud)

得到一个空终结符添加到它的末尾所以内存数据foo看起来像0x31323300?或者这只是将0x313233写入内存?此外,无论这种初始化方法如何,编译器都将foo视为字符串文字?

Som*_*ude 5

不,如果您没有指定数组的大小并且不使用string-literal作为初始化程序,则数组的大小和内容将与您拥有的初始化程序完全匹配.

在您的情况下,数组foo将正好char包含三个元素(按顺序)0x31,0x320x33.

如果使用string-literal作为初始化程序,则该数组将包含终结符.如果指定的大小大于初始化器的数量(例如,char foo[4]在具有三个初始化器的示例中),则剩余的元素将被零初始化(等于字符串终止符).

另请注意,即使您使用string-literal作为初始化程序,但指定的大小小于初始化程序,该数组也不会终止.