使用fread / fwrite作为STL字符串。这是对的吗?

时间:2011-07-21 20:52:19

标签: c++ string fwrite fread

我有一个包含字符串的结构。这样的事情:

struct Chunk { int a; string b; int c; };

所以,我想,我不能使用fread和fwrite函数从文件中编写和读取这个结构。因为字符串可能会保留不同的内存容 但是这样的代码可以正常工作。

Chunk var;

fwrite(&var, sizeof(Chunk), 1, file);

fread(&var, sizeof(Chunk), 1, file);

它确实存在一些问题吗?

3 个答案:

答案 0 :(得分:8)

你有理由怀疑这一点。您应该仅使用fwritefread流式传输POD类型,而string不是POD

答案 1 :(得分:2)

你不应该这样做,因为不同的实现使用std::string的不同结构。

通常,您应该只序列化整数类型,布尔类型,二进制数据(如果您可以将其称为序列化)。如果您考虑在平台之间共享序列化数据,请确保使用一个字节序。

注意花车,双打和指针。他们会变得非常讨厌。

你必须注意C / C ++结构,因为它们可能包含不可预测的填充量。

答案 2 :(得分:0)

您应该序列化数据。

您可能希望手动执行此操作 - 当std::string出现时,请查看:

当遇到更复杂的对象时,您可能会对things like Google Protocol Buffers and/or Thrift感兴趣。