在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