获取用户输入并将其动态分配给二维数组C.

时间:2015-09-17 02:48:56

标签: c arrays dynamic malloc

因此,我们正在学习如何使用malloc等动态数组,而且我在尝试学习如何使用这个东西时基本上是疯了。从表面上看,我尝试做的是让用户输入一个填字游戏并让程序解决它,但我甚至无法完成成功存储拼图的第一步。

继承我的代码:

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

int main (){

    char *userInput = malloc (sizeof(char)*4);
    // allocates columns with a length of 4?
    char **grid = malloc(sizeof(char)*4);
    int i, j;

    for(i=0; i<4; i++){
        scanf("%s", userInput);
        for (j=0; j<4; j++){
            // allocates rows with a length of 4?
            grid[i] = (char*) malloc (sizeof(char)*4);
            grid[i][j] = userInput[j];
        }
    }

    printf("%c", grid[0][2]);

    return 0;
}

现在它的硬编码,但是它会询问网格的大小,但它的作用是采用4x4填字游戏并将每个字母放入字符数组中,然后在其上找到难题。我现在尝试做的就是接受用户输入并将其放入网格中。关于我尝试使用我的代码的示例是

Input:
abcd
efgh
ijkl
mnop

Output:
c

但最终被吐出来的是垃圾。

我使用的是代码块,但是当我调试malloc数组时,我将它们设置为“注意”。我不知道他们中有什么。它告诉我他们在记忆中的位置,但我不知道他们输入了什么,所以我甚至无法查看最新情况。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

将数组的分配与数组的填充分开是一个好主意。试图同时做两件事都会让人感到困惑。要分配数组,需要分配4个字符指针,然后每个指针需要指向4个字节的内存。

int rows = 4;
int cols = 4;

char **grid = malloc( rows * sizeof(char *) );  // 4 char pointers, one for each row
for ( int i = 0; i < rows; i++ )
    grid[i] = malloc( cols );                   // each row is 4 characters