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 を返すという違いがあります。