C++官网参考链接:https://cplusplus.com/reference/cwchar/fgetwc/
函数
fgetwc
wint_t fgetwc (FILE * stream);
从流中获得宽字符
返回指定stream的内部位置指示符当前指向的宽字符。然后将内部位置指示符向前移动到下一个宽字符。
由于宽字符由外部文件中的多字节字符表示,因此函数可能涉及从文件中读取多个字节,这些字节被解释为单个宽字符,就像使用stream的内部mbstate_t对象调用mbrtowc一样。
如果读取的字节序列不能被解释为有效的多字节字符(或者可用的字节太少,无法组成宽字符),则函数返回WEOF并将EILSEQ设置为errno的值。
如果调用时stream位于文件结束,该函数返回WEOF并为stream设置文件结束指示符(feof)。
如果发生读错误,该函数返回WEOF并为stream设置错误指示符(ferror)。
fgetwc和getwc是等价的,除了getwc可能在某些库中作为宏实现。
这是fgetc(
形参
stream
指向标识输入流的FILE对象的指针。
流还没有方向,或者是宽字符方向的(流上的第一个I/O操作决定它是面向字节的还是面向宽字符的,参见fwide)。
返回值
如果成功,则返回已读的字符(提升为wint_t类型的值)。
返回类型为wint_t,以适应特殊值WEOF,它表示失败:
如果读取的字节序列不能被解释为有效的宽字符,则函数返回WEOF并将errno设置为EILSEQ。
如果位置指示符位于文件结束,该函数返回WEOF并设置stream的文件结束指示符(feof)。
如果发生读取错误,该函数也返回WEOF,但设置其错误指示符(ferror)。
用例
/* fgetwc example */
#include
#include
int main ()
{
FILE * pFile;
wint_t wc;
int n = 0;
pFile=fopen ("myfile.txt","r");
if (pFile!=NULL)
{
do {
wc = fgetwc (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变量计算文件包含多少美元字符($)。