Index of Section 3 Manual Pages
| Interix / SUA | vsprintf.3 | Interix / SUA |
vsprintf(3) vsprintf(3)
printf()
NAME
printf(), fprintf(), sprintf(), snprintf(), vprintf(), vfprintf(),
vsprintf(), vsnprintf() - formatted output conversion
SYNOPSIS
#include
int printf (const char *format ...)
int fprintf (FILE *stream, const char *format ...)
int sprintf (char *str, const char *format ...)
int snprintf (char *str, size_t size, const char *format ...)
#include
int vprintf (const char *format, va_list ap)
int vfprintf (FILE *stream, const char *format, va_list ap)
int vsprintf (char *str, const char *format, va_list ap)
int vsnprintf (char *str, size_t size, const char *format, va_list ap)
DESCRIPTION
The functions in the printf(3) family produce output according to a
format, as described below. Printf(3) and vprintf(3) write output to
stdout, the standard output stream; fprintf(3) and vfprintf(3) write
output to the specified output stream; sprintf(3), snprintf(3),
vsprintf(3), and vsnprintf(3) write to the character string str.
These functions return the number of characters printed (not including the
trailing \0 used to end output to strings). Sprintf(3) and vsprintf(3)
effectively assume an infinite size.
Snprintf(3) and vsnprintf(3) write at most size-1 of the characters
printed into the output string (the size'th character then get the
terminating \0); if the return value is greater than or equal to the size,
the string was too short and some of the printed characters were
discarded. Sprintf(3) and vsprintf(3) effectively assume an infinite size.
The output is written according to the format string that specifies how
subsequent arguments (or arguments accessed through the variable-length
argument facilities of ) are converted for output.
The format string contains zero or more directives; a directive is either
an ordinary character (any character but %), which is copied unchanged to
the output stream. The format string is composed of zero or more
directives: ordinary characters (not %), which are copied unchanged to the
output stream; or a conversion specification. A conversion specification
fetches zero or more subsequent arguments. Each conversion specification
is introduced by the character %. The arguments must correspond properly
(after type promotion) with the conversion specifier. The syntax of a
conversion specifier is:
%[#][0][-][ ][+][width][.[precision]][h|l|L|q]type
Only the type is required.
In sequence, these flags are:
#
A # character specifies that the value should be converted to an
"alternate form". This affects only o, x, X, e, E, f, g, and G
conversions.
* For o conversions, the precision of the number is increased to
force the first character of the output string to a zero (except
if a zero value is printed with an explicit precision of zero).
* For x and X conversions, a non-zero result has the string 0x (or
0X for X conversions) prepended to it.
* For e, E, f, conversions, the result will always contain a
decimal point, even if no digits follow it (normally, a decimal
point appears in the results of those conversions only if a
digit follows).
* For g and G conversions, the result will always contain a
decimal point, even if no digits follow it, and trailing zeros
are not removed from the result as they would otherwise be.
0
A zero character specifies that padding on the left is done with zeros
rather than blanks. For all conversions except n, the converted value
is padded on the left with zeros rather than blanks. If a precision is
given with a numeric conversion (d i, o, u, i, x, and X), the 0 flag
is ignored.
-
A negative field width flag - indicates the converted value is to be
left adjusted on the field boundary. Except for n conversions, the
converted value is padded on the right with blanks, rather than on the
left with blanks or zeros. A - overrides a 0 if both are given.
A space specifies that a blank should be left before a positive number
produced by a signed conversion (d e, E, f, g, G, or i).
+
A + character specifies that a sign always be placed before a number
produced by a signed conversion. A + overrides a space if both are
used.
width
This optional decimal digit string specifies a minimum field width. If
the converted value has fewer characters than the field width, it will
be padded with spaces on the left (or right, if the left-adjustment
flag has been given) to fill out the field width.
A field width may be indicated by an asterisk * instead of a digit
string. In this case, an int argument supplies the field width. A
negative field width is treated as a left adjustment flag followed by
a positive field width.
precision
An optional precision, in the form of a period . followed by an
optional digit string. If the digit string is omitted, the precision
is taken as zero. This gives the minimum number of digits to appear
for d, i, o, u, x, and X conversions, the number of digits to appear
after the decimal-point for e, E, and f conversions, the maximum
number of significant digits for g and G conversions, or the maximum
number of characters to be printed from a string for s conversions.
A precision may be indicated by an asterisk * instead of a digit
string. In this case, an int argument supplies the precision. A
negative precision is treated as though it were missing.
h|l|L|q
One of the optional characters h, l (ell), L, or q, depending on the
conversion type The values are:
h
a following d, i, o, u, x, or X conversion corresponds to a short
int or unsigned short int argument, or that a following n
conversion corresponds to a pointer to a short int argument.
l
(ell) A following d, i, o, u, x, or X conversion applies to a
pointer to a long int or unsigned long int argument, or that a
following n conversion corresponds to a pointer to a long int
argument.
L
A following e, E, f, g, or G conversion corresponds to a long
double argument.
q
A following d, i, o, u, x, or X conversion applies to a pointer to
a quad_t or u_quad_t (unsigned long int) argument, or that a
following n conversion corresponds to a pointer to a quad_t
argument. The types quad_t (extended precisions) and u_quad_t
(unsigned extended precision) are defined in . Two l
(ell) conversion option characters are equivalent to a single q.
type
A character that specifies the type of conversion to be applied.
Type Argument Conversion
% Prints literal % character
c int Prints a character
C wchar_t Prints a wide-character code; equivalent to
lc
d int Signed decimal
D long int Signed decimal; equivalent to ld
e double Decimal in form [-]d.ddde[mdd]
E double Decimal in form [-]d.dddE[mdd]
f double Decimal in form [-]ddd.ddd
g double The more compact of f or e format
i int Signed decimal
n int * Number of character printed so far stored in
argument
o int Unsigned octal
O long int Unsigned octal; equivalent to lo
p void * Hexadecimal value of pointer, as for %#x or
%#lx
s char * String
S wchar_t * Wide-character string; equivalent to ls
u int Unsigned decimal
U long int Unsigned decimal; equivalent to lu
X int Unsigned hexadecimal using letters ABCDEF
x int Unsigned hexadecimal using letters abcdef
Note:
f
The number of digits after the decimal-point character is equal to the
precision specification. If the precision is missing, it is taken as
6; if the precision is explicitly zero, no decimal-point character
appears. If a decimal point appears, at least one digit appears before
it.
g
The precision specifies the number of significant digits. If the
precision is missing, 6 digits are given; if the precision is zero, it
is treated as 1. Style e is used if the exponent from its conversion
is less than -4 or greater than or equal to the precision. Trailing
zeros are removed from the fractional part of the result; a decimal
point appears only if it is followed by at least one digit.
s
The char * argument is expected to be a pointer to an array of
character type (pointer to a string). Characters from the array are
written up to (but not including) a terminating NUL character; if a
precision is specified, no more than the number specified are written.
If a precision is given, no null character need be present; if the
precision is not specified, or is greater than the size of the array,
the array must contain a terminating NUL character.
n
The number of characters written so far is stored into the integer
indicated by the int * (or variant) pointer argument. No argument is
converted.
%
A % is written. No argument is converted. The complete conversion
specification is %%.
In no case does a nonexistent or small field width cause truncation of a
field; if the result of a conversion is wider than the field width, the
field is expanded to contain the conversion result.
EXAMPLES
To print a date and time in the form `Sunday, July 3, 10:02', where
weekday and month are pointers to strings:
#include
fprintf(stdout, "%s, %s %d, %.2d:%.2d\n",
weekday, month, day, hour, min);
To print to five decimal places:
#include
#include
fprintf(stdout, "pi = %.5f\n", 4 * atan(1.0));
To allocate a 128-byte string and print into it:
#include
#include
#include
char *nefmt(const char *fmt, ...)
{
char *p;
va_list ap;
if ((p = malloc(128)) == NULL)
return (NULL);
va_start(ap, fmt);
(void) vsnprintf(p, 128, fmt, ap);
va_end(ap);
return (p);
}
SEE ALSO
printf(1)
scanf(3)
USAGE NOTES
All of these functions are thread safe.
None of these functions are async-signal safe.