web-dev-qa-db-fra.com

Initialisation d'un tableau de longueur variable

Lors de l'initialisation d'un compilateur de tableau de longueur variable, un message d'erreur s'affiche:

[Error] variable-sized object may not be initialized  

Extrait de code:

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

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

Comment tableaux à longueur variable doit-il être initialisé? Et pourquoi tous les éléments ne sont pas initialisés à 0 de la manière indiquée ci-dessous;

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

?

19
haccks

Les VLA ne peuvent pas être initialisés par aucune forme de syntaxe d'initialisation. Vous devez affecter les valeurs initiales à vos éléments de tableau après la déclaration de la manière que vous préférez.

C11: 6.7.9 Initialisation (p2 et p3):

Aucun initialiseur ne doit tenter de fournir une valeur pour un objet non contenu dans l'entité en cours d'initialisation.

Le type d'entité à initialiser doit être un tableau de taille inconnue ou un type d'objet complet ce n'est pas un type de tableau de longueur variable.

18
AnT

Vous devrez utiliser memset:

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

1.Vous pouvez simplement initialiser le tableau comme suit-

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 () ne doit être utilisé que lorsque vous souhaitez définir le tableau sur "0".

0
Parag Gangil