【问题标题】:Filling a *char[] with user input用用户输入填充 *char[]
【发布时间】:2017-03-22 12:16:51
【问题描述】:

我正在尝试实现以下 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[]。

【问题讨论】:

标签: c pointers char segmentation-fault scanf


【解决方案1】:

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

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

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

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

【讨论】:

  • 你能给我代码让它与我的程序一起工作吗?
  • 提供代码的东西不多。 VLA 的使用很简单,您应该能够通过谷歌搜索(或阅读您的教科书)找到大量关于如何使用 malloc() 的示例。
猜你喜欢
  • 1970-01-01
  • 2021-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-02-05
  • 2013-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多