Я заметил некоторую проблему с va_start
, когда вызов последовательно выполняется в двух функциях. Основной пример может быть следующим:C++ Standard Args: несколько вызовов для 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
другой функции?
Точно, что мне нужно, спасибо за объяснение. Примите его, если разрешите. –