1. ホーム
  2. c

[解決済み】なぜgets関数は危険で使ってはいけないのですか?

2022-03-31 20:20:44

質問

を使用したC言語のコードをコンパイルしようとすると、そのコードに含まれている gets() 関数を GCC で使用すると、次のような警告が表示されます。

(.text+0x34): 警告: `gets' 関数は危険なので使用しないでください。

これはスタック保護やセキュリティに関係することだと記憶していますが、正確な理由は不明です。

どうすればこの警告を消すことができるのか、また、なぜこのように gets() ?

もし gets() が危険だというのに、なぜそれを削除できないのか?

解決方法は?

を使用するために gets バッファを十分な大きさにするためには、読み込む文字数を正確に把握する必要があります。どのようなデータを読み込むのかを正確に知っていなければ、それは分かりません。

を使う代わりに gets を使用したい場合は fgets というシグネチャを持つ

char* fgets(char *string, int length, FILE * stream);

( fgets は、行全体を読み込むと '\n' という文字列を生成します(これには対処が必要です)。

gets は、1999年のISO C標準まで公式な言語の一部として残っていましたが、1999年の 2011年規格 . ほとんどのC実装はまだこれをサポートしていますが、少なくともgccはこれを使用するコードに対して警告を発します。