2017-10-14 12 views
3

Je dois prendre un tableau 2d (Grid) à partir de stdin, faire un peu de manupulation aux caractères et imprimer une nouvelle grille avec les changements. Ma stratégie consistait à faire un Struc avec une grille Grid [LINES] [COLUMNS] puis utiliser getChar() pour pousser chaque caractère dans la grille en utilisant un pointeur. Cela fonctionne très bien lorsque j'imprime dans la fonction, mais je ne peux pas accéder aux valeurs de l'extérieur. Je reçois seulement des caractères étranges qui représentent probablement l'adresse mémoire ou quelque chose.Accès aux valeurs de tableau 2D à l'aide d'un pointeur

Voici un bloc de code simplifié du programme.

#include <stdio.h> 
#include <stdlib.h> 
#include <stdbool.h> 
#include <string.h> 

struct Grid{       
    char box[20][40]; 
}; 


int main(int argc, char *argv[]) { 
    struct Grid grid; 

    readInitGrid(&grid); 
    displayGrid(&grid); 

} 

void readInitGrid(struct Grid *grid) { 
    char c; 
    for (unsigned int i = 0; i < 20; i++) { 
    for (unsigned int j = 0; j < 40 + 1; j++) { //+1 is for the /n at the end of each line 
     while ((c = getchar()) != EOF) { 
     grid->box[i][j] = c; 
     printf("%c", grid->box[i][j]);  //Will print correcly 
     } 
    } 
    } 
} 

void displayGrid(const struct Grid *grid) { 
    for (unsigned int i = 0; i < 20; ++i) { 
     for (unsigned int j = 0; j < 40; ++j) { 
      printf("%c", grid.box[i][j]);  //This do not work 
     } 
    } 
    printf("\n"); 
} 

Result - See both print block bellow First block show perfectly but second is messed-up

Je passe d'autres choses à ce struct dans le programme réel et je n'ai pas de l'acces aux issu infomration pour int et le charbon. Le seul problème que je rencontre est celui de 2d array. Une autre chose, je ne peux pas utiliser maloc pour cela.

+0

Correction Merci @xing – CareFace

+0

Ok l'a fait. Désolé, c'est la première fois que j'utilise stackoverflow. – CareFace

Répondre

1

Modifié le temps en un if si que ma boucle for affecte la grille-> case [i] [j] = c;

void readInitGrid(struct Grid *grid) { 
    char c; 
    for (unsigned int i = 0; i < 20; i++) { 
    for (unsigned int j = 0; j < 40 + 1; j++) { 
     if ((c = getchar()) != EOF) { 
     grid->box[i][j] = c; 
     printf("%c", grid->box[i][j]);  
     } 
    } 
    } 
}