基于用户输入在C中创建2D数组

时间:2016-08-14 13:31:27

标签: c arrays dynamic 2d

我正在尝试为依赖于用户输入的游戏创建动态2D数组。我目前有一个分配内存的功能:

void mallocGrid(int argc, char** argv) {
    int i; 
    char* height;
    char* width;

    int inputHeight = strtol(argv[3], &height, 10);
    int inputWidth = strtol(argv[4], &width, 10);

    char** gridArray = malloc(sizeof(char*) * inputHeight);
    for (i = 0; i < inputHeight; i++){
        gridArray[i] = malloc(sizeof(char) * inputWidth);
    }
}

我有另一个函数用'。'来弹出这个网格数组。字符。这是我现在拥有的:

void gridInit(int argc, char** argv) {
    char gridArray[MAX_COLUMN][MAX_ROW];
    int i, j;
    char* height;
    char* width;

    int inputHeight = strtol(argv[3], &height, 10);
    int inputWidth = strtol(argv[4], &width, 10);

    for(i=0; i < inputWidth; i++) {
        for(j=0; j < inputHeight; j++) {
            gridArray[i][j]= '.';
            printf("%c\n", gridArray[i][j]);
        }
        fputc('\n', stdout); 
    }
}

但是,当用户输入2的高度和3的宽度时,会出现以下情况:

.
.

.
.

.
.

但我期待得到:

..
..
..

这是动态创建可随着游戏进程而被覆盖的网格的正确方法吗?

2 个答案:

答案 0 :(得分:0)

没有2-D动态阵列的关系。它的输出......你想以什么方式得到你的输出是你的...从printf中删除\ n(&#34;%c \ n&#34;,gridArray [i] [j]);声明,您将获得您期望的输出。

答案 1 :(得分:0)

[评论太久了]

此处的gridArray的两个定义

void mallocGrid(int argc, char** argv) {
  ...

  char** gridArray = malloc(sizeof(char*) * inputHeight);

在这里

void gridInit(int argc, char** argv) {
  char gridArray[MAX_COLUMN][MAX_ROW];

  ...

是独立的。每个都定义自己的变量。没有任何共同点,但名称。甚至类型也不同。

当函数离开时,两个变量的定义都“消失”。

  

我正在尝试为依赖于用户输入的游戏创建动态2D数组。

你不在这里这样做:

  char gridArray[MAX_COLUMN][MAX_ROW];