我正在尝试实现以下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 []。
答案 0 :(得分:1)
但是当我运行我的代码时,我遇到了分段错误。
这是因为数组map
未初始化(undefined behaviour)。
对malloc()
数组中的每个指针调用calloc()
或map
进行初始化。或者只使用也定义行的VLA:char map[row][col];
。
如果您决定使用VLA,请注意它们可能不适用于大型row
和col
,因为它们是在自动存储(也称为“堆栈”)上分配的,并且只是可选功能自C11。