vsnprintf 意外崩溃

48 阅读1分钟
  • 在外网的服务器之前一直运行的好好的,突然今天报了一个段错误,堆栈如下图 bug
  • 函数原型是 int vsnprintf (char * s, size_t n, const char * format, va_list arg );
  • 原来是在传入 vsnprintf 时,format里有 %s,但是后面却没有了参数
  • 这样就会导致找不到参数,从而报错
  • 这时你可能会觉得奇怪,format 不是很容易看出问题吗,为什么会到出错了才发现
  • 这是因为在使用时,直接将 format 当成一个字符串,在上层就合成了,此时 format 就有可能会包含 %s,然后传入到 vsnprintf 里,就发生报错了 <_<