vfwscanf
函数 <cwchar>
int vfwscanf (FILE* stream, const wchar_t* format, va_list arg);
从流中读取格式化的数据到变量参数列表中
从流中读取数据,并根据C宽字符串格式(format),
将它们存储到arg的变量参数列表中的元素所指向的位置中。
在内部,函数从arg的列表中检索参数,就像在它上面使用了
va_arg一样,因此arg的状态可能会被调用改变。
在任何情况下,arg都应该在调用之前的某个点被
va_start初始化,并且它应该在调用之后的某个点被
va_end释放。
文件中宽字符的外部表示形式是多字节字符:
这些字符的翻译就像调用了
mbrtowc
一样(使用流的内部
mbstate_t对象)。
这相当于
vfscanf(<
cstdio>)的宽字符版本。
☲ 参数
stream
指向标识输入流的
FILE对象的指针。
流不区分字符模式(流的第一次i/o操作确定它是单字符还是宽字符,请参见
fwide)。
format
C宽字符串,包含一个格式字符串,该格式字符串遵循与scanf格式相同的规范
(详情请参阅
scanf)。
请注意,所有格式说明符都与scanf中的含义相同;
因此,应使用%lc读取宽字符(而不是%c),以及应使用%ls读取宽字符串(而不是%s)。
arg
一个值,标识用
va_start初始化的变量参数列表。
va_list是<
cstdarg>中定义的特殊类型
☉ 返回值
如果成功,函数将返回成功填充参数列表的项数。
该数可以匹配预期的项数,或者由于匹配失败、读取错误或文件结束的范围而小于(甚至为零)。
如果发生读取错误或在读取时到达文件结束,则设置正确的指示符(
feof或
ferror)。
并且,如果任何一种情况发生在任何数据可以成功读取之前,则返回
WEOF。
如果在解释宽字符时发生编码错误,该函数将
errno设置为EILSEQ。
☣ 示例
/* vfwscanf example */
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
void ReadWideStuff (FILE * stream, const wchar_t * format, ...)
{
va_list args;
va_start (args, format);
vfwscanf (stream, format, args);
va_end (args);
}
int main ()
{
FILE * pFile;
int val;
wchar_t str[100];
pFile = fopen ("myfile.txt","r");
if (pFile!=NULL) {
ReadWideStuff ( pFile, L" %ls %d ", str, &val );
wprintf (L"I have read %ls and %d", str, val);
fclose (pFile);
}
return 0;
} |
🍄 另请参阅
vfscanf |
从流中读取格式化的数据到变量参数列表中(function ) |
vwscanf |
将格式化的数据读入变量参数列表(function ) |
fwscanf |
从流读取格式化的数据(function ) |
wscanf |
从stdin读取格式化的数据(function ) |