3
#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 字符数组,但我的循环表现得很奇怪。这是我第一次尝试使用双指针来创建二维数组,因此也非常感谢该领域的任何帮助。它似乎是 0,0 和 0,1 然后要求扫描,然后跳到 i=1 j =0,依此类推。我在这里错过了一些基本的东西吗?

4

2 回答 2

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,所以它是多余的。

于 2013-10-15T18:06:38.733 回答
4

除了malloc问题,

您的循环行为“奇怪”,因为前一个尾随换行符scanf被视为新输入。

所以使用:

int c;
while((c=getchar())!='\n' && c!=EOF) ; //to remove newlines from previous scanf

scanf

于 2013-10-15T18:14:14.663 回答