c - 如何将二进制文件读入C中的结构

标签 c struct binaryfiles

我有一个名为 的结构产品 我试图从二进制文件中读取以填充此函数:

void reading(FILE *fp){

  Product *obuff = malloc(sizeof(Product));
  fread(obuff->code, sizeof(obuff->code), 1, fp);
  fread(obuff->name, sizeof(obuff->name), 1, fp);
  fread(obuff->quantity, sizeof(obuff->quantity), 1, fp);
  fread(obuff->price, sizeof(obuff->price), 1, fp);   

  printf("%s %s %d %.2f\n", obuff.code, obuff.name, obuff.quantity, obuff.price);
}

当我尝试编译时,我收到错误消息,说由于错误的数据类型而无法传递参数。有没有办法从二进制文件中读取结构,或者我只是在这里做错了什么?

结构:
#pragma pack(2)
struct product {
   char code[15];
   char name[50];
   short int quantity;
   double price;
};
#pragma pack()

typedef struct product Product;

最佳答案

您必须传递指针才能拥有 fread()读取数据。

void reading(FILE *fp){

  Product *obuff = malloc(sizeof(Product));
  fread(&obuff->code, sizeof(obuff->code), 1, fp);
  fread(&obuff->name, sizeof(obuff->name), 1, fp);
  fread(&obuff->quantity, sizeof(obuff->quantity), 1, fp);
  fread(&obuff->price, sizeof(obuff->price), 1, fp);

  printf("%s %s %d %.2f\n", obuff->code, obuff->name, obuff->quantity, obuff->price);
  free(obuff); /* free whatever you allocated after finished using them */
}

关于c - 如何将二进制文件读入C中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36002149/

相关文章:

c - 为什么要在函数 strtod() 中使用 (char **endptr) 而不是 (char ch) 或 (char *chptr)

c - C 中返回值类型不匹配

c - 如何在c中检查二进制文件中变量的数据类型

c - 如何将二进制整数写入二进制文件 | C

c++ - 将字符串文字分配给指向 const char 的指针

c - 用 C 解决此问题的时间限制

c - extern 关键字对 C 函数的影响

c - 长时间阅读后出现段错误

swift - 实现符合 Hashable 协议(protocol)的通用结构。错误 : Refernce to generic type 'strA' requires arguments in <. ..> 错误

macos - 3 个二进制文件的差异