使用指针

时间:2017-10-14 20:47:43

标签: c arrays pointers

我需要从stdin中获取一个二维数组(Grid),对字符进行一些操作并打印一个包含更改的新网格。

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

这是程序的简化代码块。

#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

我在实际程序中将其他内容传递给此结构,并且我没有任何issu来访问int和char的信息。我唯一遇到的问题是2d阵列。另一件事,我不能使用maloc。

1 个答案:

答案 0 :(得分:1)

将while更改为if,以便我的for循环影响grid-&gt; box [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]);    
      }
    }
  }
}