### 5.70 `vfprintf`, `vprintf`, `vsprintf`, `vsnprintf`, `vasprintf`, `vasnprintf`—format argument list ¶

Synopsis

    #include <stdio.h>
    #include <stdarg.h>
    int vprintf(const char *fmt, va_list list);
    int vfprintf(FILE *fp, const char *fmt, va_list list);
    int vsprintf(char *str, const char *fmt, va_list list);
    int vsnprintf(char *str, size_t size, const char *fmt,
        va_list list);
    int vasprintf(char **strp, const char *fmt, va_list list);
    char *vasnprintf(char *str, size_t *size, const char *fmt,
        va_list list);

    int _vprintf_r(struct _reent *reent, const char *fmt,
        va_list list);
    int _vfprintf_r(struct _reent *reent, FILE *fp,
        const char *fmt, va_list list);
    int _vsprintf_r(struct _reent *reent, char *str,
        const char *fmt, va_list list);
    int _vasprintf_r(struct _reent *reent, char **str,
        const char *fmt, va_list list);
    int _vsnprintf_r(struct _reent *reent, char *str,
        size_t size, const char *fmt, va_list list);
    char *_vasnprintf_r(struct _reent *reent, char *str,
        size_t *size, const char *fmt, va_list list);

Description
`vprintf`, `vfprintf`, `vasprintf`, `vsprintf`, `vsnprintf`, and `vasnprintf` are (respectively) variants of `printf`, `fprintf`, `asprintf`, `sprintf`, `snprintf`, and `asnprintf`. They differ only in allowing their caller to pass the variable argument list as a `va_list` object (initialized by `va_start`) rather than directly accepting a variable number of arguments. The caller is responsible for calling `va_end`.

`_vprintf_r`, `_vfprintf_r`, `_vasprintf_r`, `_vsprintf_r`, `_vsnprintf_r`, and `_vasnprintf_r` are reentrant versions of the above.

Returns
The return values are consistent with the corresponding functions.

Portability
ANSI C requires `vprintf`, `vfprintf`, `vsprintf`, and `vsnprintf`. The remaining functions are newlib extensions.

Supporting OS subroutines required: `close`, `fstat`, `isatty`, `lseek`, `read`, `sbrk`, `write`.