[英]Using fread/fwrite for STL string. Is it correct?
我有一個包含字符串的結構。 像這樣的東西:
struct Chunk { int a; string b; int c; };
所以,我想,我不能使用 fread 和 fwrite 函數從文件中寫入和讀取這個結構。 因為字符串可能會保留不同的 memory 容量。 但是這樣的代碼可以正常工作。
Chunk var;
fwrite(&var, sizeof(Chunk), 1, file);
fread(&var, sizeof(Chunk), 1, file);
它真的有一些問題嗎?
你有理由懷疑這一點。 您應該只 stream POD 類型與fwrite
和fread
和string
is not POD
。
您不應該這樣做,因為不同的實現使用不同的std::string
結構。
一般來說,你應該只序列化整數類型,boolean 類型,二進制數據(如果你可以稱之為序列化)。 如果您正在考慮在平台之間共享序列化數據,請確保使用一種字節序。
注意浮點數、雙精度數和指針。 他們會變得非常討厭。
您也必須小心 C/C++ 結構,因為它們可能包含不可預測的填充量。
您應該序列化數據。
您可能希望手動執行此操作 - 當涉及std::string
時,請查看:
當涉及到更復雜的對象時,您可能會對Google Protocol Buffers 和/或 Thrift 之類的東西感興趣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.