先頭へ戻る

gets | Programming Place Plus C言語編 標準ライブラリのリファレンス

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(名前順)

Programming Place Plus トップページ -- C言語編 -- 標準ライブラリのリファレンス(ヘッダ別)

先頭へ戻る

gets関数

概要

標準入力から文字列を1行受け取る。

ヘッダ

stdio.h (C99まで。C11 から削除)

形式

char* gets(char* s);

引数

s

文字列を受け取る配列を指すポインタ。

戻り値

成功時は引数s がそのまま返される。
ファイルの終わりに到達し、1文字も読み取らなかった場合は、ヌルポインタが返される。また、読み取りエラーの発生時にもヌルポインタを返す。

詳細

改行文字を読み取ったとき、あるいは、ファイルの終わりに達したときに読み込みを終える。改行文字を読み取った場合、それは配列に書き込まれない(この点は fgets関数と異なる)。配列に格納された最後の文字の後ろに、ヌル文字('\0') が付加される。
「注意」で触れているように、この関数は本質的に危険であり使用すべきではないため、C11規格で削除された。VisualStudio では削除されている。

注意

この関数は、受け取る文字数を指定できないため、バッファオーバーフローを起こす危険があるうえ、その対策方法がまったくない。従って、絶対に使ってはならない。
代替手段として、C99規格までは fgets関数を使う。C11規格では、gets_s関数があればそれを使う(この関数はオプション扱いである)。なければやはり fgets関数を使う。

使用例

#include <stdio.h>

int main(void)
{
    char str[80];

    puts( "何か入力してください。" );
    gets( str );  /* 80文字以上入力されると危険! */
    puts( str );

    return 0;
}

実行結果:

何か入力してください。
abcde
abcde

関連

この関数は危険性があるので、fgets関数などに置き換えることを考えるべきである。C11規格では、存在するならば gets_s関数を検討すると良い。

解説章


参考リンク


------------------------------------------------------------------------

更新履歴

'2019/2/12 VisualStudio 2015 の対応終了。

'2018/4/20 「NULL」という表記を「ヌルポインタ」に修正。

'2018/4/9 詳しい動作を追記。

'2018/4/2 「VisualC++」という表現を「VisualStudio」に統一。

'2018/1/22 新規作成。


------------------------------------------------------------------------

標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー