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

Ver*_*era 4 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);

它真的有些问题吗?

Dav*_*nan 8

你有理由怀疑这一点.您应该只使用fwritefreadstring不是POD类型POD.

  • 除此之外,指针是POD,但通常不能很好地序列化. (4认同)
  • 而且你仍然需要警惕POD类型的对齐问题.对于`struct s {uint8_t c; uint64_t d};``sizeof(struct s)`可能不是9. (3认同)