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");
}