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

あなたがこれを疑うのは当然です。fwriteandfreadおよびstringis notを使用して POD タイプのみをストリーミングする必要がありPODます。

于 2011-07-21T20:53:29.613 に答える
2

実装が異なれば、の構造も異なるため、このようにしないでくださいstd::string

一般に、整数型、ブール型、バイナリデータ(シリアル化と呼べる場合)のみをシリアル化する必要があります。プラットフォーム間でシリアル化されたデータを共有することを考えている場合は、必ず1つのエンディアンを使用してください。

フロート、ダブル、ポインターに気をつけてください。彼らは非常に厄介になる可能性があります。

予測できない量のパディングが含まれている可能性があるため、C /C++構造体にも注意する必要があります。

于 2011-07-21T20:55:34.337 に答える
0

データをシリアル化する必要があります。

これを手動で行うこともできますstd::string

より複雑なオブジェクトについて言えば、Google Protocol Buffers や Thrift などに興味があるかもしれません。

于 2011-11-12T21:59:46.033 に答える