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] = ""
が、それが何であるかは私にはまったくわかりません仕様に必要です。