gets や scanf の代替として用いる場合
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/05/02 06:53 UTC 版)
「fgets」の記事における「gets や scanf の代替として用いる場合」の解説
fgets は本来ファイルから文字列を取り出すことを目的とした関数であるが、最大文字列数を引数に指定する事ができるためバッファオーバーランが発生しにくく、また入力された文字数が最大文字数を超えた場合でも末尾に終端記号が付与されることが保証されている等、標準Cライブラリの中ではかなりセキュアな構造となっているといえる。 これに対し、標準入力用に用意されている関数の中で fgets と同様の機能を実現するものとしてgetsやscanfがあるが、getsは最大文字数を指定できないためバッファオーバーランが防ぐ手段が存在せず、scanfは文字幅指定できるが省略可能であるため開発者のミスで書き忘れる危険性がある等、安全性に問題点を持つものが多い。 このため fgets を標準入力用の関数として gets や scanf の代替として用いることが推奨されている。ただし、fgets を標準入力関数の代替として用いる場合は下記に宣べるような点に注意しなければならない。
※この「gets や scanf の代替として用いる場合」の解説は、「fgets」の解説の一部です。
「gets や scanf の代替として用いる場合」を含む「fgets」の記事については、「fgets」の概要を参照ください。
- gets や scanf の代替として用いる場合のページへのリンク