在函數體中聲明一個va_list,然後用va_start函數來獲取參數列表中的參數,使用完畢後調用va_end()結束。
_vsnprintf是C語言庫函數之一,屬於可變參數。用於向字符串中打印數據、數據格式用戶自定義。頭文件是#include <stdarg.h>。
int _vsnprintf(char* str, size_t size, const char* format, va_list ap);
參數說明:
char *str [out],把生成的格式化的字符串存放在這裏.
size_t size [in], str可接受的最大字符數 (非字節數,UNICODE一個字符兩個字節),防止產生數組越界.
const char *format [in], 指定輸出格式的字符串,它決定了你需要提供的可變參數的類型、個數和順序。
va_list ap [in], va_list變量. va:variable-argument:可變參數
函數功能:將可變參數格式化輸出到一個字符數組。
void OutputDebug( const WCHAR * strOutputString,...) {
WCHAR strBuffer[4096] = {0};
// VA_LIST 是在C語言中解決變參問題的一組宏,所在頭文件:#include <stdarg.h>,用於獲取不確定個數的參數。
va_list vlArgs;
// VA_START宏,用va_start宏初始化變量剛定義的va_list變量,使其指向第一個可變參數的地址(參數strOutputString在堆棧中的地址)
va_start( vlArgs,strOutputString );
// _vsnwprintf_s是_vsnprintf更安全的版本。
_vsnwprintf_s( strBuffer, ARRAYSIZE(strBuffer) -1, ARRAYSIZE(strBuffer) -1, strOutputString, vlArgs );
// 關掉指針va_list
va_end( vlArgs );
// 當編寫非控制檯程序時輸出調試信息(屬於windows API)
OutputDebugString( strBuffer );
}
OutputDebug( L"Param Error %d %d %d %d\n", nMax, nMin, nChange, nMinFree);
OutputDebug( L"No Param\n");