この関数の目的
gets()は、標準入力から一行を取り込む。
定義
#include <stdio.h> char *gets(char *s);
働き
この関数は stdin が指す入力ストリームから EOF (ファイルの終わり)か改行文字が出てくるまでの文字を s が指す文字列へ読み込む。 改行文字は捨てられる。読み込んだ文字の最後にはヌル文字を加える。
成功すれば s を返す。ファイルの終わりにつき当たって一文字も読み込まなかったら、 s の内容は変更されず、ヌルポインタが返される。 読み込みエラーが発生した場合、文字列の内容は不定になり、ヌルポインタが返される。
解説
注意するべきは、この関数が最大で何文字文字列に書き込むかが決められていないということである。 標準入力に、 s に確保されている配列より長い行が登場した場合、もちろん配列オーバーとなる。 つまり、 s に何文字分確保すればいいかは、全くわからない。この問題のために、頑健性が重要になるプログラムではあまり使われない関数である。
さらにまぎらわしいことに、この関数は fgets() の第二引数に stdin を渡したものと同じではない。 この関数は最後の '\n' を勝手に取り除くのだ。これは忘れやすい。