每個 vprintf 函式都會接受引數清單的指標,然後設定指定資料的格式,並將其寫入到特定目的地。 函式有數種方式不同:在參數驗證中,函式會採用單一位元組或寬字元字串、輸出目的地,以及指定格式字串中的順序參數支援。
_vcprintf, _vcwprintf
vfprintf, vfwprintf
_vfprintf_p、 、 _vfprintf_p_l、 _vfwprintf_p_vfwprintf_p_l
vfprintf_s、 、 _vfprintf_s_l、 vfwprintf_s_vfwprintf_s_l
vprintf, vwprintf
_vprintf_p、 、 _vprintf_p_l、 _vwprintf_p_vwprintf_p_l
vprintf_s、 、 _vprintf_s_l、 vwprintf_s_vwprintf_s_l
_vscprintf、 、 _vscprintf_l、 _vscwprintf_vscwprintf_l
_vsnprintf、 、 _vsnwprintfvsprintfvswprintf
_vsprintf_p、 、 _vsprintf_p_l、 _vswprintf_p_vswprintf_p_l
vsprintf_s、 、 _vsprintf_s_l、 vswprintf_s_vswprintf_s_l
備註
vprintf 函式類似下表所列的對應函式。 然而,每個 vprintf 函式都接受引數清單的指標,而每個對應函式都接受引數清單。
這些函式會設定要輸出到目的地的資料格式,如下所示。
| 函式 | 對應函式 | 輸出目的地 | 參數驗證 | 位置參數支援 |
|---|---|---|---|---|
_vcprintf |
_cprintf |
主控台 | 檢查是否 Null。 | 否 |
_vcwprintf |
_cwprintf |
主控台 | 檢查是否 Null。 | 否 |
vfprintf |
fprintf |
stream |
檢查是否 Null。 | 否 |
vfprintf_p |
fprintf_p |
stream |
檢查 Null 與有效格式。 | 是 |
vfprintf_s |
fprintf_s |
stream |
檢查 Null 與有效格式。 | 否 |
vfwprintf |
fwprintf |
stream |
檢查是否 Null。 | 否 |
vfwprintf_p |
fwprintf_p |
stream |
檢查 Null 與有效格式。 | 是 |
vfwprintf_s |
fwprintf_s |
stream |
檢查 Null 與有效格式。 | 否 |
vprintf |
printf |
stdout |
檢查是否 Null。 | 否 |
vprintf_p |
printf_p |
stdout |
檢查 Null 與有效格式。 | 是 |
vprintf_s |
printf_s |
stdout |
檢查 Null 與有效格式。 | 否 |
vwprintf |
wprintf |
stdout |
檢查是否 Null。 | 否 |
vwprintf_p |
wprintf_p |
stdout |
檢查 Null 與有效格式。 | 是 |
vwprintf_s |
wprintf_s |
stdout |
檢查 Null 與有效格式。 | 否 |
vsprintf |
sprintf |
所指向的記憶體 buffer |
檢查是否 Null。 | 否 |
vsprintf_p |
sprintf_p |
所指向的記憶體 buffer |
檢查 Null 與有效格式。 | 是 |
vsprintf_s |
sprintf_s |
所指向的記憶體 buffer |
檢查 Null 與有效格式。 | 否 |
vswprintf |
swprintf |
所指向的記憶體 buffer |
檢查是否 Null。 | 否 |
vswprintf_p |
swprintf_p |
所指向的記憶體 buffer |
檢查 Null 與有效格式。 | 是 |
vswprintf_s |
swprintf_s |
所指向的記憶體 buffer |
檢查 Null 與有效格式。 | 否 |
_vscprintf |
_vscprintf |
所指向的記憶體 buffer |
檢查是否 Null。 | 否 |
_vscwprintf |
_vscwprintf |
所指向的記憶體 buffer |
檢查是否 Null。 | 否 |
_vsnprintf |
_snprintf |
所指向的記憶體 buffer |
檢查是否 Null。 | 否 |
_vsnwprintf |
_snwprintf |
所指向的記憶體 buffer |
檢查是否 Null。 | 否 |
argptr 引數的類型是 va_list,它是在 VARARGS.H 與 STDARG.H 中所定義。 argptr變數必須由va_start初始化,而且可由後續va_arg呼叫重新初始化;argptr然後指向根據自變數中format對應規格轉換和傳輸輸出的自變數清單開頭。 format具有與的printf自變數相同的表單和函format式。 這些函式都不會叫用 va_end。 如需有關每個 vprintf 函式的完整描述,請參閱上表所列之對應函式的描述。
_vsnprintfvsprintf不同於 ,它會將不超過count位元組寫入 。buffer
名稱中具有 w infix 的這些函式版本是不含 w infix 之對應函式的寬字元版本;在這些寬字元函式中, buffer 而且 format 都是寬字元字串。 否則,每個寬字元函式的運作方式與其 SBCS 對應函式的運作方式相同。
具有和 _p 後綴的這些函_s式版本是更安全的版本。 這些版本會驗證格式字串。 如果格式字串的格式不正確,它們會產生例外狀況(例如,如果使用無效的格式字元)。
這些函 _p 式的後置詞版本可讓您指定格式字串中提供的自變數取代的順序。 如需詳細資訊,請參閱 printf_p 位置參數。
針對vsprintf、 vswprintf_vsnprintf 和 _vsnwprintf,如果複製發生在重疊的字串之間,則行為是未定義的。
重要
確認 format 不是使用者定義的字串。 如需詳細資訊,請參閱 Avoiding Buffer Overruns (避免緩衝區滿溢)。 如果使用這些函式的安全版本(或_s_p後綴),則使用者提供的格式字串可能會觸發無效的參數例外狀況,如果使用者提供的字串包含無效的格式字元。
另請參閱
資料流 I/O
fprintf、 、 _fprintf_l、 fwprintf_fwprintf_l
printf、 、 _printf_l、 wprintf_wprintf_l
sprintf、、 _sprintf_l、 swprintf、 _swprintf_l、 __swprintf_l
va_arg、 、 va_copy、 va_endva_start