因此,我们正在学习如何使用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数组时,我将它们设置为“注意”。我不知道他们中有什么。它告诉我他们在记忆中的位置,但我不知道他们输入了什么,所以我甚至无法查看最新情况。任何帮助将不胜感激。
答案 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