vprintf(3C) Standard C Library Functions vprintf(3C)
vprintf, vfprintf, vsprintf, vsnprintf - print formatted output of a
variable argument list
#include <stdio.h>
#include <stdarg.h>
int vprintf(const char *format, va_list ap);
int vfprintf(FILE *stream, const char *format, va_list ap);
int vsprintf(char *s, const char *format, va_list ap);
int vsnprintf(char *s, size_t n, const char *format, va_list ap);
The vprintf(), vfprintf(), vsprintf() and vsnprintf() functions are the
same as printf(), fprintf(), sprintf(), and snprintf(), respectively,
except that instead of being called with a variable number of argu‐
ments, they are called with an argument list as defined in the
<stdarg.h> header. See printf(3C) and stdarg(3HEAD).
The <stdarg.h> header defines the type va_list and a set of macros for
advancing through a list of arguments whose number and types may vary.
The argument ap to the vprint family of functions is of type va_list.
This argument is used with the <stdarg.h> header file macros
va_start(), va_arg(), and va_end() (see stdarg(3HEAD)). The EXAMPLES
section below demonstrates the use of va_start() and va_end() with
vprintf().
The macro va_alist() is used as the parameter list in a function defi‐
nition, as in the function called error() in the example below. The
macro va_start(ap, parmN), where ap is of type va_list and parmN is
the rightmost parameter (just before ...), must be called before any
attempt to traverse and access unnamed arguments is made. The
va_end(ap) macro must be invoked when all desired arguments have been
accessed. The argument list in ap can be traversed again if va_start()
is called again after va_end(). In the example below, the error() argu‐
ments (arg1, arg2, ...) are passed to vfprintf() in the argument ap.
The vprintf(), vfprintf(), and vsprintf() functions return the number
of characters transmitted (not including \0 in the case of vsprintf()).
The vsnprintf() function returns the number of characters formatted,
that is, the number of characters that would have been written to the
buffer if it were large enough. Each function returns a negative value
if an output error was encountered.
The vprintf() and vfprintf() functions will fail if either the stream
is unbuffered or the stream’s buffer needed to be flushed and:
EFBIG The file is a regular file and an attempt was made to write at or
beyond the offset maximum.
Example 1: Using vprintf() to write an error routine.
The following demonstrates how vfprintf() could be used to write an
error routine:
#include <stdio.h>
#include <stdarg.h>
. . .
/*
* error should be called like
* error(function_name, format, arg1, ...);
*/
void error(char *function_name, char *format, ...)
{
va_list ap;
va_start(ap, format);
/* print out name of function causing error */
(void) fprintf(stderr, "ERR in %s: ", function_name);
/* print out remainder of message */
(void) vfprintf(stderr, format, ap);
va_end(ap);
(void) abort;
}
See attributes(5) for descriptions of the following attributes:
+-----------------------------+-----------------------------+
| ATTRIBUTE TYPE | ATTRIBUTE VALUE |
+-----------------------------+-----------------------------+
|MT-Level |MT-Safe |
+-----------------------------+-----------------------------+
printf(3C), attributes(5), stdarg(3HEAD)
SunOS 5.9 1 Feb 2001 vprintf(3C)