char缓冲区初始化的标准行为

par*_*mar 0 c++ char

如果我定义了如下的char缓冲区

char buffer[20] = "foo";
Run Code Online (Sandbox Code Playgroud)

然后

buffer[0] == 'f';
buffer[1] == 'o';
buffer[2] == 'o';
buffer[3] == 0;
Run Code Online (Sandbox Code Playgroud)

是什么标准说的缓冲[4] ,以缓冲[19] .它们是否也保证初始化为零?

Alo*_*ave 8

所有剩余的元素保证初始化为零.

参考:
C++ 03标准部分6.7.8第21段:

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.