getwc ()- 从流读取宽字符
格式
#include <stdio.h>
#include <wchar.h>
wint_t getwc(FILE *stream);语言级别
ANSI
线程安全
是
语言环境敏感
此函数的行为可能受当前语言环境的 LC_CTYPE 类别影响。 如果在编译命令上指定了 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,那么它也可能受当前语言环境的 LC_UNI_CTYPE 类别影响。 当在编译命令上指定 LOCALETYPE (*CLD) 时,此功能不可用。 有关更多信息,请参阅 了解 CCSID 和语言环境。
集成文件系统界面
当在编译命令上指定 SYSIFCOPT (*NOIFSIO) 时,此功能不可用。
宽字符函数
有关更多信息,请参阅 宽字符 。
描述
getwc() 函数从流中读取下一个多字节字符,将其转换为宽字符,并推进流的关联文件位置指示符。
getwc() 函数等同于 fgetwc() 函数,不同之处在于,如果它实现为宏,那么它可以多次评估 流 。 因此,自变量绝不应该是具有副作用的表达式。
如果在同一流上的后续读操作之间更改了当前语言环境,那么可能会出现未定义的结果。 将非宽字符函数与同一流上的 getwc() 函数配合使用会导致未定义的行为。
在调用 getwc() 函数之后,请先清空缓冲区或重新定位流指针,然后再调用流的写函数,除非已达到 EOF。 对流执行写操作后,请先清空缓冲区或重新定位流指针,然后再调用 getwc() 函数。
返回值
getwc() 函数从输入流或 WEOF 返回下一个宽字符。 如果发生错误,那么 getwc() 函数会设置错误指示符。 如果 getwc() 函数迂到文件结束符,那么它会设置 EOF 指示符。 如果在多字节字符转换期间发生编码错误,那么 getwc() 函数会将 errno 设置为 EILSEQ。
使用 ferror() 或 feof() 函数来确定是发生了错误还是 EOF 条件。 仅当尝试读取超过最后一个字节的数据时,才会达到 EOF。 读取数据的最后一个字节 (包括最后一个字节) 不会打开 EOF 指示符。
有关 getwc()的 errno 值的信息,请参阅 fgetwc ()-从流读取宽字符。
示例
#include <stdio.h>
#include <stdlib.h>
#include <wchar.h>
#include <errno.h>
int main(void)
{
FILE *stream;
wint_t wc;
if (NULL == (stream = fopen("getwc.dat", "r"))) {
printf("Unable to open: \"getwc.dat\"\n");
exit(1);
}
errno = 0;
while (WEOF != (wc = getwc(stream)))
printf("wc = %lc\n", wc);
if (EILSEQ == errno) {
printf("An invalid wide character was encountered.\n");
exit(1);
}
fclose(stream);
return 0;
/********************************************************
Assuming the file getwc.dat contains:
Hello world!
The output should be similar to:
wc = H
wc = e
wc = l
wc = l
wc = o
:
********************************************************/
}