fgetwc
函数 <cwchar>
wint_t fgetwc (FILE * stream);
从流中获得宽字符
返回指定流的内部位置指示器当前指向的宽字符。然后将内部位置指示器移动到下一个宽字符。
因为宽字符在外部文件中由多字节字符表示,该函数可能涉及从文件中读取几个字节,
这些字节被解释为单个字符,就好像
mbrtowc
是用流的内部
mbstate_t对象调用的。
如果读取的字节序列不能解释为有效的多字节字符(或者可用的字节太少,
无法组成宽字符),则该函数返回
WEOF并将EILSEQ设置为
errno的值。
如果调用时流位于文件结束位置,则该函数返回WEOF,并设置流的文件结束指示符(feof)。
如果发生读错误,该函数将返回
WEOF
并设置流的错误指示符(
ferror)。
Fgetwc和
getwc是等价的,只是在某些库中,getwc可以作为宏实现。
这相当于
fgetc
(<
cstdio>)的宽字符版本。
☲ 参数
stream
指向标识输入流的
FILE对象的指针。
流不区分字符模式(流上的第一次i/o操作确定它是单字符还是宽字符,请参见
fwide)。
☉ 返回值
如果成功,则返回读取的字符(转换为
wint_t类型的值)。
返回类型是
wint_t,
以容纳特殊值
WEOF----它表示失败:
如果读取的字节序列不能解释为有效的宽字符,则该函数返回
WEOF并将
errno设置为EILSEQ。
如果位置指示符位于文件结束位置,函数返回
WEOF,
并设置流的eof指示符(
feof)。
如果发生了读取错误,函数也会返回
WEOF,
但是会设置它的错误指示符(
ferror)。
☣ 示例
/* c16rtomb example */
#include <wchar.h>
#include <uchar.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
const char16_t* pt = u"Juan Souli\u00e9";
char buffer [MB_CUR_MAX];
int i;
size_t length;
mbstate_t mbs;
mbrlen (NULL,0,&mbs); /* initialize mbs */
while (*pt) {
length = c16rtomb(buffer,*pt,&mbs);
if ((length==0)||(length>MB_CUR_MAX)) break;
for (i=0;i<length;++i) putchar (buffer[i]);
++pt;
}
return 0;
}
|
这个程序一个字符一个字符地读取名为myfile.txt的现有文件,并使用n变量计算该文件包含多少美元字符($)。
🍄 另请参阅