【问题标题】:how to write default structure values multiple times using fwrite()如何使用 fwrite() 多次写入默认结构值
【发布时间】:2008-10-23 19:17:49
【问题描述】:

我想使用 fwrite 将默认结构 N 次写入文件。

typedef struct foo_s {

 uint32 A;
 uint32 B;
 char desc[100];

}foo_t;

void init_file(FILE *fp, int N)
{
   foo_t foo_struct = {0};
   foo_struct.A = -1;
   foo_struct.B =  1;

   fwrite(&foo_struct, sizeof(foo_struct), N, fp);    }

以上代码没有将foo_struct N次写入文件流fp。

相反,它将从 &foo_struct 开始的 N*sizeof(foo_struct) 个字节写入 fp。

谁能告诉我如何通过单个 fwrite 实现相同的功能?

【问题讨论】:

  • 只是指出您的代码将 -1 分配给(显然)无符号类型 (foo_struct.A = -1;)。可能不是正确的做法。

标签: c


【解决方案1】:

你不能只用一个 fwrite()。您必须使用循环:

int i;
for (i = 0; i < N; ++i)
    fwrite(&foo_struct, sizeof(foo_struct), 1, fp);

fwrite()的第三个参数是要写入的对象数,而不是单个对象的写入次数。

【讨论】:

    【解决方案2】:

    使用单次 fwrite 执行此操作的唯一方法是在 RAM 中复制 foo_struct N 次,然后对所有 RAM 执行单次 fwrite。

    我怀疑做一个 malloc、N 个副本,然后一个 fwrite 会比只做 N 个 fwrite 更快(这是我想这样做的唯一原因!),但如果你真的在乎,你应该试试看。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2012-01-25
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 2019-06-20
      相关资源
      最近更新 更多