gpt4 book ai didi

c - sscanf 到结构数组

转载 作者:太空宇宙 更新时间:2023-11-03 23:45:31 27 4
gpt4 key购买 nike

我正在尝试使用 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",&parameters[i].command,&parameters[i].p1,&parameters[i].p2);
i++;
}

那么 &parameters[i].command 为什么是双指针呢?非常感谢任何解释!

最佳答案

我发现该程序有几个错误——一个是句法错误,一个是语义错误。

可以使用以下方法修复语法错误:

sscanf(line, "%s %d %d", parameters[i].command, &parameters[i].p1, &parameters[i].p2);
// ^^ Remove the &

但是,更大的问题是在将数据读入之前您没有为 parameters[i].command 分配任何内存。

有几种方法可以解决这个问题。

  1. 使命令成为一个固定大小的数组。
  2. 使用 malloc 为命令分配内存。

如果您打算对数组的大小使用一些硬编码数字,我建议使用第一种方法。然后,您不必担心内存分配和释放。

改变

typedef unsigned char* command_t;

typedef unsigned char command_t[100]; // Make it large enough for your need.

确保防止读入命令它可以容纳的更多字符。

sscanf(line, "%99s %d %d", parameters[i].command, &parameters[i].p1, &parameters[i].p2);
// ^^ Specify the maximum number of characters to read

关于c - sscanf 到结构数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34536228/

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