盡量使用vsnprintf,否則可能會帶來buffer拷貝的時候更改未知越界記憶體的問題,比如目前的buffer size為10,但如果需要拷貝的資料為15,則buffer[10]-buffer[14]的記憶體位置會被填充,但這塊記憶體資料可能是給别的用途的,如下執行個體:
struct s
{
char buffer[10];
int other;
}
這時候調用vsprint,并且傳入的參數大于10個位元組的話,就會填充other的資料,這是不允許的
另:調用這個函數需要 stdarg.h 頭檔案.
另: 有時候需要通過一個開關來控制所有的輸出,則可用下列方法
void printFunction(const char *fmt,...)
{
va_list args;
bool flag = FALSE;
#if defined (_DEBUG_)
flag = TRUE;
#endif
if (flag)
{
va_start (args, fmt);
int count = vprintf (fmt, args);
va_end (args);
}
}