#include <stdarg.h> #include <lcio.h> int vsnprintf(char *dest, size_t maxlen, const char *format, va_list arg);
vsnprintf
function is equivalent to the snprintf
function,
except that arg
replaces the variable-argument list. arg
must have been initialized by the va_start
macro and possibly
va_arg
calls. The vsnprintf
function does not invoke the
va_end
macro. See va_arg
, va_end
, and va_start
for
details on varying-length argument-list functions. The vsnprintf
function
writes formatted output to the area addressed by dest
under control of
the string addressed by format
until either all format conversion
specifications have been satisfied or until maxlen
characters have been
written. If the maxlen
limit is reached
maxlen
vsnprintf
function returns a negative value whose magnitude is equal to
the value of maxlen
.
In all other respects, vsnprintf
behaves identically to vsprintf
.
The string pointed to by format is in the same form as that used by
fprintf
. Refer to the fprintf
function description for detailed
information concerning the format conversions.
vsnprintf
function returns an integer value that equals in magnitude
the number of characters written to the area addressed by dest
. If the
value returned is negative, then either the maxlen
character limit was
reached or some other error, such as an invalid format specification, has
occurred. The one exception to this is if an error occurs before any characters
are stored, vsnprintf
returns INT_MIN (-2**31).
maxlen
value is 0, no characters are written, and vsnprintf
returns 0. If the value is greater than INT_MAX
, then vsnprintf
behaves identically to vsprintf
in that no limit checking is done on the
number of characters written to the output area. No warnings concerning length
errors are produced by vsnprintf
, and the only indication that the output
may have been truncated or is incomplete is a negative return value.
vsnprintf
function calls malloc
to obtain a temporary spill buffer equal in size
to the limit specified. If insufficient storage is available, vsnprintf
attempts to process the format specifications with an internal 512-byte spill
buffer. In this case, individual conversion specifiers that produce more than
512 characters may fail, and vsnprintf
processing can terminate
prematurely.
#include <stdlib.h> #include <lcio.h> #include <stdarg.h> static void format_msg(char *, size_t, char *, ...); #define NOTE 0 #define WARNING 1 #define MESSAGE_LEN 80 static const char *msgs[] = { "Msgno%04d This is message number zero", "Msgno%04d This message requires a %s" }; main() { char msgbuf(|84|); format_msg(msgbuf, MESSAGE_LEN, msgs[NOTE], NOTE); printf("The formatted message is: "%s" n", msgbuf); format_msg(msgbuf, MESSAGE_LEN, msg[WARNING], WARNING, "a replacement string"); printf("The formatted message is: "%s" n", msgbuf); return; } static void format_msg(char *buf, size_t limit, char *format,...) { va_list args; va_start(args, format), vsnprintf(buf, limit, format, args); va_end(args); }
snprintf
, va_start
, vsprintf
Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.