【问题标题】:Taking user input and dynamically allocating it to a two dimensional array C获取用户输入并将其动态分配给二维数组 C
【发布时间】:2015-12-13 19:44:03
【问题描述】:

所以我们正在学习如何将动态数组与 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 数组并将它们设置为“监视”时,我不知道其中有什么。它向我显示了它们在内存中的位置,但我不知道它们中输入了什么,所以我什至无法检查发生了什么。任何帮助将不胜感激。

【问题讨论】:

标签: c arrays dynamic malloc


【解决方案1】:

最好将数组的分配与数组的填充分开。试图同时做这两件事会让人感到困惑。分配数组,需要分配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

【讨论】:

    猜你喜欢
    • 2018-02-28
    • 2021-02-03
    • 1970-01-01
    • 2016-02-16
    • 2015-02-10
    • 2017-08-09
    • 2015-09-17
    • 2013-11-14
    • 1970-01-01
    相关资源
    最近更新 更多