文字列を定義しました:
char ch[300];
文字列の長さを取得するとき
strlen(ch);
長さは常に に等しくなり323
ます。なぜ私はこのマジックナンバーを持っているのですか?
0x00
関数 strlen が最初のバイトを探して配列の外に出るために発生しますか?
strlen を配列の外に出しても安全ですか?
strlen 関数を使用したい場合は、最後のバイトを に設定する必要があり ch[300]=0
ますか?
strlen検索の最初の出現0x00
。これが見つからない場合は、カウントを続けます。これは非常に危険です。範囲外の値を取得しようとすると、プログラムがクラッシュしたり、予期しない結果が発生したりする可能性があります。文字列がnullで終了していることを常に確認してください。
関数 strlen が最初の 0x00 バイトを探して配列の外に出たために発生しますか?
はい
strlen を配列の外に出しても安全ですか?
いいえ
strlen 関数を使用したい場合、最後のバイトを ch[300]=0 に設定する必要があるということですか?
ほとんど-ch[299] = 0;
さらに、初期化されていないバッファではなく、初期化されたバッファで呼び出す必要があります。