2016-10-03 9 views
0

У меня проблема с методами va_, и я не смог найти пример (или не понял, что такое ключевые слова). Проблема заключается в том, что нужно использовать одни и те же аргументы для разных форматов, но компилятор дает мне:c переменные функции, те же аргументы, разные форматы

неправильное использование 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

'va_start (xArgs1, fmt1)' -> 'va_start (xArgs1, eFormat)' – LPs

+0

пытается сейчас. кто проигнорировал это и почему? –

+0

это сработало. напишите это как ответ, и я приму это. –

ответ

2

Аргумент 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); 
} 
+0

'xArgs -> xArgs1' был опечаткой, когда я упростил код :) –

0

Вам нужно позвонить va_end, а затем вызвать va_start второй раз после того, как вы заблокировали блок параметров.

+0

если я va_end xArgs1, разве это также не ясно xArgs2? –

 Смежные вопросы

  • Нет связанных вопросов^_^