我正在尝试扫描字母网格。cases
是字母网格的数量,r
, c
是每个网格的行数和列数。我想我可以创建一个内部包含二维数组的结构数组。我已经为此工作了几个小时,但它仍然给我带来问题:
-
警告:
-
警告 C4477(12号线)-‘scanf_s’:格式字符串‘%s’需要‘char*’类型的参数,但可变参数 1 的类型为‘int’
-
警告 C4473(12号线)-‘scanf_s’:没有为格式字符串传递足够的参数
-
Errors:
代码:
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) piece.
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;
}
Notes:
- You were compiling the code as C++ (as @alk noticed), and this is what completely threw you off course. In order to fix that either:
- 将文件扩展名设置为.c(你可以离开VStudio编译时默认;这样它将根据其扩展名使用适当的编译器来编译每个源文件)
-
明确地将源文件编译为C。您可以从VStudio 项目属性 -> C/C++ -> 高级 -> 编译为,并选择编译为 C 代码。欲了解更多信息,请访问[MS.Docs]:/Tc、/Tp、/TC、/TP(指定源文件类型) https://learn.microsoft.com/en-us/previous-versions/visualstudio/visual-studio-2010/032xwy55(v=vs.100)。就我个人而言,我认为前一种选择更直接
- 移动变量声明before任何陈述(我认为这可能是设置C++编译器)。这是对老年人的限制C标准(我怀疑它仍然存在),但是(VStudio 2010) C编译器仍然强制执行它(至少默认情况下)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)