web-dev-qa-db-ja.com

Cで配列を0に初期化する方法は?

グローバルとしてCで大きなnull配列が必要です。入力する以外にこれを行う方法はありますか

char ZEROARRAY[1024] = {0, 0, 0, /* ... 1021 more times... */ };

134
Claudiu

グローバル変数と静的変数は自動的にゼロに初期化されます。単に持っている場合

char ZEROARRAY[1024];

グローバルスコープでは、実行時にすべてゼロになります。しかし実際には、ローカル配列があれば、は簡略構文です) 配列が部分的に初期化されている場合、初期化されていない要素は適切なタイプの値0を受け取ります。 次のように書くことができます。

char ZEROARRAY[1024] = {0};

コンパイラは、書き込まれていないエントリをゼロで埋めます。または、memsetを使用して、プログラムの起動時に配列を初期化できます。

memset(ZEROARRAY, 0, 1024);

変更して、すべてゼロにリセットする場合に便利です。

233
John Kugelman

gccを使用して、配列を0以外の値に初期化する場合は、次の操作を実行できます。

int array[1024] = { [ 0 ... 1023 ] = -1 };

これは、C99のGNU拡張です Designated Initializers 。古いGCCでは、-std=gnu99を使用してコードをコンパイルする必要がある場合があります。

26
Deqing