只写一个结构

时间:2017-08-02 20:18:46

标签: c++ struct

假设我有一个看起来像

的结构
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));
  5. 我想知道是否有更好的方法,特别是引用字段名称而不是类型的东西。 注意:在我的情况下,我将针对一些不同的结构执行此操作,所有这些结构都具有我想忽略的相同的几个字段,但是具有不同的字段。

1 个答案:

答案 0 :(得分:1)

您可以使用offsetof宏。

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