C++ 可變參數

在函數體中聲明一個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");

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章