函数
<cstdio>

vprintf

int vprintf ( const char * format, va_list arg );
将可变参数列表中的格式化数据打印到 stdout
format 指向的 C 字符串写入标准输出 (stdout),其替换任何格式说明符的方式与 printf 相同,但使用的是由 arg 标识的可变参数列表中的元素,而不是额外的函数参数。

在内部,该函数从 arg 标识的列表中检索参数,如同对其使用了 va_arg 一样,因此 arg 的状态很可能会在调用后被改变。

无论如何,arg 应该在调用之前的某个时刻由 va_start 初始化,并且预计在调用之后的某个时刻由 va_end 释放。

参数

格式
一个 C 字符串,包含一个格式化字符串,其遵循与 printf 中的 format 相同的规范(详见 printf)。
参数
一个标识由 va_start 初始化的可变参数列表的值。
va_list 是在 <cstdarg> 中定义的特殊类型。

返回值

成功时,返回写入的字符总数。

如果发生写入错误,则会设置错误指示符ferror)并返回一个负数。

如果在写入宽字符时发生多字节字符编码错误,errno 会被设置为EILSEQ并返回一个负数。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/* vprintf example */
#include <stdio.h>
#include <stdarg.h>

void WriteFormatted ( const char * format, ... )
{
  va_list args;
  va_start (args, format);
  vprintf (format, args);
  va_end (args);
}

int main ()
{
   WriteFormatted ("Call with %d variable argument.\n",1);
   WriteFormatted ("Call with %d variable %s.\n",2,"arguments");

   return 0;
}

该示例说明了WriteFormatted可以用不同数量的参数来调用,这些参数又会传递给vprintf函数,显示以下输出
Call with 1 variable argument.
Call with 2 variable arguments.


另见