fgets() — ストリングの読み取り

フォーマット

#include <stdio.h>
char *fgets (char *string, int n, FILE *stream);

言語レベル

ANSI

スレッド・セーフ

はい

説明

fgets() 関数は、現在の stream 位置から最初の改行文字 (¥n) まで (改行文字を含める)、またはストリームの終わりまで、あるいは読み込まれた文字数が n-1 と同じになるまでの、最も早いものまでの文字を読み取ります。fgets() 関数は結果を string に格納し、ストリングの終わりに NULL 文字 (¥0) を追加します。 改行文字が読み込まれている場合、string には改行文字が含まれます。n が 1 である場合、string は空です。

戻り値

fgets() 関数は、正常に終了した場合、string バッファーを指すポインターを戻します。 NULL の戻り値はエラーか、またはファイル終了状態を示します。 NULL 値がエラーを示しているか、ファイルの終わりを示しているかを判別するには、feof() または ferror() 関数を使用します。いずれの場合も、ストリングの値は変わりません。

fgets() 関数は、type=record でオープンされたファイルではサポートされていません。

errno の値は、次のいずれかに設定されます。
意味
EBADF
ファイル・ポインター、または記述子が有効ではありません。
ECONVERT
変換エラーが発生しました。
ENOTREAD
ファイルは読み取り操作用にオープンされていません。
EGETANDPUT
書き込み操作の後に許可されていない読み取り操作が発生しました。
ERECIO
ファイルはレコードの入出力用にオープンしています。
ESTDIN
stdin をオープンできません。
EIOERROR
リカバリー不能な入出力エラーが発生しました。
EIORECERR
リカバリー可能な入出力エラーが発生しました。

次の例は、データ・ストリームから入出力の行を収集します。例では、ストリームから MAX_LEN - 1 文字まで、もしくは改行文字までを読み取ります。
#include <stdio.h>
 
#define  MAX_LEN  100
 
int main(void)
{
   FILE *stream;
   char line[MAX_LEN], *result;
 
   stream = fopen("mylib/myfile","rb");
 
   if ((result = fgets(line,MAX_LEN,stream)) != NULL)
      printf("The string is %s¥n", result);
 
   if (fclose(stream))
      perror("fclose error");
}