2013-09-10 2 views
2
void myPrintf(const char* format, ...) { 
    // some code 
    va_list vl; 
    printf(format, vl); 
} 

int main() { 
    myPrintf("%d\n", 78); 
} 

В этом коде я попытался передать аргумент из многоточия в printf. Он компилирует, но печатает мусор вместо 78. Каков правильный способ сделать это?Как передать аргумент от оператора многоточия к другой функции?

+1

потому что 'vl' не является начальным – billz

ответ

5

Вам нужно сделать следующее:

void myPrintf(const char *format, ...) { 
    va_list vl; 
    va_start(vl, format); 
    vprintf(format, vl); 
    va_end(vl); 
} 

Обратите внимание: использование vprintf вместо printf.

1

Две проблемы:

  1. Первое, что вы не инициализировать vl, используйте для этого. Не забудьте использовать va_end.

  2. Другая проблема заключается в том, что printf не принимает аргумент va_list. Для этого используйте vprintf.

+0

Как инициализировать vl Я не знаю количество аргументов. Должен ли я засчитывать знаки% в формате – Ashot

+0

@Ashot См. Мой обновленный ответ и следуйте ссылкам ссылки. –

0

Первый Initialize vl

va_start(vl,1); //No. of arguments =1

Затем возьмите int из него

printf(format, va_arg(vl,int));