使用用户输入填充* char []

时间:2016-11-08 18:43:17

标签: c pointers char segmentation-fault scanf

我正在尝试实现以下c代码:

int row, col;
    scanf("%d %d", &row, &col); 



    char *map[col];

    for(int i = 0; i < row; i ++){
        scanf("%s", map[i]);
    }

用户在同一行输入两个数字以声明数组的行和列的大小。然后,用户将继续输入将被存储的每一行。示例输入如下所示:

10 12
oooooooooooo
oooooo.o.ooo
o.o.ooooooo.
o.o.o..o...o
o.ooo.oo.o.o
o...oooo.o.o
.......o.o.o
o.o.o.oo.o.o
ooooooooo..o
o...oooooo.o

但是当我运行代码时,我遇到了分段错误。有什么建议吗?

我无法使用char map [] [],因为程序中的其他函数使用* char []。

1 个答案:

答案 0 :(得分:1)

  

但是当我运行我的代码时,我遇到了分段错误。

这是因为数组map未初始化(undefined behaviour)。

malloc()数组中的每个指针调用calloc()map进行初始化。或者只使用也定义行的VLA:char map[row][col];

如果您决定使用VLA,请注意它们可能不适用于大型rowcol,因为它们是在自动存储(也称为“堆栈”)上分配的,并且只是可选功能自C11。