How to pass variable number of arguments to printf/sprintf


I have a class that holds an "error" function that will format some text. I want to accept a variable number of arguments and then format them using printf.


class MyClass
    void Error(const char* format, ...);

The Error method should take in the parameters, call printf/sprintf to format it and then do something with it. I don't want to write all the formatting myself so it makes sense to try and figure out how to use the existing formatting.

3/31/2011 12:31:56 PM

Accepted Answer

void Error(const char* format, ...)
    va_list argptr;
    va_start(argptr, format);
    vfprintf(stderr, format, argptr);

If you want to manipulate the string before you display it and really do need it stored in a buffer first, use vsnprintf instead of vsprintf. vsnprintf will prevent an accidental buffer overflow error.

3/21/2019 12:08:55 AM

have a look at vsnprintf as this will do what ya want

you will have to init the va_list arg array first, then call it.

Example from that link: /* vsprintf example */

#include <stdio.h>
#include <stdarg.h>

void Error (char * format, ...)
  char buffer[256];
  va_list args;
  va_start (args, format);
  vsnprintf (buffer, 255, format, args);

  //do something with the error

  va_end (args);

Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow