fgets()は、ストリームから文字列をプログラムに読み込みます。
#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
sは読み込んだ文字列を保存するための文字列バッファのポインタ、sizeは読み込む最大の長さ(バッファsの長さ以下の値)、 streamは読み込むストリームのポインタです。streamはには一般的には、fopen()が返した値を指定します。
fgets()は、最大でsize-1文字の文字をstreamから読み出し、バッファsに保存します。EOFまたは改行文字を読み出すと読み出しを中止します。 読み込まれた改行文字はそのままバッファに保存されバッファの最後に'\0'が追加されます。 エラーが発生したかどうかを調べるには、feof()またはferror()を使います。
fgets(s, n , stdin)はgets(s)と同じですが、gets()は読み込む文字数がバッファの長さを超えたときの動作が不定で、また改行文字をNULL文字に置き換えます。
次の例では、名前を文字列として読み込んで出力します。
#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[])
{
char urname[256];
printf("名前は?>");
fgets(urname, 256, stdin);
/* 最後の改行を削除する */
urname[strlen(urname)-1] = '\0';
printf("Hello %s! 元気でやってるかい?\n", urname);
return 0;
}
strlen()はマルチバイト文字をサポートしないので、このプログラムに入力する名前に日本語などマルチバイト文字を使うことはできません。