getc()、getchar() - 文字の読み取り

標準

標準/拡張機能 C/C++ 依存項目

ISO C
POSIX.1
XPG4
XPG4.2
C99
Single UNIX Specification、バージョン 3

両方  

形式

#include <stdio.h>

int getc(FILE *stream);
int getchar(void);

機能説明

単一文字を現行の stream 位置から読み取り、stream 位置を次の文字へ進めます。getchar() 関数は、getc(stdin) と同じです。

getc() 関数と fgetc() 関数は同じです。ただし、getc() および getchar() は、かなり効率の良いマクロの形式で 提供されます。パフォーマンスのために、関数形式または fgetc() 形式ではなく マクロ形式を使用することをお勧めします。デフォルト解釈で、stdio.h は、これらの関数のマクロ版を提供します。

ただし、関数形式を得るには、以下の 1 つ以上の操作を行います。
  • C のみに関しては、stdio.h を組み込まない
  • #undef を指定する (例えば #undef getc)。
  • 呼び出し文を括弧で囲む。例えば、(getc)

getc() および はgetchar() は、type=record または type=blocked を使用してオープンしたファイルではサポートされません。

getc() および getchar() には、書き込みの直後の読み取りや 読み取りの直後の書き込みについて、すべての読み取り操作と同じ 制限があります。書き込みと後続の読み取りの間には、介入フラッシュまたは位置変更が 必要です。読み取りと後続の書き込みの間でも、EOF に達していない限り、介入フラッシュまたは位置変更が必要です。

アプリケーションがマルチスレッド化されていない場合、_ALL_SOURCE_NO_THREADS フィーチャー・テスト・マクロを設定すると、この関数のインライン・バージョンを使用できるため、アプリケーションのパフォーマンス が向上します。

POSIX の特殊な動作: POSIX(ON) を使用するマルチスレッドの C アプリケーションでは、フィーチャー・テスト・マクロ _OPEN_THREADS があると、これらのマクロは スレッド・セーフでないため #undef 状況になります。
注: getc() マクロは、その入力引数を複数回再評価するため、副次的作用を伴う式となるストリーム引数を決して受け渡さないでください。

戻り値

getc() および getchar() は、読み取られた文字を戻します。

EOF 戻り値は、エラーまたは EOF 条件を示します。読み取りエラーが発生すると、エラー標識が設定されます。EOF が検出されると、EOF 標識が設定されます。

ferror() または feof() を使用すると、エラーまたは EOF 条件の いずれが発生したかを判別することができます。EOF に達するのは、データの最後のバイトを超えて読み取ろうとした場合だけです。 データの最後のバイトまで (最後のバイトを含む) 読み取ると、EOF 標識はオンになりません

CELEBG02
⁄* CELEBG02                                      

   This example gets a line of input from the stdin stream.                     
   You can also use getc(stdin) instead of &getchar. in the for                 
   statement to get a line of input from stdin.                                 
                                                                                
 *⁄                                                                             
#include <stdio.h>                                                              
                                                                                
#define LINE 80                                                                 
                                                                                
int main(void)                                                                  
{                                                                               
  char buffer[LINE+1];                                                          
  int i;                                                                        
  int ch;                                                                       
                                                                                
  printf( "Please enter string¥n" );                                            
                                                                                
  ⁄* Keep reading until either:                                                 
     1. the length of LINE is exceeded  or                                      
     2. the input character is EOF  or                                          
     3. the input character is a new-line character                             
   *⁄                                                                           
                                                                                
  for ( i = 0; ( i < LINE ) && (( ch = getchar()) != EOF) &&                    
               ( ch !='¥n' ); ++i )                                             
    buffer[i] = ch;                                                             
                                                                                
  buffer[i] = '¥0';  ⁄* a string should always end with '¥0' ! *⁄               
                                                                                
  printf( "The string is %s¥n", buffer );                                       
}                                                                               
出力:
Please enter string
hello world
The string is hello world

関連情報