函式
<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.

另見