【发布时间】:2015-12-30 19:48:42
【问题描述】:
我正在尝试使用 sscanf 将一行格式化文本复制到一个结构数组中。
现在这很完美,但我最终收到了这个警告:
格式“%s”需要“char *”类型的参数,但参数 3 的类型为“unsigned char **”。
这些是我想使用的 typedef:
typedef unsigned char* command_t;
typedef struct {
command_t command;
int p1;
int p2;
} parameters_t;
这是代码的相关部分:
paramters_t parameters[100];
while(fgets(line, sizeof(line), fp) != 0) {
sscanf(line, "%s %d %d",¶meters[i].command,¶meters[i].p1,¶meters[i].p2);
i++;
}
那么 ¶meters[i].command 怎么是双指针呢? 非常感谢任何解释!
【问题讨论】:
-
你可以检查
sscanf的返回值 -
sscanf为每行返回正确的字数,但你是对的,我仍然应该检查。但是,为什么 ¶meters[i].command 是 'unsigned char **' 类型的。第二个指针是从哪里来的? -
如果我使用
parameters[i].command没有 & 程序在编译后的 sscanf 期间崩溃。 -
参数 3 不是
%s,而是%d。你发的问题对吗?你说它工作得很好,但“最终”是这样,但它肯定是编译器警告吗?那么为什么要运行代码呢? -
是的,我确实发布了正确的问题。对于参数 2,我得到了相同的警告,实际上也是
%d。所以我必须为数组中的每个指针分配内存?我该如何正确地做到这一点?