我正在用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获取返回值,它返回值,而字符串很好,当达到相同的问题时,它崩溃
我能解决这个问题吗?
感谢
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以避免使用printf和朋友,而是使用std::stringstream
或boost::format
答案 2 :(得分:1)
好吧,当传递给printf()
和系列时,%s
格式化程序在这里作为-eventually const- char *
指针的占位符。
发生的事情是,您的整数被读取为指针,并且内存地址(示例中为10
)可能无效。