次のコードで「可変サイズ オブジェクトが初期化されていない可能性があります」というエラーが表示されるのはなぜですか?
int boardAux[length][length] = {{0}};
次のコードで「可変サイズ オブジェクトが初期化されていない可能性があります」というエラーが表示されるのはなぜですか?
int boardAux[length][length] = {{0}};
C99 コンパイラ (動的サイズの配列をサポート) を使用していると仮定しています。コードの問題は、コンパイラが変数宣言を確認した時点で、配列に含まれる要素の数を認識できないことです (length
コンパイル時定数ではないコンパイラ エラーから、ここでも想定しています)。
その配列を手動で初期化する必要があります。
int boardAux[length][length];
memset( boardAux, 0, length*length*sizeof(int) );
このエラーが表示されるのは、C 言語では可変長配列で初期化子を使用できないためです。あなたが得ているエラーメッセージは基本的にそれをすべて言います。
6.7.8 初期化
...
3 初期化されるエンティティの型は、サイズが不明な配列または可変長配列型ではないオブジェクト型でなければなりません。
これによりエラーが発生します:
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";
長さを短所として宣言するだけです。そうでない場合は、メモリを動的に割り当てる必要があります