#include <stdio.h>
#include <stdlib.h>
int main(){
int rows, col, i, j;
char **mazeArrP;
scanf("%d %d", &rows, &col);
mazeArrP = (char **) malloc(rows*sizeof(char));
for(i = 0; i<rows; i++){
printf("i = %d\n", i);
mazeArrP[i] = (char *) malloc(col*sizeof(char));
for(j = 0; j<col; j++){
printf("j = %d\n", j);
scanf("%c", &mazeArrP[i][j]);
}
}
return 0;
}
我使用打印来识别我当前在循环中的位置。我正在尝试创建一个简单的2D字符数组,但我的循环行为奇怪。这是我第一次尝试使用双指针创建一个2D数组,因此在该领域的任何帮助也非常受欢迎。它似乎是0,0然后是0,1然后要求扫描,然后跳到i = 1 j = 0,依此类推。我错过了一些基本的东西吗?
答案 0 :(得分:7)
mazeArrP = (char **) malloc(rows*sizeof(char));
错了。改为
mazeArrP = malloc(rows * sizeof(*mazeArrP));
此外,该行
mazeArrP[i] = (char *) malloc(col*sizeof(char));
可以写成
mazeArrP[i] = malloc(col);
sizeof(char)
为1,因此多余。
答案 1 :(得分:4)
除了malloc
问题,
您的循环行为“奇怪”因为前一个scanf
的尾随换行符被视为新输入。
所以使用:
int c;
while((c=getchar())!='\n' && c!=EOF) ; //to remove newlines from previous scanf
在scanf
之后