4

考虑以下 char 数组:

char str[128] = "abcd";

str[4]数组其余部分(从到)中的所有剩余未初始化字符是否已str[127]填充零/空?

4

2 回答 2

10

是的,如果在初始化程序中显式给出的元素少于聚合包含的元素,那么将初始化剩余的元素,就好像聚合具有静态存储持续时间一样。对于整数类型(并且char是一),这意味着 0。该标准的相关部分是6.7.9(21):

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

在这方面,作为char数组初始化器的字符串字面量等同于带大括号的初始化器。

于 2012-09-03T17:57:36.457 回答
3

是的,字符串文字初始值设定项与以下初始值设定项相同:

char str[128] = { 'a', 'b', 'c', 'd', 0 };

缺少的数组元素被初始化为零,因此数组的其余部分全为零。

于 2012-09-03T17:59:28.450 回答