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


另見