在C中,您可以部分初始化结构体或数组,结果是初始化程序中未提及的成员/元素将被初始化。 (C99第6.7.8.19节)。例如: -字符串文字是否计算为部分初始化器并进行零初始化?
int a[4] = {1, 2};
// a[0] == 1
// a[1] == 2
// a[2] == 0
// a[3] == 0
也可初始化“字符类型的数组的”与字符串文字(C99节6.7.8.14),以及“连续的字符...初始化数组的元素”。例如: -
char b[4] = "abc";
// b[0] == 'a'
// b[1] == 'b'
// b[2] == 'c'
// b[3] == '\0'
所有非常简单。但是如果你明确地给出数组的长度会发生什么,但是使用太短的文字来填充数组呢?剩余的字符是否被初始化,还是有未定义的值?
char c[4] = "a";
// c[0] == 'a'
// c[1] == '\0'
// c[2] == ?
// c[3] == ?
把它当作一个部分初始化将使意义,它将使char c[4] = "a"
完全一样char c[4] = {'a'}
,并且它必须让你简明char d[N] = ""
零初始化整个字符数组的有用的副作用,但我不清楚这是规格要求。
Woot。我在SO上发现了一个有意义的问题。丹,你做了我的一天。 – 2012-08-02 15:39:52