假设我有一个看起来像
的结构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));
只写最后一个字段的最佳方法是什么?我想到了几个选项,但是每个选项看起来都不清楚,如果代码的其他部分发生变化,可能会破坏。
out_file.write((char*) &rec.print_this, sizeof(struct REC) - sizeof(char) - sizeof(int));
out_file.write((char*) &rec.print_this, sizeof(long) + sizeof(char));
out_file.write((char*) &rec + sizeof(char) + sizeof(int), sizeof(struct REC) - sizeof(char) - sizeof(int));
out_file.write((char*) &rec + sizeof(char) + sizeof(int), sizeof(long) + sizeof(char));
我想知道是否有更好的方法,特别是引用字段名称而不是类型的东西。 注意:在我的情况下,我将针对一些不同的结构执行此操作,所有这些结构都具有我想忽略的相同的几个字段,但是具有不同的字段。
答案 0 :(得分:1)
您可以使用offsetof
宏。
out_file.write(((char*)&rec) + offsetof(REC, print_this),
sizeof(struct REC) - offsetof(REC, print_this));