fgetc() — 文字の読み取り
フォーマット
#include <stdio.h>
int fgetc(FILE *stream);
言語レベル
ANSI
スレッド・セーフ
はい
説明
fgetc() 関数は 1 バイトの符号なし文字を、現在位置で入力 stream から読み取り、関連付けられたファイル・ポインターがある場合はこれを増やして、次の文字を指すようにします。
注: fgetc() 関数は getc() と同じですが、常に関数呼び出しとして定義され、マクロで置き換えられることはありません。
戻り値
fgetc() 関数は、整数として読み取られる文字を戻します。 EOF の戻り値はエラーか、またはファイル終了状態を示します。 EOF の値がエラーを示しているか、あるいはファイル終了を示しているかを判別するには、feof() 関数または ferror() 関数を使用してください。
errno の値は、次のいずれかに設定されます。
- 値
- 意味
- EBADF
- ファイル・ポインター、または記述子が有効ではありません。
- ECONVERT
- 変換エラーが発生しました。
- ENOTREAD
- ファイルは読み取り操作用にオープンされていません。
- EGETANDPUT
- 書き込み操作の後に許可されていない読み取り操作が発生しました。
- ERECIO
- ファイルはレコードの入出力用にオープンしています。
- ESTDIN
- stdin をオープンできません。
- EIOERROR
- リカバリー不能な入出力エラーが発生しました。
- EIORECERR
- リカバリー可能な入出力エラーが発生しました。
fgetc() 関数は、type=record でオープンされたファイルではサポートされていません。
例
次の例は、入力データ行をストリームから取得します。
#include <stdio.h>
#define MAX_LEN 80
int main(void)
{
FILE *stream;
char buffer[MAX_LEN + 1];
int i, ch;
stream = fopen("mylib/myfile","r");
for (i = 0; (i < (sizeof(buffer)-1) &&
((ch = fgetc(stream)) != EOF) && (ch != '¥n')); i++)
buffer[i] = ch;
buffer[i] = '¥0';
if (fclose(stream))
perror("fclose error");
printf("line: %s¥n", buffer);
}
/***********************************************************************
If FILENAME contains: one two three
The output should be:
line: one two three
************************************************************************/