我正在用C++写一个记录器,为了简化输入行,我使用vsnprintf函数来构建日志行

void CLogger::RegManLog(const LogLevel & logLevelMask, char * Format, ...)
...
...
va_start(marker_, Format);
vsnprintf(buffer_ ,MaxLogBuffSize , Format, marker_)
va_end(marker_);
printer_ += buffer_;
...
...

每件事都很有效,直到我不小心将数字输入字符串中

整数检验= 10;
例如:“现在我将显示字符串%s”,测试

试图添加“try and catch”,但是我认为vsnprintf确实抛出了异常,因此无论如何都会崩溃。
试图从vsnprintf获取返回值,它返回值,虽然字符串还可以,但是在遇到相同问题时崩溃

我有什么想法可以解决这个问题吗?

谢谢

最佳答案

  • %s希望得到一个char *。当您传入10时,它将其视为一个地址,转到那里并杀死您的程序。
  • 如果要打印整数,请使用%d。有关更多信息,请参见http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html
  • 在C++中,最好使用其他方法来完成所需的操作,例如std::stringstream
  • 10-08 11:07