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

塔哈(Taha)厚

我在使用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);
}

我怎么解决这个问题?

chqrlie

的自变量va_start应为自eFormat变量。此外,将va_list声明为,xArgs但您使用xArgs1会导致语法错误。

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(xArgs, eFormat);
    vsnprintf(caString, sizeof(caString), fmt1, xArgs);
    va_end(xArgs);

    vSaveToDb(caString);

    va_start(xArgs2, eFormat);
    vsnprintf(caString, sizeof(caString), fmt2, xArgs2);
    vPrintFormatted(caString);
    va_end(xArgs2);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章