-9

(int)18 などの文字列の長さを手動で入力し、入力に 18 の長さの文字列の同じデータを与えると、計算時に strlen が (int)strlen(variable[1]) と異なる理由を理解しようとしています。 strlen 関数の結果は 18 であるため、2 つの結果は同じになると思いますが、何らかの理由で strlen が ョœ やその他のランダムな文字などのジャンク データを捨てています。これを修正するには (int)strlen(variable[1])+1 が機能しますが、両方の関数が int 値 18 になると、異なる結果が生じる方法がわかりません。

編集:私の質問を単純化するために、どのように

iResult = send( ConnectSocket, argv[2], (int)strlen(argv[2]), 0 );

異なる

iResult = send( ConnectSocket, argv[2], (int)5, 0 );

argv[2] が "12345" の場合は? 私は同じ結果を期待しますが、私は間違っていて、その方法/理由を知りたいです。

EDIT2:偶然に再コンパイルせずにプログラムをテストするような愚かなことをしたに違いないことを気にしないでください。今ではすべてが期待どおりに機能しているためです...

4

1 に答える 1

5

文字列の最後にゼロがない場合、ゼロを探しているものはすべて続行されます。strlen() やその他の関数が文字列の終わりを知る唯一の方法は、末尾にゼロがあるためです。したがって、たとえば、使用printf("%s", somestring);somestringていて末尾のゼロがない場合、printf は続行し、文字列の後にあるものは何でも印刷します。これは、「印刷できない」文字や「外国の」文字である可能性があります。

于 2012-12-23T23:24:07.160 に答える