9

C / C++ ソケット プログラミングと "read(socket, buffer, BUFSIZE)" メソッドを使用します。char と byte が同じものであることはわかっていますが、バイト配列に含まれる要素の数は重要ですか? バッファーは、ヌル文字までメッセージ全体を保持できる必要がありますか?

4

3 に答える 3

14

BUFSIZE は、バッファーのサイズ (バイト単位) と等しくなければなりません。read() は、バッファがいっぱいになると読み取りを停止します。次に例を示します。

#define MY_BUFFER_SIZE 1024

char mybuffer[MY_BUFFER_SIZE];
int nBytes = read(sck, mybuffer, MY_BUFFER_SIZE);
于 2008-09-27T06:33:07.157 に答える
6

いつものようsizeofに、機会があればご利用ください。組み込みの operator を使用してsizeof、変数のサイズを自分で指定するのではなく、コンパイラに計算を依頼します。これにより、実際の変数のサイズが想定と異なる場合にバグが発生するリスクが軽減されます。

だから、代わりに

#define BUFSIZE 1500
char buffer[BUFSIZE];
int n = read(sock, buffer, BUFSIZE);

あなたは本当に使うべきです

char buffer[1500];
int n = read(sock, buffer, sizeof buffer);

引数が型の名前でない限り、sizeof の引数を括弧で囲む必要がないことに注意してください。

于 2008-10-15T11:00:52.157 に答える
0

ソケットの実装では、メッセージ全体を確実に保持するのに十分な大きさのバッファは必要ありませんが、何をしているのかによっては便利かもしれません。

于 2008-09-27T07:48:57.503 に答える