c - 用用户输入填充 *char[]

标签 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[]。

最佳答案

But when I run my code I get a segmentation fault.

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

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

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

关于c - 用用户输入填充 *char[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40494236/

相关文章:

C 忽略一些行,然后打印其余行

无法理解静态变量的行为

mysql - mysql查询where条件比较char字段与int 0的一些现象

Char x[50] 和 Char x[100] 输出

c - 使用指针点更改结构字段时出现指针错误

c++ - 使用 float 和 double 进行非常小的数字的数学运算

c - 为什么函数指针不命名它们的参数?

c++ - 读取存储在 double 中的 8 字节字段的 4 个字节

c - 读取C上的空间