Question Initialiser un tableau de longueur variable [dupliquer]


Cette question a déjà une réponse ici:

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 doit Tableaux de longueur variable être initialisé? Et pourquoi tous les éléments ne sont pas initialisés à 0 à la manière indiquée ci-dessous;

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

?


18
2018-06-26 23:54


origine


Réponses:


Les VLA ne peuvent pas être initialisé par toute forme de syntaxe d'initialisation. Vous devez attribuer 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é initialisée.

Le type de l'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.


16
2018-06-27 00:02



Vous devrez utiliser memset:

memset(board, 0, sizeof board);

15
2018-06-26 23:55



Si vous souhaitez utiliser des VLA, vous devez supprimer l'initialisation{0}

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

int board[n][n];

2
2018-06-26 23:57



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 () devrait être utilisé seulement lorsque vous voulez définir le tableau sur "0".


0
2017-12-24 15:05