带有char数组的C中未定义的行为(?)

gue*_*est 0 c arrays string char undefined-behavior

当我尝试

    char bla[32] = "foobar";
    int i;
    putchar(bla[i]);
Run Code Online (Sandbox Code Playgroud)

strlen(bla) < i < 32,bla[i]是永远\0.但事实上这不是未定义的行为,应该避免吗?

tom*_*gic 5

在C99标准第6.7.8节中,第21段规定:

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

第10段规定静态算术类型(包括char)初始化为零.

基于此,当使用字符串文字作为初始化程序时,您应该期望将数组的其余部分初始化为零.