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};
?
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.
Vous devrez utiliser memset
:
memset(board, 0, sizeof board);
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];
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".