Home C&C++函数库 c++ 语法 程序源码 Linux C库

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变量计算该文件包含多少美元字符($)。

🍄  另请参阅



fgetc 从流中获取字符(function )
fputwc 向流中写入宽字符(function )
fwscanf 从流读取格式化的数据(function )

联系我们 免责声明 关于CandCplus 网站地图