0

文字列をバイナリ ファイルに書き込んでいると推測するために、ReadStr と WriteStr を使用するコードがいくつかあります。

ドキュメントの WriteStr の説明では、生データを AnsiString の形でオブジェクトのストリームに書き込むと記載されていますが、これは理にかなっています。しかし、その後 ReadStr は、文字を読み取ると言います。では、それらは互いに反対ではありませんか?

私が持っているとしましょう、

pName: String[80];

私はそれに WriteStr を使用していますが、実際には何を書きますか? WriteStr は AnsiString を想定しているので、pName をそのようにキャストしますか? その場合、AnsiString ポインタが長さフィールドではなく最初の要素を指しているため、「長さ」フィールドをストリームに書き込みませんか? 私も探していましたが、最近は String == AnsiString のようですが、長さフィールドに関する私の質問はまだ同じです。

長さフィールドをファイルに書き込まないとしても、データの最後に NULL を書き込むのでしょうか? そのため、'\0' を検索して文字列の末尾を見つけることはできますか? ReadStr は NULL 文字まで読み取りますか?

よろしくお願いします:)

4

1 に答える 1

3

Delphi の Unicode 以前のバージョンで、値の書き込みWriteStrReadStr読み取りを行いAnsiStringます。書き込みコードは、長さを書き込み、次に文字列の内容を書き込みます。読み取りコードは、長さを読み取り、文字列を割り当ててから、内容を入力します。

ReadStrこれには、結果を80 文字の短い文字列に割り当てるときに、切り捨てが発生する可能性があります。

于 2013-06-19T06:30:57.090 に答える