【发布时间】:2012-06-15 11:31:51
【问题描述】:
我注意到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 传递给另一个函数的正确方法是什么?
【问题讨论】: