124

次のコードで「可変サイズ オブジェクトが初期化されていない可能性があります」というエラーが表示されるのはなぜですか?

int boardAux[length][length] = {{0}};
4

9 に答える 9

160

C99 コンパイラ (動的サイズの配列をサポート) を使用していると仮定しています。コードの問題は、コンパイラが変数宣言を確認した時点で、配列に含まれる要素の数を認識できないことです (lengthコンパイル時定数ではないコンパイラ エラーから、ここでも想定しています)。

その配列を手動で初期化する必要があります。

int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );
于 2010-06-21T08:06:17.003 に答える
33

このエラーが表示されるのは、C 言語では可変長配列で初期化子を使用できないためです。あなたが得ているエラーメッセージは基本的にそれをすべて言います。

6.7.8 初期化

...

3 初期化されるエンティティの型は、サイズが不明な配列または可変長配列型ではないオブジェクト型でなければなりません。

于 2010-06-21T08:09:30.307 に答える
17

これによりエラーが発生します:

int len;
scanf("%d",&len);
char str[len]="";

これもエラーになります:

int len=5;
char str[len]="";

しかし、これはうまくいきます:

int len=5;
char str[len]; //so the problem lies with assignment not declaration

次の方法で値を設定する必要があります。

str[0]='a';
str[1]='b'; //like that; and not like str="ab";
于 2014-11-08T09:21:38.277 に答える
-2

長さを短所として宣言するだけです。そうでない場合は、メモリを動的に割り当てる必要があります

于 2016-03-02T20:26:21.390 に答える