vfwscanf ()- 读取格式化的宽字符数据

格式

#include <stdarg.h>
#include <stdio.h>
int vfwscanf(FILE *stream, const wchar_t *format, va_list arg_ptr);

语言级别

ANSI

线程安全

语言环境敏感

此函数的行为可能受当前语言环境的 LC_CTYPE 和 LC_NUMERIC 类别影响。 如果在编译命令上指定了 LOCALETYPE (*LOCALEUCS2) 或 LOCALETYPE (*LOCALEUTF) ,那么此行为也可能受到当前语言环境的 LC_UNI_CTYPE 和 LC_UNI_NUMERIC 类别的影响。 当在编译命令上指定 LOCALETYPE (*CLD) 时,此功能不可用。 有关更多信息,请参阅 了解 CCSID 和语言环境

集成文件系统界面

有关更多信息,请参阅 宽字符

宽字符函数

当在编译命令上指定 SYSIFCOPT (*NOIFSIO) 时,此功能不可用。

描述

vfwscanf() 函数将流中的宽数据读取到由可变数目的自变量指定的位置中。 vfwscanf() 函数的工作方式与 fwscanf() 函数一样,只是 arg_ptr 指向一个自变量列表,这些自变量的数目因程序中的调用而异。 这些参数应该由 va_start 针对每个调用进行初始化。 相反, fwscanf() 函数可以具有自变量列表,但是在编译程序时,该列表中的自变量数目是固定的。

每个自变量都必须是一个指向变量的指针,该变量的类型与 format-string 中的类型说明符相对应。 format 具有与 fwscanf() 函数的格式字符串相同的格式和函数。

返回值

vfwscanf() 函数返回已成功转换和分配的字段数。 返回值不包含已读取但未分配的字段。 如果未执行任何转换,那么对于尝试在文件结束时读取的操作,返回值为 EOF。 返回值 0 表示未分配任何字段。

示例

此示例打开文件 myfile 以进行输入,然后扫描此文件以查找字符串,长整数值和浮点值。
#include <stdio.h>
#include <stdarg.h> 
#include <wchar.h>

int vread(FILE *stream, wchar_t *fmt, ...)
{
   int rc;
   va_list arg_ptr;
   va_start(arg_ptr, fmt);
   rc = vfwscanf(stream, fmt, arg_ptr);
   va_end(arg_ptr);
   return(rc);
}

#define MAX_LEN 80
int main(void)
{
   FILE *stream;
   long l;
   float fp;
   char s[MAX_LEN + 1];
   char c;
   stream = fopen("mylib/myfile", "r");
   /* Put in various data. */
   vread(stream, L"%s", &s [0]);
   vread(stream, L"%ld", &l);
   vread(stream, L"%c", &c);
   vread(stream, L"%f", &fp);
   printf("string = %s\n", s);
   printf("long double = %ld\n", l);
   printf("char = %c\n", c);
   printf("float = %f\n", fp);
}
/*************** If myfile contains ************************
**************** abcdefghijklmnopqrstuvwxyz 343.2 ***********
********************** expected output is: *********************
string = abcdefghijklmnopqrstuvwxyz
long double = 343
char = .
float = 2.000000
*/

相关信息