错误的vsnprintf输出

gal*_*tte 4 c++ printf variadic-functions

我有以下功能:

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()));
}
Run Code Online (Sandbox Code Playgroud)

我打电话的时候

raiseError("File not found in <%s> : <%s>", "a", "b" );
Run Code Online (Sandbox Code Playgroud)

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

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

程序启动时'*'字符是随机的.

此外,该程序在MinGW中工作,问题只出现在linux gcc上.

我的代码有什么问题?

Ano*_*ail 5

你不能多次使用ap.考虑使用va_copy.