vsnprintf输出错误

Wrong vsnprintf output

本文关键字:错误 输出 vsnprintf      更新时间:2023-10-16

我有以下功能:

void raiseError(const char *msg, ...)
{
    va_list ap;
    va_start(ap, msg); // use variable arg list
    int size = vsnprintf(nullptr, 0, msg, ap);
    std::vector<char> s(size+1, 0);
    vsnprintf(s.data(), size, msg, ap);
    va_end(ap);
    errorString = std::string(s.data()));
}

当我呼叫时

raiseError("File not found in <%s> : <%s>", "a", "b" );

第一个vsnprintf调用(计算最终字符串大小)返回正确的值27。但最后一个字符串是:

"在<**A*>中找不到文件:"

其中"*"字符在程序启动过程中是随机的。

此外,该程序在MinGW中运行,该问题仅在linux gcc中出现。

我的代码出了什么问题?

不能多次使用ap。研究使用va_copy。