当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ vswprintf()用法及代码示例


C++ 中的vswprintf() 函数用于将格式化的宽字符串写入宽字符串缓冲区。

vswprintf() 函数在<cwchar> 头文件中定义。

vswprintf()原型

int vswprintf( wchar_t* buffer, size_t buf_size, const wchar_t* format, va_list vlist );

vswprintf() 函数将 format 指向的宽字符串写入宽字符串 buffer 。最多将 (buf_size-1) 宽字符写入缓冲区,然后是空宽字符。

宽字符串 format 可能包含以 % 开头的格式说明符,这些说明符被作为列表 vlist 传递的变量的值替换。

参数:

  • buffer:指向宽字符串缓冲区以写入结果的指针。
  • buf_size:要写入的最大宽字符数,包括终止的空宽字符。
  • format:指向写入缓冲区的空终止宽字符串的指针。它由字符以及以 % 开头的可选格式说明符组成。格式说明符由遵循格式的各个变量的值替换。
    格式说明符包含以下部分:
    • 前导 % 符号
    • 标志:可选的一个或多个标志,用于修改转换行为。
      • -:左对齐字段内的结果。默认情况下它是右对齐的。
      • +:结果的符号附加到值的开头,即使是正面结果也是如此。
      • 空格:如果没有符号,则在结果的开头附加一个空格。
      • #:执行另一种形式的转换。
      • 0:用于整数和浮点数。前导零用于填充数字而不是空格。
    • 宽度:可选的 * 或整数值,用于指定最小宽度字段。
    • 精度:一个可选字段,由 .后跟 * 或整数或不指定精度。
    • 长度:一个可选的长度修饰符,指定参数的大小。
    • 说明符:转换格式说明符。可用的格式说明符如下:
    格式说明符
    格式说明符 说明
    % 印刷 %
    c 写入单个字符
    s 写入一个字符串
    d 或 i 将有符号整数转换为十进制表示
    o 将无符号整数转换为八进制表示
    X 或 x 将无符号整数转换为十六进制表示
    u 将无符号整数转换为十进制表示
    F 或 f 将浮点数转换为十进制表示
    E 或 e 将浮点数转换为十进制 index 表示法
    一个或一个 将浮点数转换为十六进制 index
    克或克 将浮点数转换为十进制或十进制 index 表示法
    n 返回到目前为止此函数调用写入的字符数。结果写入参数指向的值
    p 编写定义指针的实现定义的字符序列。

    所以格式说明符的一般格式是:
    %[flags][width][.precision][length]specifier
  • vlist :包含要写入的数据的参数列表。

返回:

  • 如果成功,vswprintf() 函数会返回写入的宽字符数,不包括终止的空宽字符。
  • 如果发生任何编码错误或要生成的字符数等于或大于buf_size,则返回负值。

示例:vswprintf() 函数如何工作?

#include <cwchar>
#include <cstdarg>
#include <clocale>

void write(wchar_t* buffer, size_t buf_size, const wchar_t *fmt, ...)
{
	va_list args;
	va_start(args, fmt);
	vswprintf(buffer, buf_size, fmt, args);
	va_end(args);
}

int main ()
{
	wchar_t str[] = L"\u0684 \u06b1 \u06aa \u06a3 \u0684";
	wchar_t buffer[50];

	setlocale(LC_ALL, "en_US.UTF-8");

	write(buffer, 50, L"Arabic Letters: %ls\n", str);
	wprintf(L"%ls", buffer);

	return 0;
}

运行程序时,以下内容将写入 example.txt:

Arabic Letters: ڄ ڱ ڪ ڣ ڄ

相关用法


注:本文由纯净天空筛选整理自 C++ vswprintf()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。