getwc() — ストリームからワイド文字を読み取る

形式

     #include <stdio.h>
     #include <wchar.h>
     wint_t getwc(FILE *stream);

言語レベル

ANSI

スレッド・セーフ

はい

ロケール依存

この関数の振る舞いは、現行ロケールの LC_CTYPE カテゴリーの影響を受ける可能性があります。 また、この振る舞いは、LOCALETYPE(*LOCALEUCS2) または LOCALETYPE(*LOCALEUTF) がコンパイル・コマンドに対して指定されている場合は、現行ロケールの LC_UNI_CTYPE カテゴリーにも影響を受ける可能性があります。 この関数は、コンパイル・コマンドに対して LOCALETYPE(*CLD) が指定されている場合には使用できません。 詳しくは、 CCSID とロケールについてを参照してください。

統合ファイル・システム・インターフェース

この関数は、コンパイル・コマンドに対して SYSIFCOPT(*NOIFSIO) が指定されている場合には使用できません。

ワイド文字関数

詳しくは、 ワイド文字 を参照してください。

説明

getwc() 関数は、ストリームから次のマルチバイト文字を読み取り、それをワイド文字に変換し、ストリームの関連ファイル位置標識を進めます。

getwc() 関数は fgetwc() 関数と同等ですが、マクロとして実装されている場合は、 ストリーム を複数回評価できる点が異なります。 したがって、引数は副次作用をとる式であってはなりません。

同じストリームに対する後続の読み取り操作間で現行ロケールが変更された場合は、未定義の結果が発生することがあります。 同じストリーム上で getwc() 関数とともに非ワイド文字関数を使用すると、未定義の動作になります。

getwc() 関数を呼び出した後、EOF に達していない限り、ストリームの書き込み関数を呼び出す前に、バッファーをフラッシュするか、ストリーム・ポインターを位置変更してください。 ストリームに対する書き込み操作の後、 getwc() 関数を呼び出す前に、バッファーをフラッシュするか、ストリーム・ポインターを位置変更してください。

戻り値

getwc() 関数は、入力ストリームから次のワイド文字を戻すか、または WEOF を戻します。 エラーが発生した場合、 getwc() 関数はエラー標識を設定します。 getwc() 関数は、ファイルの終わりを検出すると、EOF 標識を設定します。 マルチバイト文字の変換中にエンコード・エラーが発生した場合、 getwc() 関数は errno に EILSEQ を設定します。

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

getwc()の errno 値については、 fgetwc ()-ストリームからのワイド文字の読み取りを参照してください。

#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <errno.h>
 
int main(void)
{
   FILE   *stream;
   wint_t wc;
 
   if (NULL == (stream = fopen("getwc.dat", "r"))) {
      printf("Unable to open: \"getwc.dat\"\n");
      exit(1);
   }
 
   errno = 0;
   while (WEOF != (wc = getwc(stream)))
      printf("wc = %lc\n", wc);
 
   if (EILSEQ == errno) {
      printf("An invalid wide character was encountered.\n");
      exit(1);
   }
   fclose(stream);
   return 0;
 
   /********************************************************
      Assuming the file getwc.dat contains:
 
      Hello world!
 
      The output should be similar to:
 
      wc = H
      wc = e
      wc = l
      wc = l
      wc = o
      :
   ********************************************************/
}

関連情報