vsnprintf程序在%s设置为整数的情况下崩溃
vsnprintf crash program in case %s is set with an integer
我正在用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确实有throw,所以它无论如何都会崩溃。试图从vsnprintf获取返回值,它返回值,而字符串很好,当达到相同的问题时,它会崩溃
我能解决这个问题吗?
感谢
- %s期望得到一个char*。当你通过10时,它会把它当作一个地址,然后去那里并终止你的程序
- 如果要打印整数,请使用%d。有关更多信息,请查看http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html
- 在C++中,最好使用其他方法来完成您需要的内容,如std::stringstream
您可以避免使用printf和friends,而是使用std::stringstream
或boost::format
好吧,当传递给printf()
和家族时,%s
格式化程序在这里作为-最终const-char *
指针的占位符。
发生的情况是,您的整数被读取为指针,并且内存地址(在您的示例中为10
)可能无效。
相关文章:
- 在 c++ 中连接字符串和整数,以便在 C++ 11 不支持计算机的情况下读取多个文件
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 如何在不违反C++核心准则的情况下将整数强制转换为void*
- 整数指针与字符指针的情况下悬空指针
- 如何对 int 变量应用验证,使其仅接受整数数据,并且在任何其他数据的情况下不会出错?
- 如何在没有整数溢出的情况下找到n%(k*k)
- 如何在不中断剩余代码的情况下仅C++中输入整数
- 如何避免字符串到整数转换情况下的无效参数异常
- 如何在给定任意数量的整数的情况下创建一个唯一键?并使用该键存储,然后从地图中查找
- 如何在不使用对象的情况下连接字符串、整数和浮点数
- 默认情况下,决定整数类型是唱歌或无符号的类型
- 如何在不使用循环的情况下将低字节和高字节的字符数组转换为它们的整数数组
- g++ 在不使用 -Wconvert 的情况下将 double/float 转换为无符号整数时发出警告
- 在给定变量为有限整数的情况下,如何让C++程序求解输入值的变量
- 如果我们在需要整数的开关情况下输入字符会发生什么
- 在不违反约束的情况下生成整数数组
- 如何在没有多余整数的情况下填充整数之间的分隔符
- vsnprintf程序在%s设置为整数的情况下崩溃
- C++:如何在不使用任何内置函数的情况下将字符串转换为整数
- 如果打印后输入整数,则C++分段故障,但其他情况下可以