c可变参数函数,相同参数,不同格式

时间:2016-10-03 08:48:43

标签: c variadic-functions

我遇到了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);
}

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

mTitle的参数应该是va_start参数。此外,eFormat声明为va_list,但您使用xArgs,这会导致语法错误。

xArgs1

答案 1 :(得分:0)

您需要调用va_end,然后在关闭参数块后再次调用va_start。