Création d’une structure allouée dynamicment avec une chaîne 2D allouée dynamicment

J’essaie de scanner une grid de lettres. cases est le nombre de grids de lettres et r , c sont le nombre de lignes et de colonnes de chaque grid. J’ai pensé que je pourrais créer un tableau de structures avec des tableaux 2D à l’intérieur. Je travaille dessus depuis quelques heures maintenant et cela me pose toujours des problèmes:

Le code:

 scanf_s("%d", &cases); struct grid { char **grid; }; struct grid *grids = (struct grid*)malloc(cases * sizeof(struct grid)); for (i = 0; i < cases; i++) { scanf_s("%d %d", &r, &c); grids[i].grid = (char**)malloc(sizeof(char*) * r); for (k = 0; k < r; k++) { grids[i].grid[k] = (char*)malloc(sizeof(char) * (c+1)); scanf_s("%s", grids[i].grid[k], (c+1)); } } 

J’ai dû modifier un peu le code dans la question, ainsi que pour append certaines parties manquantes (qui auraient dû être fournies, d’ailleurs), afin d’obtenir un élément compilable (à l’aide de VStudio2010 ).

main.c :

 #include  #include  struct grid { char **grid; }; int main() { int cases, r, c, k, i; struct grid *grids; scanf_s("%d", &cases); grids = (struct grid*)malloc(cases * sizeof(struct grid)); for (i = 0; i < cases; i++) { scanf_s("%d %d", &r, &c); grids[i].grid = (char**)malloc(sizeof(char*) * r); for (k = 0; k < r; k++) { grids[i].grid[k] = (char*)malloc(sizeof(char) * (c + 1)); scanf_s("%s", grids[i].grid[k], (c + 1)); } } return 0; } 

Notes :

  • Vous étiez en train de comstackr le code en C ++ (comme @alk l’a remarqué) et c’est ce qui vous a complètement échappé. Afin de résoudre ce problème, soit:
    • Définissez votre extension de fichier sur .c (et vous pouvez laisser les valeurs par défaut de VStudio en terme de compilation; de cette manière, chaque fichier source sera compilé à l'aide du compilateur approprié en fonction de son extension).
    • Comstackz explicitement le fichier source en tant que C. Vous pouvez définir cela à partir de Propriétés du projet VStudio -> C / C ++ -> Avancé -> Comstackr en tant que , puis en choisissant Comstackr en tant que code C. Pour plus d'informations, visitez [MSDN]: / Tc, / Tp, / TC, / TP (spécifier le type de fichier source) . Personnellement, je pense que la première option est plus simple
  • Déplacez les déclarations de variable avant toute instruction (je pense que cela aurait pu être un candidat pour configurer le compilateur C ++ ). C’était une ressortingction pour les anciennes normes C (je doute qu’elle soit toujours valable ), mais le compilateur C ( VStudio2010 ) l’applique toujours (au moins par défaut)