vswprintf ()- 将宽字符格式化并写入缓冲区

格式

#include <stdarg.h>
#include <wchar.h>
int vswprintf(wchar_t *wcsbuffer, size_t n, const wchar_t
              *format, va_list argptr);

语言级别

ANSI

线程安全

语言环境敏感

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

宽字符函数

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

描述

vswprintf() 函数将一系列宽字符和值格式化并存储在缓冲区 wcsbuffer中。 vswprintf() 函数的工作方式与 swprintf() 函数类似,只是 argptr 指向一个宽字符自变量的列表,这些自变量的数目因调用而异。 对于每个调用,应该通过 va_start 来初始化这些参数。 相反, swprintf() 函数可以有一个自变量列表,但当您编译程序时,该列表中的自变量数目是固定的。

n 指定要写入的最大宽字符数,包括结束空字符。 vswprintf() 函数根据格式中相应的宽字符格式说明符来转换自变量列表中的每个条目。 格式具有与 printf() 函数的格式字符串相同的格式和函数,但以下情况除外:
  • %c (不带 l 前缀) 将整数自变量转换为 wchar_t ,就像通过调用 mbtowc() 函数一样。
  • %lc 将 wint_t 转换为 wchar_t。
  • %s (不带 l 前缀) 将多字节字符数组转换为 wchar_t 数组,就像调用 mbrtowc() 函数一样。 除非精度指定较短的输出,否则将数组写入到结束空字符,但不包括结束空字符。
  • %ls 写入 wchar_t 的数组。 除非精度指定较短的输出,否则将数组写入到结束空字符,但不包括结束空字符。

在写入的宽字符末尾添加空宽字符; 空宽字符不作为返回值的一部分。 如果在重叠的对象之间进行复制,那么行为未定义。

返回值

vswprintf() 函数返回数组中写入的字节数,不计入结束空宽字符。

示例

此示例创建一个函数 vout() ,该函数采用可变数量的宽字符自变量,并使用 vswprintf() 将它们打印到 wcstr
#include <stdio.h>
#include <stdarg.h>
#include <wchar.h>
 
wchar_t *format3 = L"%ls  %d  %ls";
wchar_t *format5 = L"%ls  %d  %ls  %d  %ls";
 
void vout(wchar_t *wcs, size_t n, wchar_t *fmt, ...)
{
   va_list arg_ptr;
 
   va_start(arg_ptr, fmt);
   vswprintf(wcs, n, fmt, arg_ptr);
   va_end(arg_ptr);
   return;
}
 
int main(void)
{
   wchar_t wcstr[100];
 
   vout(wcstr, 100, format3, L"ONE", 2L, L"THREE");
   printf("%ls\n", wcstr);
   vout(wcstr, 100, format5, L"ONE", 2L, L"THREE", 4L, L"FIVE");
   printf("%ls\n", wcstr);
   return 0;
}
 
   /************************************************************
      The output should be similar to:
 
      ONE  2  THREE
      ONE  2  THREE  4  FIVE
   ************************************************************/

相关信息