1

c 構造体として定義された一連のメッセージを持つサーバー用に、Delphi で tcp クライアントを作成しています。以下は、メッセージの 1 つの変換例です。

struct {
    int32     Reserved;
    cstring   Name;
    int32     flags;
}

msg1 = record
  Reserved : integer;
  Name : cstring???;
  flags : integer;
end

タイプをグーグルで検索すると、cstring は、この状況で渡すと予想される char の標準配列とは異なることがわかりますが、cstring の内部表現を見つけることができないようです。

サーバーに渡すためにレコードで cstring をどのように表現しますか?

4

2 に答える 2

0

仕様では、実際のCString型の代わりに、charの配列とそれに続くnullターミネータを意味するcstringという用語を使用しているようです。どうやら、仕様の用語のただの苛立たしい混乱。

于 2010-03-29T15:35:46.250 に答える
0

本当の違いはありません。「C 文字列」は、null で終わる文字の配列へのポインタであり、それ以上のものではありません。C には、Delphi にあるような実際の「文字列型」はありません。Delphi は PChar 型で表現します。(D2009 以降では、PAnsiChar と PWideChar の違いを知っておく必要があることに注意してください。)

ただし、ドキュメンテーションで配列へのポインターではなく、配列自体を C 文字列と呼んでいる場合は、注意が必要です。これは潜在的な落とし穴です。レコードで配列を使用する必要があり、配列の長さを正確に把握する必要があります。

于 2010-03-29T15:53:42.653 に答える