getwc
函数 <cwchar>
wint_t getwc (FILE* stream);
从流中获得宽字符
返回指定流的内部位置指示器当前指向的宽字符。然后将内部位置指示器移动到下一个宽字符。
因为宽字符在外部文件中由多字节字符表示,该函数可能涉及从文件中读取几个字节,
这些字节被解释为单个字符,就好像
mbrtowc
是用流的内部
mbstate_t对象调用的。
如果读取的字节序列不能解释为有效的多字节字符(或者可用的字节太少,无法组成宽字符),
则该函数返回
WEOF
并将EILSEQ设置为
errno的值。
如果调用时流位于文件结束位置,则该函数返回
WEOF,
并设置流的文件结束指示符(
feof)。
如果发生读错误,该函数将返回
WEOF
并设置流的错误指示符(
ferror)。
Getwc和
fgetwc是等价的,只是在某些库中,getwc可以作为宏实现。
有关直接从
stdin读取的类似函数,
请参阅
getwchar。
这是等同于
getc
(<
cstdio>)的宽字符版本。
☲ 参数
stream
指向标识输入流的
FILE对象的指针。
流不区分字符模式(流上的第一次i/o操作确定它是单字符还是宽字符,
请参见
fwide)。
☉ 返回值
如果成功,则返回读取的字符(转换为类型为
wint_t的值)。
返回类型是
wint_t,
以容纳表示失败的特殊值
WEOF:
如果读取的字节序列不能解释为有效的宽字符,则该函数返回
WEOF
并将
errno设置为EILSEQ。
如果位置指示符位于文件结束位置,函数返回
WEOF,
并设置流的eof指示符(
feof)。
如果发生了读取错误,函数也会返回
WEOF,
但是会设置它的错误指示符(
ferror)。
☣ 示例
/* 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变量计算该文件包含多少美元字符($)。
🍄 另请参阅