[解決済み】なぜ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はこれを使用するコードに対して警告を発します。
関連
-
[解決済み】C言語で多重定義を防ぐには?
-
[解決済み】コンパイラの警告 - 真理値として使用される代入の周囲に括弧を付けることを推奨する
-
[解決済み] char pointers: 'char*' から 'char' への無効な変換?
-
[解決済み】宣言指定子で2つ以上のデータ型がある場合のエラー【非公開
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] Project Eulerとの速度比較。CとPythonとErlangとHaskellの比較
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】変数の警告が設定されているが使用されていない
-
[解決済み】strcmpが機能しない
-
[解決済み】"Expected expression before ' { ' token"(トークンの前に期待される式)。
-
[解決済み】MB/sとMiB/sを計算する方法は?
-
[解決済み】 「配列のイニシャライザーはイニシャライザーリストまたは文字列リテラルでなければなりません」と表示されるのですが?
-
[解決済み】sizeof float (3.0) vs (3.0f)
-
[解決済み] エラー:整数が期待されるところで集約値が使用された
-
[解決済み】C言語のフォーマット文字列でデータ引数が使用されない [重複]。
-
[解決済み】.axfファイルとは何ですか?
-
[解決済み】シンプルなC言語のscanfが機能しない?重複