函数
<cstdio>

vfprintf

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

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

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

参数

指向一个 FILE 对象的指针,该对象标识一个输出流。
格式
一个 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
20
21
22
23
24
25
/* vfprintf example */
#include <stdio.h>
#include <stdarg.h>

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

int main ()
{
   FILE * pFile;

   pFile = fopen ("myfile.txt","w");

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

   fclose (pFile);

   return 0;
}

该示例演示了如何WriteFormatted可以用不同数量的参数来调用,这些参数又会传递给vfprintf函数。
myfile.txt将包含

myfile.txt
Call with 1 variable argument. 
Call with 2 variable arguments.

另见