只写结构体的某些字段

Only write some of the fields of a struct

本文关键字:字段 结构体      更新时间:2023-10-16

假设我有一个看起来像

struct REC { 
char dont_print;
int also_don't_print;
long print_this;
char also_print_this
};

如果我要写所有的字段,它看起来像

out_file.write((char*) &rec, sizeof(struct REC));

只写最后一个字段的最佳方法是什么?我想到了几个选项,但每个选项似乎都不清楚,如果代码的其他部分发生变化,它们可能会中断。

  1. out_file.write((char*) &rec.print_this, sizeof(struct REC) - sizeof(char) - sizeof(int));
  2. out_file.write((char*) &rec.print_this, sizeof(long) + sizeof(char));
  3. out_file.write((char*) &rec + sizeof(char) + sizeof(int), sizeof(struct REC) - sizeof(char) - sizeof(int));
  4. out_file.write((char*) &rec + sizeof(char) + sizeof(int), sizeof(long) + sizeof(char));

我想知道是否有更好的方法,尤其是引用字段名称而不是类型的东西。 注意:就我而言,我将为几个不同的结构执行此操作,所有这些结构都具有我想忽略的相同几个字段,但这些结构之后有不同的字段。

您可以使用offsetof宏。

out_file.write(((char*)&rec) + offsetof(REC, print_this),
sizeof(struct REC) - offsetof(REC, print_this));