How to pass argument got from ellipsis operator to other function? [duplicate]

StackOverflow https://stackoverflow.com/questions/18715895

  •  28-06-2022
  •  | 
  •  

Вопрос

void myPrintf(const char* format, ...) {
    // some code
    va_list vl;
    printf(format, vl);
}

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

In this code I have tried to pass the argument from ellipsis to printf. It compiles but prints garbage instead of 78. What is the right way of doing it?

Это было полезно?

Решение

You need to do the following:

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

Please note the use of vprintf instead of printf.

Другие советы

Two problems:

  1. The first is that you don't initialize vl, use va_start for that. Don't forget to use va_end afterwards.

  2. The other problem is that printf doesn't take a va_list argument. Use vprintf for that.

First Initialize vl

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

Then take the int from it

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top