gpt4 book ai didi

使用二维动态分配字符串创建动态分配结构

转载 作者:行者123 更新时间:2023-11-30 16:51:02 25 4
gpt4 key购买 nike

我正在尝试扫描字母网格。 cases 是字母网格的数量,rc 是每个网格的行数和列数。我想我可以创建一个内部包含二维数组的结构数组。我已经为此工作了几个小时,但它仍然给我带来问题:

  • 警告:

    • 警告 C4477(第 12 行)- “scanf_s”:格式字符串“%s”需要“char*”类型的参数,但可变参数 1 的类型为“int”
    • 警告 C4473(第 12 行)- ‘scanf_s’:没有为格式字符串传递足够的参数
  • 错误:

代码:

scanf_s("%d", &cases);
struct grid {
char **grid;
};
struct grid *grids = (struct grid*)malloc(cases * sizeof(struct grid));

for (i = 0; i < cases; i++) {
scanf_s("%d %d", &r, &c);
grids[i].grid = (char**)malloc(sizeof(char*) * r);
for (k = 0; k < r; k++) {
grids[i].grid[k] = (char*)malloc(sizeof(char) * (c+1));
scanf_s("%s", grids[i].grid[k], (c+1));
}
}

最佳答案

我必须稍微调整一下问题中的代码,还要添加一些缺失的部分(顺便说一句,也应该提供这些部分),以获得可编译的(使用VStudio2010)片段。

main00.c:

#include <stdio.h>
#include <stdlib.h>


struct grid {
char **grid;
};


int main() {
int cases, r, c, k, i;
struct grid *grids;

scanf_s("%d", &cases);
grids = (struct grid*)malloc(cases * sizeof(struct grid));

for (i = 0; i < cases; i++) {
scanf_s("%d %d", &r, &c);
grids[i].grid = (char**)malloc(sizeof(char*) * r);
for (k = 0; k < r; k++) {
grids[i].grid[k] = (char*)malloc(sizeof(char) * (c + 1));
scanf_s("%s", grids[i].grid[k], (c + 1));
}
}
return 0;
}

注释:

  • 您将代码编译为C++(正如@alk 注意到的那样),这就是让您完全偏离方向的原因。为了解决这个问题:
    • 将文件扩展名设置为 .c(并且您可以在编译方面保留 VStudio 默认值;这样它将使用基于适当编译器的源文件来编译每个源文件在其扩展名上)
    • 显式将源文件编译为C。您可以从VStudio 项目属性 -> C/C++ -> 高级 -> 编译为 进行设置,然后选择编译为 C 代码。欲了解更多信息,请访问[MS.Docs]: /Tc, /Tp, /TC, /TP (Specify Source File Type) 。就我个人而言,我认为前一种选择更直接
  • 将变量声明移至任何语句之前(我认为这可能是设置C++编译器的候选者)。这是对较旧的C标准的限制(我怀疑它仍然存在),但是(VStudio 2010)C编译器仍然强制执行它(在至少默认情况下)

关于使用二维动态分配字符串创建动态分配结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41918914/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com