gpt4 book ai didi

c++ - vsnprintf 崩溃程序,以防 %s 设置为整数

转载 作者:行者123 更新时间:2023-11-27 23:13:43 28 4
gpt4 key购买 nike

我正在用 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 获取返回值,它返回值,而字符串很好,当遇到同样的问题时,它崩溃了

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

谢谢

最佳答案

  1. %s 期望得到一个 char*。当您传入 10 时,它会将其视为一个地址,然后转到那里并终止您的程序。
  2. 如果你想打印整数,使用 %d。有关详细信息,请参阅 http://pubs.opengroup.org/onlinepubs/009695399/functions/printf.html
  3. 在 C++ 中,最好使用其他方法来完成您需要的,例如 std::stringstream

关于c++ - vsnprintf 崩溃程序,以防 %s 设置为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18128731/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com