错误的vsnprintf输出

时间:2015-10-29 16:41:17

标签: 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()));
}

当我打电话

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

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

“&lt; ** A *&gt;:”

中找不到文件

“*”字符在程序启动时是随机的。

此外,该程序在MinGW中运行,只有linux gcc才能看到这个问题。

我的代码有什么问题?

1 个答案:

答案 0 :(得分:5)

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