2

私は、ホストオブジェクトを構築するコードの一部、より具体的には、h_addr_list配列にデータを取り込むその作業の一部を理解しようとしていました。

配列に割り当てられた値がにキャストされたという事実に混乱しました。char*この配列は、私が読んだ限り、文字列とは何の関係もないためです。

h_addr_list配列が実際には。として入力されていることに気づきましたchar**

この事実に注意を向けているのは、beejのネットワークプログラミングガイドのセクション9.7だけですが、なぜそのように入力されているのかについての説明はありません。

/ (またはもう少し有益なもの)h_addr_listとして入力されchar**た理由はありますか?void*void**

4

1 に答える 1

2

char *必ずしもC文字列を参照する必要はありませんが、おそらくネットワークから到着するため、バイト単位でアドレス指定する必要がある既知の長さのメモリのチャンクも参照する必要があります。

int8_tのようなタイプuint8_tがC99に追加される前char *は、連続したバイト配列を参照するための唯一の実用的な方法でした。実際、タイプstruct hostentを形式化したC89よりも前のvoidものです。void **今日書かれた場合、フィールドはとして、またはおそらくとして宣言されますuint8_t **

于 2012-11-22T13:46:03.860 に答える