NAME
printf, fprintf, sprintf - formatted output conversion
SYNOPSIS
#include <stdio.h>
int printf(format [, arg ] ... )
const char *format;
fprintf(stream, format [, arg ]
... )
FILE *stream;
const char *format;
sprintf(s, format [, arg ] ... )
char *s;
const char *format;
snprintf(s, n, format [, arg ]
... )
char *s;
size_t n;
const char *format;
#include <varargs.h>
vprintf(format, args)
const char *format;
va_list args;
vfprintf(stream, format, args)
FILE *stream;
const char *format;
va_list args;
vsprintf(s, format, args)
char *s;
const char *format;
va_list args;
vsnprintf(s, n, format, args)
char *s;
size_t n;
char *format;
va_list args;
DESCRIPTION
Printf places output on the standard output stream stdout.
Fprintf
places output on the named output stream. Sprintf and
snprintf
place ‘output’ in the string s, followed by the
character ‘ ’.
Snprintf places at most n characters in the string,
including the
‘ ’. Alternate forms, in which the arguments
have already been
captured using the variable-length argument facilities of
varargs(3), are available under the names vprintf, vfprintf,
vsprintf, and vsnprintf.
Each of these functions
converts, formats, and prints its arguments
after the first under control of the first argument. The
first
argument is a character string which contains two types of
objects:
plain characters, which are simply copied to the output
stream, and
conversion specifications, each of which causes conversion
and
printing of the next successive arg printf.
Each conversion specification is
introduced by the character %.
The remainder of the conversion specification includes in
the
following order
Zero or more of the following flags:
a ‘#’ character
specifying that the value should be
converted to an "alternate form". For c, d, i, n,
p,
s, and u, conversions, this option has no effect. For o
conversions, the precision of the number is increased to
force the first character of the output string to a zero.
For x(X) conversion, a non-zero result has the string
0x(0X) prepended to it. For e, E, f, g, and G,
conversions, the result will always contain a decimal
point, even if no digits follow the point (normally, a
decimal point only appears in the results of those
conversions if a digit follows the decimal point). For g
and G conversions, trailing zeros are not removed from
the result as they would otherwise be;
a minus sign ‘-’
which specifies left adjustment of the
converted value in the indicated field;
a ‘+’ character
specifying that there should always be a
sign placed before the number when using signed
conversions;
a space specifying that a blank
should be left before a
positive number during a signed conversion. A
‘+’
overrides a space if both are used;
a zero ‘0’ character
indicating that zero-padding should
be used rather than blank-padding. A ‘-’
overrides a ‘0’
if both are used;
an optional digit string
specifying a field width; if the
converted value has fewer characters than the field width it
will be blank-padded on the left (or right, if the left-
adjustment indicator has been given) to make up the field
width (note that a leading zero is a flag, but an embedded
zero is part of a field width);
an optional period, followed by
an optional digit string
giving a precision which specifies the number of digits to
appear after the decimal point, for e- and f-conversion, or
the maximum number of characters to be printed from a
string;
if the digit string is missing, the precision is treated as
zero;
the character l (ell) specifying
that a following d, i, o, u,
x, or X corresponds to a long integer arg, or that a
following
n corresponds to a pointer to a long integer arg;
the character h specifying that
a following d, i, o, u, x, or
X corresponds to a short integer arg, or that a following n
corresponds to a pointer to a short integer arg;
a character which indicates the
type of conversion to be
applied.
A field width or precision may
be ‘*’ instead of a digit string.
In this case an integer arg supplies the field width or
precision.
The conversion characters and their meanings are
diouxX
The integer arg is converted to signed decimal (d and i),
unsigned octal (o), unsigned decimal (u), or unsigned
hexadecimal (x and X); the letters abcdef are used for x
conversion and the letters ABCDEF are used for X.
eE The double arg is converted
in the style ‘[-]d.ddde_dd’ where
there is one digit before the decimal point and the number
after is equal to the precision specification for the
argument; when the precision is missing, 6 digits are
produced. An uppercase E is used for ‘E’
conversion.
f The double arg is converted to
decimal notation in the style
‘[-]ddd.ddd’ where the number of d’s after
the decimal point
is equal to the precision specification for the argument. If
the precision is missing, 6 digits are given; if the
precision
is explicitly 0, no digits and no decimal point are
printed.
gG The double arg is printed in
style f or in style e (E)
whichever gives full precision in minimum space.
c The int arg is converted to an
unsigned char, and the
resulting character is printed.
s Arg is taken to be a string
(char *) and characters from the
string are printed until a null character or until the
number
of characters indicated by the precision specification is
reached; however if the precision is 0 or missing all
characters up to a null are printed.
p Arg is taken to be a pointer
to void; it is printed in style
x.
n Arg is taken to be a pointer
to an integer (int *) through
which is stored the number of characters written to the
output
stream (or string) so far by this call to printf (or
fprintf,
etc.).
% Print a ‘%’; no argument is converted.
In no case does a non-existent
or small field width cause
truncation of a field; padding takes place only if the
specified
field width exceeds the actual width. Characters generated
by
printf are printed as by putc(3).
RETURN VALUE
The functions all return the number of characters printed,
or -1 if
an error occurred.
EXAMPLES
To print a date and time in the form ‘Sunday, July 3,
10:02’, where
weekday and month are pointers to null-terminated
strings:
printf("%s, %s %d,
%02d:%02d", weekday, month, day, hour,
min);
To print pi to 5 decimals:
printf("pi = %.5f", 4*atan(1.0));
SEE ALSO
putc(3), scanf(3)
BUGS
The functions still supports %D, %O, and %U. Do not use
these for-
mats, as they will be disappearing soon.