天天看點

vsprintf and vsnprintf

盡量使用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);

  }

}