5日連続で2つのビッグセール開催中!

【C/C++】C2078「初期化子の数が多すぎます」の原因と対処法

1 min

配列を宣言しようとしたけど「初期化子の数が多すぎます」と表示されてコンパイルエラーとなりプログラムを実行できないことがあります。

初心者の方はやってしまいがちな問題で、エラーメッセージの意味が良く分からないという方も多いでしょう。

経験者であれば簡単に解決できる問題ですが、初心者には少し難しいかもしれないので初心者向けに噛み砕いて解説します。

C2078「初期化子の数が多すぎます」の原因

「初期化子の数が多すぎます」は、配列を宣言したときに指定した要素数よりも宣言時に代入しようとした値の数のほうが多いときに発生するエラーです。

例えば以下のコードは配列numを要素数2個として宣言しているにも関わらず、初期化子を4つ指定してしまっています。

int nums[2]={1,2,3,4};

簡単に言うと「2人用の椅子に4人座ろうとしている」状態です。こういった溢れた状態はC言語・C++ではエラーとなります。

C2078「初期化子の数が多すぎます」の対処法

適切な数を指定する

配列の要素数を2個と決めたら2個、4個と決めたら4個しっかり指定するようにしましょう。

int nums[2]={1,2};

初期化子の数が少ない場合は問題ありません。値が指定されていない要素は自動的に0埋めされます。ですので以下のコードを書いても問題ありません。

int nums[100]={1,2,3};

配列の要素数に余裕をもたせたい場合は多めに確保しておくと良いでしょう。

配列の要素数を定義しない

C言語では配列の要素数を指定せずに初期化することができます。例えば以下のコードをコンパイルしてもエラーは発生しません。

//自動的にnums[4]として処理される
int nums[]={1,2,3,4};

初期化子の数に合わせて配列の要素数が自動的に調整されるため、こちらのほうがコンパイルエラーが起きにくくなります。後で要素数を変更することはできないので、初めから値を全て指定するようにしてください。

要素数を指定しない場合、初期化子がないとコンパイルエラーになるので注意

配列は頻繁に使うことになるので覚えておくようにしてください。