gets(),puts()
に対応する関数が、fgets(),fputs()
である。
char *fgets( char *str, int size, FILE *fp ); /* 一行の読み込み */ int fputs( char *str, FILE *fp ); /* 一行の書き出し */ |
fgets()
は、改行まで含めて一行を str
で指定された場所に
読み込みます。もし、一行が長く、size-1
よりも大きい場合には、
改行に達しなくても、size-1
だけ読みます。同時に、文字列の最後に
'\0'
を負荷します(このために size-1
だけ読む訳です)。
通常は、配列を用意し、配列の大きさを size
に指定すれば良いでしょう。
エラーもしくはファイルの終わりに達すると NULL を返します。エラーと
EOF(End Of File)を区別しないので、もし区別をした場合には、別途
feof()
や ferror()
などの関数を利用してこれらの区別を
しなければなりません(これについては、読者の課題とします)。
読み込みに成功した場合には、文字列へのポインタを返します。
char buf[256]; FILE *fp; ... if( (fp=fopen("test.dat","r")) == NULL ){ exit(1); } while( fgets(buf, 256, fp) != NULL ){ ... } |
なお、gets()
は改行を捨てますが、fgets()
は捨てないという
違いがあるので注意してください。
fputs()
は、指定されたストリームに文字列 str を出力します。
fputs()
は出力に成功した時には 0 を返し、失敗した時には EOF
を
返します。一方、puts()
は自動的に改行を追加し、成功した時には
非負の整数を返し、失敗したときにはEOF
を返すという違いがあります。