我注意到va_start
在两个函数中连续调用时存在一些问题。一个基本示例如下:
std::string format(std::string fmt, ...)
{
char buf[2000];
va_list aq;
va_start(aq, fmt);
vsprintf(buf, fmt.c_str(), aq);
va_end(aq);
return std::string(buf);
}
void error(std::string fmt, ...)
{
va_list ap;
va_start(ap, fmt);
printf("%s", format(fmt, ap).c_str());
va_end(ap);
exit(1);
}
int main()
{
int x = 10;
printf("%s", format("Test %d\n", x).c_str());
error("Test %d\n", x);
}
生产
Test 10
Test -1078340156
似乎,在使用该error
函数时,参数已损坏。
将 传递va_list
给另一个函数的正确方法是什么?