我遇到了va_
方法的问题,而且我找不到一个例子(或者没有弄清楚关键字是什么)。问题是,我需要为不同的格式使用相同的args,但编译器给了我:
错误使用va_start
错误。我尝试的代码是这样的:
void vSaveNecessaryFields(EnumA eFormat, ...)
{
va_list xArgs, xArgs2;
const char *fmt1 = NULL, *fmt2 = NULL;
char caString[100] = {0};
fmt1 = cpGetDbFormat(eFormat);
fmt2 = cpGetPrinterFormat(eFormat);
va_start(xArgs1, fmt1);
va_copy(xArgs2, xArgs1);
vsnprintf(caString, sizeof(caString), fmt1, xArgs1);
vSaveToDb(caString);
va_start(xArgs2, fmt2);
vsnprintf(caString, sizeof(caString), fmt2, xArgs2);
vPrintFormatted(caString);
va_end(xArgs2);
va_end(xArgs1);
}
我该如何解决这个问题?
答案 0 :(得分:2)
mTitle
的参数应该是va_start
参数。此外,eFormat
声明为va_list
,但您使用xArgs
,这会导致语法错误。
xArgs1
答案 1 :(得分:0)
您需要调用va_end,然后在关闭参数块后再次调用va_start。