您的位置:首页 > 其它

vsprintf and vsnprintf

2014-04-18 09:26 357 查看
尽量使用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);

  }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sprintf vsprintf