4

我有一个包含字符串的结构。像这样的东西:

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

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

Chunk var;

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

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

它真的有一些问题吗?

4

3 回答 3

8

你有理由怀疑这一点。fwrite您应该只使用andfreadstringis not流式传输 POD 类型POD

于 2011-07-21T20:53:29.613 回答
2

您不应该这样做,因为不同的实现使用不同的std::string.

一般来说,你应该只序列化整数类型、布尔类型、二进制数据(如果你可以称之为序列化)。如果您正在考虑在平台之间共享序列化数据,请确保使用一种字节序。

注意浮点数、双精度数和指针。他们会变得非常讨厌。

您也必须小心 C/C++ 结构,因为它们可能包含不可预测的填充量。

于 2011-07-21T20:55:34.337 回答
0

您应该序列化数据。

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

当涉及到更复杂的对象时,您可能会对Google Protocol Buffers 和/或 Thrift 之类的东西感兴趣。

于 2011-11-12T21:59:46.033 回答