错误的 vsnprintf 输出
Wrong vsnprintf output
我有以下功能:
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 调用(计算最终字符串大小)returns正确值为 27。但最终字符串是:
"File not found in <**A*> :"
“*”字符在程序启动时随机出现。
此外,该程序在 MinGW 中运行,该问题仅在 linux gcc 中出现。
我的代码有什么问题?
你不能多次使用 ap。考虑使用 va_copy.
我有以下功能:
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 调用(计算最终字符串大小)returns正确值为 27。但最终字符串是:
"File not found in <**A*> :"
“*”字符在程序启动时随机出现。
此外,该程序在 MinGW 中运行,该问题仅在 linux gcc 中出现。
我的代码有什么问题?
你不能多次使用 ap。考虑使用 va_copy.