web-dev-qa-db-ja.com

可変長配列の初期化

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

[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};

19
haccks

VLAは、初期化構文の形式によってinitializedにすることはできません。宣言後、配列要素に初期値をどの方法でもassignする必要があります。

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

初期化子は、初期化されているエンティティ内に含まれていないオブジェクトの値を提供しようとしません。

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

18
AnT

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

memset(board, 0, sizeof board);
18
Carl Norum

1.次のように単純に配列を初期化できます

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

int board[n][n];
for(int i=0; i<n; i++)
   for(int j=0; j<n; j++)
   {
      board[i][j] = 0;
   }
}

2. memset()は、配列を「0」に設定する場合にのみ使用してください。

0
Parag Gangil