Trouble Wrapping Printf in C Program
c, printf
Solution
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
You need to call `vprintf` instead of `printf`. The `v*printf` functions understand `va_List` arguments. I'm surprised you didn't get a warning.
Problem
I'm trying to wrap printf in a C program (well, actually _snprintf but this example is simpler) and am having trouble getting the variable argument stuff to work. Here is my code: ``` #include <stdio.h> #include <stdarg.h> void works(void) { printf("%d\n", 100); } void wrap_printf(const char *fmt, ...) { va_list args; va_start(args, fmt); printf(fmt, args); va_end(args); } void broken(void) { wrap_printf("%d\n", 100); } int main(void) { works(); broken(); return 0; } ``` Here is my output: ``` 100 3668388 ``` The args variable looks good after the call to `va_start` in my code, but as soon as I step into the C runtime code and they call `va_start` the value looks bad. Any thoughts as to what I might be doing wrong?