我正在尝试实现以下 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[]。
最佳答案
But when I run my code I get a segmentation fault.
这是因为数组 map
未初始化(即 undefined behaviour )。
通过为 map
数组中的每个指针调用 malloc()
或 calloc()
来初始化它。或者只使用也定义行的 VLA:char map[row][col];
。
如果您决定使用 VLA,请注意它们可能不适用于大尺寸的 row
和 col
,因为它们是在自动存储(也称为“堆栈”)上分配的) 并且仅是自 C11 以来的可选功能。
关于c - 用用户输入填充 *char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40494236/