vswscanf ()- 读取格式化的宽字符数据
格式
#include <stdarg.h>
#include <wchar.h>
int vswscanf(const wchar_t *buffer, 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 和语言环境。
宽字符函数
有关更多信息,请参阅 宽字符 。
描述
vswscanf() 函数将宽数据从缓冲区读取到由可变数目的自变量指定的位置。 vswscanf() 函数的工作方式与 swscanf() 函数一样,只是 arg_ptr 指向一个自变量列表,这些自变量的数目因程序中的调用而异。 这些参数应该由 va_start 针对每个调用进行初始化。 相反, swscanf() 函数可以具有自变量列表,但是在编译程序时,该列表中的自变量数目是固定的。
每个自变量都必须是一个指向变量的指针,该变量的类型与 format-string 中的类型说明符相对应。 format 具有与 swscanf() 函数的格式字符串相同的格式和函数。
返回值
vswscanf() 函数返回已成功转换和分配的字段数。 返回值不包含已读取但未分配的字段。 如果未执行任何转换,那么对于尝试在文件结束时读取的操作,返回值为 EOF。 返回值 0 表示未分配任何字段。
示例
此示例使用
vswscanf() 函数从字符串 tokenstring 中读取各种数据,然后显示该数据。#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
int vread(const wchar_t *buffer, wchar_t *fmt, ...)
{
int rc;
va_list arg_ptr;
va_start(arg_ptr, fmt);
rc = vswscanf(buffer, fmt, arg_ptr);
va_end(arg_ptr);
return(rc);
}
int main(void)
{
wchar_t *tokenstring = L"15 12 14";
char s[81];
char c;
int i;
float fp;
/* Input various data */
vread(tokenstring, L"%s %c%d%f", s, &c, &i, &fp);
/* Display the data */
printf("\nstring = %s\n",s);
printf("character = %c\n",c);
printf("integer = %d\n",i);
printf("floating-point number = %f\n",fp);
}
/***************** Output should be similar to: *****************
string = 15
character = 1
integer = 2
floating-point number = 14.000000
*******************************************************************/