-1

文字列を定義しました:

char ch[300];

文字列の長さを取得するとき

strlen(ch);

長さは常に に等しくなり323ます。なぜ私はこのマジックナンバーを持っているのですか?

0x00関数 strlen が最初のバイトを探して配列の外に出るために発生しますか?

strlen を配列の外に出しても安全ですか?

strlen 関数を使用したい場合は、最後のバイトを に設定する必要があり ch[300]=0ますか?

4

2 に答える 2

3

strlen検索の最初の出現0x00。これが見つからない場合は、カウントを続けます。これは非常に危険です。範囲外の値を取得しようとすると、プログラムがクラッシュしたり、予期しない結果が発生したりする可能性があります。文字列がnullで終了していることを常に確認してください。

于 2012-09-12T09:54:13.060 に答える
3

関数 strlen が最初の 0x00 バイトを探して配列の外に出たために発生しますか?

はい

strlen を配列の外に出しても安全ですか?

いいえ

strlen 関数を使用したい場合、最後のバイトを ch[300]=0 に設定する必要があるということですか?

ほとんど-ch[299] = 0;さらに、初期化されていないバッファではなく、初期化されたバッファで呼び出す必要があります。

于 2012-09-12T09:55:00.393 に答える