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
   ************************************************************************/