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);

  }
}

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