C 使用指针访问二维数组值

C 使用指针访问二维数组值,c,arrays,pointers,C,Arrays,Pointers,我需要从stdin获取一个2d数组(网格),对字符进行一些操作,并打印一个带有更改的新网格 我的策略是使用网格[LINES][COLUMNS]创建一个Struc,然后使用getChar()使用指针将每个字符推入网格。当我在函数内打印时,它工作得很好,但我无法从外部访问值。我只得到了一些奇怪的字符,可能代表记忆地址或其他什么 下面是该程序的简化代码块 #include <stdio.h> #include <stdlib.h> #include <stdbool.h&

我需要从stdin获取一个2d数组(网格),对字符进行一些操作,并打印一个带有更改的新网格

我的策略是使用网格[LINES][COLUMNS]创建一个Struc,然后使用getChar()使用指针将每个字符推入网格。当我在函数内打印时,它工作得很好,但我无法从外部访问值。我只得到了一些奇怪的字符,可能代表记忆地址或其他什么

下面是该程序的简化代码块

#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");
}
#包括
#包括
#包括
#包括
结构网格{
炭盒[20][40];
};
int main(int argc,char*argv[]){
结构网格;
readInitGrid(&grid);
显示网格(&grid);
}
void readInitGrid(结构网格*Grid){
字符c;
for(无符号整数i=0;i<20;i++){
for(unsigned int j=0;j<40+1;j++){/+1表示每行末尾的/n
而((c=getchar())!=EOF){
网格->框[i][j]=c;
printf(“%c”,网格->框[i][j]);//将正确打印
}
}
}
}
void displayGrid(常量结构网格*网格){
for(无符号整数i=0;i<20;++i){
用于(无符号整数j=0;j<40;++j){
printf(“%c”,grid.box[i][j]);//这不起作用
}
}
printf(“\n”);
}


我在实际程序中向这个结构传递其他东西,我没有任何问题来访问int和char的信息。我唯一有问题的是2d数组。还有一件事,我不能用maloc来做这个

将while更改为if,以便我的for循环影响网格->框[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]);    
      }
    }
  }
}
void readInitGrid(结构网格*Grid){
字符c;
for(无符号整数i=0;i<20;i++){
对于(无符号整数j=0;j<40+1;j++){
如果((c=getchar())!=EOF){
网格->框[i][j]=c;
printf(“%c”,网格->框[i][j]);
}
}
}
}

修复了谢谢@xingOk的问题。抱歉,这是我第一次使用stackoverflow。