函数
<cwchar>

getwc

wint_t getwc (FILE* stream);
从流中获取宽字符
返回指定的内部位置指示符当前指向的宽字符。然后,内部位置指示符会前进到下一个宽字符。

由于宽字符在外部文件中由多字节字符表示,该函数可能涉及从文件中读取多个字节,这些字节被解释为单个字符,就像使用的内部 mbstate_t 对象调用了 mbrtowc 一样。

如果读取的字节序列无法解释为有效的多字节字符(或没有足够的字节来组成一个宽字符),该函数将返回 WEOF 并将EILSEQ设置为 errno 的值。

如果在调用时流已到达文件末尾,该函数将返回 WEOF 并为该流设置文件结束指示符feof)。

如果发生读取错误,该函数将返回 WEOF 并为该流设置错误指示符ferror)。

getwcfgetwc 是等效的,只是getwc在某些库中可能被实现为宏。有关直接从 stdin 读取的类似函数,请参阅 getwchar

这是 getc<cstdio>)的宽字符等效版本。

参数

stream
指向标识输入流的 FILE 对象的指针。
该流不应有任何朝向,或应是宽字符朝向的(对流的第一个 I/O 操作决定了它是字节朝向还是宽字符朝向,请参阅 fwide)。

返回值

成功时,返回读取的字符(提升为 wint_t 类型的值)。
返回类型为 wint_t,以容纳特殊值 WEOF,该值表示失败
如果读取的字节序列无法解释为有效的宽字符,该函数将返回 WEOF 并将 errno 设置为EILSEQ.
如果位置指示符位于文件末尾,该函数将返回 WEOF 并设置eof 指示符feof)。
如果发生读取错误,该函数也会返回 WEOF,但会设置其错误指示符ferror)。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/* getwc example */
#include <stdio.h>
#include <wchar.h>

int main ()
{
  FILE * pFile;
  wint_t wc;
  int n = 0;
  pFile=fopen ("myfile.txt","r");
  if (pFile!=NULL)
  {
    do {
      wc = getwc (pFile);
      if (wc == L'$') n++;
    } while (wc != WEOF);
    fclose (pFile);
    wprintf (L"The file contains %d dollar sign characters ($).\n",n);
  }
  return 0;
}

此程序读取一个名为myfile.txt的现有文件,逐个字符地读取,并使用n变量来计算文件中包含多少个美元符号 ($)。

另见