next up previous contents
Next: 4. 書式付きの読み書き Up: 2. ストリーム入出力 Previous: 2. 一文字の読み書き

3. 一行の読み書き

文字の入出力と同じように、標準入出力に対する一行の読み書きである 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 を返すという違いがあります。



Noriyo Kanayama 平成14年11月26日