このコード行の使用に関する説明を読んだことは覚えていますが、この 1 週間でソケットに関する本をたくさん読んだので、もう見つけることができません。
私は本の中で覚えています。彼らはコードを =\0 を使って書き、それを 1 にしたほうがよいと言っていました。
検索してみましたが、運がありませんでした。これは、使用されている場所で読んでいるコードの一部です
nread = recv(newsock, buffer, 25, 0);
buffer[nread] = '\0';
受信したバッファをNUL で終了する C-stringに変換しstrlen, strcpy, etc.
ます。これを使用できます-1
. その場合、メモリの破損が発生します。
これは、文字配列内のコンテンツの終わりを示す C/C++ ヌル ターミネータです。
文字列がそのバイトで終了することを意味します。この場合は最後です。
\0 はヌル文字です。
したがって、「This is my message.aG¤(Ag4h98av¤"G#¤".
ネットワークを扱う場合、通常は整数などのデータを送信する必要があります。最も一般的な方法は、平文ではなくバイナリで送信することです。たとえば、整数は「$%\0n」のようになります。4 バイトですが、3 番目のバイトは \0 です。したがって、\0 が存在する可能性があることを考慮する必要があります。したがって、データのバイナリ表現を文字列として保存するのではなく、バッファ/文字列ストリームとして保存する必要があります。
もちろん、バイナリ表現を出力したくないかもしれません。しかし、あなたはそれを心に留めておく必要があります。たぶん、あなたはそれを印刷したいと思うでしょう。