vprintf, vfprintf, vsprintf, vsnprintf, vprintf_s, vfprintf_s, vsprintf_s, vsnprintf_s
Defined in header <stdio.h> | ||
---|---|---|
(1) | ||
int vprintf( const char *format, va_list vlist ); | (until C99) | |
int vprintf( const char *restrict format, va_list vlist ); | (since C99) | |
(2) | ||
int vfprintf( FILE *stream, const char *format, va_list vlist ); | (until C99) | |
int vfprintf( FILE *restrict stream, const char *restrict format, va_list vlist ); | (since C99) | |
(3) | ||
int vsprintf( char *buffer, const char *format, va_list vlist ); | (until C99) | |
int vsprintf( char *restrict buffer, const char *restrict format, va_list vlist ); | (since C99) | |
int vsnprintf( char *restrict buffer, size_t bufsz, const char *restrict format, va_list vlist ); | (4) | (since C99) |
int vprintf_s( const char *restrict format, va_list arg); | (5) | (since C11) |
int vfprintf_s( FILE *restrict stream, const char *restrict format, va_list arg); | (6) | (since C11) |
int vsprintf_s( char *restrict buffer, rsize_t bufsz, const char *restrict format, va_list arg); | (7) | (since C11) |
int vsnprintf_s(char *restrict buffer, rsize_t bufsz, const char *restrict format, va_list arg); | (8) | (since C11) |
Loads the data from the locations, defined by vlist
, converts them to character string equivalents and writes the results to a variety of sinks.
stdout
.stream
.buffer
.buffer
. At most buf_size - 1
characters are written. The resulting character string will be terminated with a null character, unless buf_size
is zero. If buf_size
is zero, nothing is written and buffer
may be a null pointer, however the return value (number of bytes that would be written not including the null terminator) is still calculated and returned.- the conversion specifier
%n
is present informat
- any of the arguments corresponding to
%s
is a null pointer -
format
orbuffer
is a null pointer -
bufsz
is zero or greater thanRSIZE_MAX
- encoding errors occur in any of string and character conversion specifiers
- (for
vsprintf_s
only), the string to be stored inbuffer
(including the trailing null)) would be exceedbufsz
vprintf_s
, vfprintf_s
, vsprintf_s
, and vsnprintf_s
are only guaranteed to be available if __STDC_LIB_EXT1__
is defined by the implementation and if the user defines __STDC_WANT_LIB_EXT1__
to the integer constant 1 before including stdio.h
.Parameters
stream | - | output file stream to write to | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
buffer | - | pointer to a character string to write to | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bufsz | - | up to bufsz - 1 characters may be written, plus the null terminator | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
format | - | pointer to a null-terminated character string specifying how to interpret the data. The format string consists of ordinary multibyte characters (except
The following format specifiers are available:
The floating point conversion functions convert infinity to Not-a-number is converted to The conversions Even though The correct conversion specifications for the fixed-width character types ( The memory-writing conversion specifier There is a sequence point after the action of each conversion specifier; this permits storing multiple If a conversion specification is invalid, the behavior is undefined. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
vlist | - | variable argument list containing the data to print |
Return value
buf_size
limit, function returns the total number of characters (not including the terminating null-byte) which would have been written, if the limit was not imposed. buffer
, not counting the null character (which is always written as long as buffer
is not a null pointer and bufsz
is not zero and not greater than RSIZE_MAX
), or zero on runtime constraint violations, and negative value on encoding errorsbuffer
is not a null pointer and bufsz
is not zero and not greater than RSIZE_MAX
), which would have been written to buffer
if bufsz
was ignored, or a negative value if a runtime constraints violation or an encoding error occurredNotes
All these functions invoke va_arg
at least once, the value of arg
is indeterminate after the return. These functions do not invoke va_end
, and it must be done by the caller.
vsnprintf_s
, unlike vsprintf_s
, will truncate the result to fit within the array pointed to by buffer
.
Example
#include <stdio.h> #include <stdarg.h> #include <time.h> void debug_log(const char *fmt, ...) { struct timespec ts; timespec_get(&ts, TIME_UTC); char time_buf[100]; size_t rc = strftime(time_buf, sizeof time_buf, "%D %T", gmtime(&ts.tv_sec)); snprintf(time_buf + rc, sizeof time_buf - rc, ".%06ld UTC", ts.tv_nsec / 1000); va_list args1; va_start(args1, fmt); va_list args2; va_copy(args2, args1); char buf[1+vsnprintf(NULL, 0, fmt, args1)]; va_end(args1); vsnprintf(buf, sizeof buf, fmt, args2); va_end(args2); printf("%s [debug]: %s\n", time_buf, buf); } int main(void) { debug_log("Logging, %d, %d, %d", 1, 2, 3); }
Possible output:
02/20/15 21:58:09.072683 UTC [debug]: Logging, 1, 2, 3
References
- C11 standard (ISO/IEC 9899:2011):
- 7.21.6.8 The vfprintf function (p: 326-327)
- 7.21.6.10 The vprintf function (p: 328)
- 7.21.6.12 The vsnprintf function (p: 329)
- 7.21.6.13 The vsprintf function (p: 329)
- K.3.5.3.8 The vfprintf_s function (p: 597)
- K.3.5.3.10 The vprintf_s function (p: 598-599)
- K.3.5.3.12 The vsnprintf_s function (p: 600)
- K.3.5.3.13 The vsprintf_s function (p: 601)
- C99 standard (ISO/IEC 9899:1999):
- 7.19.6.8 The vfprintf function (p: 292)
- 7.19.6.10 The vprintf function (p: 293)
- 7.19.6.12 The vsnprintf function (p: 294)
- 7.19.6.13 The vsprintf function (p: 295)
- C89/C90 standard (ISO/IEC 9899:1990):
- 4.9.6.7 The vfprintf function
- 4.9.6.8 The vprintf function
- 4.9.6.9 The vsprintf function
See also
(C95)(C95)(C95)(C11)(C11)(C11)(C11) | prints formatted wide character output to stdout , a file streamor a buffer using variable argument list (function) |
(C99)(C11)(C11)(C11)(C11) | prints formatted output to stdout , a file stream or a buffer (function) |
(C99)(C99)(C99)(C11)(C11)(C11) | reads formatted input from stdin , a file stream or a bufferusing variable argument list (function) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/c/io/vfprintf