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

*******************************************************************/

相关信息