簡體   English   中英

對 STL 字符串使用 fread/fwrite。 這是對的嗎?

[英]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 類型與fwritefreadstring is not POD

您不應該這樣做,因為不同的實現使用不同的std::string結構。

一般來說,你應該只序列化整數類型,boolean 類型,二進制數據(如果你可以稱之為序列化)。 如果您正在考慮在平台之間共享序列化數據,請確保使用一種字節序。

注意浮點數、雙精度數和指針。 他們會變得非常討厭。

您也必須小心 C/C++ 結構,因為它們可能包含不可預測的填充量。

您應該序列化數據。

您可能希望手動執行此操作 - 當涉及std::string時,請查看:

當涉及到更復雜的對象時,您可能會對Google Protocol Buffers 和/或 Thrift 之類的東西感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM