21

可変長配列コンパイラを初期化すると、次のエラー メッセージが表示されます。

[Error] variable-sized object may not be initialized  

コードスニペット:

int n; 
printf("Enter size of magic square: ");
scanf("%d",&n);

int board[n][n] = {0};

可変長配列はどのように初期化する必要がありますか? そして、なぜすべての要素が0以下の方法で初期化されないのか;

   int board[n][n];
   board[n][n] = {0};

?

4

3 に答える 3

25

使用する必要がありますmemset

memset(board, 0, sizeof board);
于 2013-06-26T23:55:52.937 に答える
19

VLA は、どの形式の初期化構文でも初期化できません。宣言の後に、好きな方法で初期値を配列要素に割り当てる必要があります。

C11: 6.7.9 初期化 (p2 および p3):

イニシャライザは、初期化されるエンティティに含まれていないオブジェクトに値を提供しようとしません。

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

于 2013-06-27T00:02:04.830 に答える