C Library Functions -vsprintf()

C Standard Library - <stdio.h>

Description

C Library Functionsint vsprintf(char *str, const char *format, va_list arg)Send formatted output to a string using an argument list.

Declaration

Below is the declaration of the vsprintf() function.

int vsprintf(char *str, const char *format, va_list arg)

Parameter

  • str-- This is a pointer to a character array that stores a C string.
  • format-- This is a string containing the text to be written to the string str. It can contain embedded format tags, which can be replaced by the values specified in subsequent additional arguments and formatted as required. The format tag properties are: %[flags][width][.precision][length]specifierThe detailed explanation is as follows:
specifierOutput
cCharacter
d or iSigned decimal integer
eScientific notation using the e character (mantissa and exponent)
EScientific notation using the E character (mantissa and exponent)
fDecimal floating point
gAutomatically choose the appropriate representation from %e or %f
GAutomatically choose the appropriate representation from %E or %f
oSigned octal
sString of characters
uUnsigned decimal integer
xUnsigned hexadecimal integer
XUnsigned hexadecimal integer (uppercase letters)
pPointer address
nNo output
%Character

flagsDescription
-Left-justify within the given field width; default is right-justified (see the width sub-specifier).
+Forces a plus or minus sign (+ or -) to be displayed before the result, i.e., a + sign is displayed before positive numbers. By default, only negative numbers are preceded by a - sign.
(space)If no sign is written, insert a space before the value.
#When used with the o, x, or X specifiers, a non-zero value is preceded by 0, 0x, or 0X, respectively.
When used with e, E, and f, it forces the output to contain a decimal point, even if no digits follow. By default, if no digits follow, the decimal point is not displayed.
When used with g or G, the result is the same as when using e or E, but trailing zeros are not removed.
0Place zeros (0) to the left of the number for the specified padding, instead of spaces (see the width sub-specifier).

widthDescription
(number)The minimum number of characters to be output. If the output value is shorter than this number, the result is padded with spaces. If the output value is longer than this number, the result will not be truncated.
*The width is not specified in the format string, but is provided as an additional integer value argument placed before the argument to be formatted.

.precisionDescription
.numberFor integer specifiers (d, i, o, u, x, X): precision specifies the minimum number of digits to be written. If the written value is shorter than this number, the result is padded with leading zeros. If the written value is longer than this number, the result will not be truncated. A precision of 0 means that no characters are written.
For e, E, and f specifiers: the number of digits to be output after the decimal point.
For g and G specifiers: the maximum number of significant digits to be output.
For s: the maximum number of characters to be output. By default, all characters are output until the terminating null character is encountered.
For the c type: has no effect.
When no precision is specified, the default is 1. If specified without an explicit value, it is assumed to be 0.
.*The precision is not specified in the format string, but is provided as an additional integer value argument placed before the argument to be formatted.

lengthDescription
hThe argument is interpreted as a short int or unsigned short int (only applicable to integer specifiers: i, d, o, u, x, and X).
lThe argument is interpreted as a long int or unsigned long int, applicable to integer specifiers (i, d, o, u, x, and X) and to specifiers c (denoting a wide character) and s (denoting a wide character string).
LThe argument is interpreted as a long double (only applicable to floating-point specifiers: e, E, f, g, and G).
  • arg-- An object representing a variable argument list. This should be initialized by the va_start macro defined in <stdarg>.

Return Value

If successful, return the total number of characters written; otherwise, return a negative number.

Example

The following example demonstrates the use of the vsprintf() function.

#include <stdio.h>
#include <stdarg.h>

char buffer[80];
int vspfunc(char *format, ...)
{
   va_list aptr;
   int ret;

   va_start(aptr, format);
   ret = vsprintf(buffer, format, aptr);
   va_end(aptr);

   return(ret);
}

int main()
{
   int i = 5;
   float f = 27.0;
   char str[50] = "example.com";

   vspfunc("%d %f %s", i, f, str);
   printf("%s\n", buffer);
   
   return(0);
}

Let us compile and run the above program, which will produce the following result:

5 27.000000 example.com

C Standard Library - <stdio.h>

other extensions