0

extern 変数をソース バッファーとして扱い、それを引数として strcpy() またはバッファー オーバーフローを引き起こす可能性のあるその他の関数に渡すことは、安全でなく、引数を渡すのと同じくらいバッファー オーバーフローを引き起こす可能性があるかどうか疑問に思っていました。バッファのサイズよりも大きい制限が指定された fgets() 関数からのものです。

これらの extern 変数には特別な注意を払うべきですか、それとも他の変数と同じように扱うべきですか?

4

3 に答える 3

3

extern変数のリンケージを定義するだけで、他の方法で変数を変更することはありません。

安全かどうか?

他の変数と同じように安全/安全でexternはなく、宣言されている変数には関係がありません。
使用strcpy自体は安全ではなく、バッファ オーバーフローを引き起こす可能性があります。
C++ では、より良いオプションを使用することですstd::string

于 2012-10-18T14:20:52.277 に答える
0

変数の使用を完全に制御すると仮定すると、他の「グローバル」またはローカル変数と同じくらい「安全」になります。変数の使用とその作成方法を制御できず (たとえば、リンク先のモジュールを他の人が提供している場合)、そのコーディング プラクティスを知らない場合は、変数をより多くの方法で扱うことがおそらく賢明でしょう。通常の懐疑論よりも。

ただし、一般的には、変数の使用を完全に制御する場合でも、当然のことながら、ターゲット バッファー長を受け入れる "安全な" strcpy 関数のいずれかを使用することをお勧めします。

于 2012-10-18T14:22:43.953 に答える
0

に引数を渡すことstrcpyは安全ではなく、バッファ オーバーフローが発生する可能性があります。externこの事実とは関係ありません。賢者はstd::string(または Unicode をサポートするバリアント) を使用しますが、それらのいずれchar*strcpyまたはいずれかを使用することはありません。

于 2012-10-18T14:22:56.567 に答える