#include <stdarg.h> #include <stdio.h> int vsprintf(char *s, const char *format, va_list arg);
vsprintf
is equivalent to sprintf
with
arg
replacing the variable-argument list.
arg
has been initialized by the va_start
macro and possibly va_arg
calls. vsprintf
does not invoke the
va_end
macro. See va_arg
, va_end
, and va_start
for
details on varying-length argument-list functions.
vsprintf
returns the number of characters written in the array, not
counting the terminating-null character.
#include <stdio.h> #include <stdarg.h> #include <string.h> static void format_msg(char *, int, int, ...); #define NOTE 0 #define WARNING 1 main() { char msgbuf[100]; format_msg(msgbuf, NOTE, 0); printf("The formatted message is: "%s" n", msgbuf); format_msg(msgbuf, WARNING,1, "a replacement string"); printf("The formatted message is: "%s" n", msgbuf); return; } static const char *msgs[] = { "This is message number zero", "This message requires %s" }; static const char *levels[] = { "NOTE: ", "WARNING: " }; static void format_msg(char *buf, int msgno, int level, ...) { va_list args; va_start(args, level); /* Copy in the message prefix. Format the */ /* remainder of the message with vsprintf(). */ strcpy(buf, levels[level]); vsprintf(buf + strlen(levels[level]),msgs[msgno], args); va_end(args); }
sprintf
, va_start
, vformat
, vsnprintf
Copyright (c) 1998 SAS Institute Inc. Cary, NC, USA. All rights reserved.