我有一个包含字符串的结构。这样的事情:
struct Chunk {
int a;
string b;
int c;
};
所以,我想,我不能使用fread和fwrite函数从文件中编写和读取这个结构。因为字符串可能会保留不同的内存容 但是这样的代码可以正常工作。
Chunk var;
fwrite(&var, sizeof(Chunk), 1, file);
fread(&var, sizeof(Chunk), 1, file);
它确实存在一些问题吗?
答案 0 :(得分:8)
你有理由怀疑这一点。您应该仅使用fwrite
和fread
流式传输POD类型,而string
不是POD
。
答案 1 :(得分:2)
你不应该这样做,因为不同的实现使用std::string
的不同结构。
通常,您应该只序列化整数类型,布尔类型,二进制数据(如果您可以将其称为序列化)。如果您考虑在平台之间共享序列化数据,请确保使用一个字节序。
注意花车,双打和指针。他们会变得非常讨厌。
你必须注意C / C ++结构,因为它们可能包含不可预测的填充量。
答案 2 :(得分:0)
您应该序列化数据。
您可能希望手动执行此操作 - 当std::string
出现时,请查看:
当遇到更复杂的对象时,您可能会对things like Google Protocol Buffers and/or Thrift感兴趣。