次のコードで「可変サイズのオブジェクトが初期化されていない可能性があります」というエラーが表示されるのはなぜですか?
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";
配列を宣言した後
int boardAux[length][length];
初期値をゼロとして割り当てる最も簡単な方法は、たとえそれが少し長くてもforループを使用することです
int i, j;
for (i = 0; i<length; i++)
{
for (j = 0; j<length; j++)
boardAux[i][j] = 0;
}
長さを短所として宣言するだけです。そうでない場合は、メモリを動的に割り当てる必要があります。