This section describes how to call printf
and related functions.
Prototypes for these functions are in the header file `stdio.h'.
Because these functions take a variable number of arguments, you
must declare prototypes for them before using them. Of course,
the easiest way to make sure you have all the right prototypes is to
just include `stdio.h'.
printf
function prints the optional arguments under the
control of the template string template to the stream
stdout
. It returns the number of characters printed, or a
negative value if there was an output error.
printf
, except that the output is
written to the stream stream instead of stdout
.
printf
, except that the output is stored in the character
array s instead of written to a stream. A null character is written
to mark the end of the string.
The sprintf
function returns the number of characters stored in
the array s, not including the terminating null character.
The behavior of this function is undefined if copying takes place between objects that overlap--for example, if s is also given as an argument to be printed under control of the `%s' conversion. See section Copying and Concatenation.
Warning: The sprintf
function can be dangerous
because it can potentially output more characters than can fit in the
allocation size of the string s. Remember that the field width
given in a conversion specification is only a minimum value.
To avoid this problem, you can use snprintf
or asprintf
,
described below.
snprintf
function is similar to sprintf
, except that
the size argument specifies the maximum number of characters to
produce. The trailing null character is counted towards this limit, so
you should allocate at least size characters for the string s.
The return value is the number of characters which would be generated for the given input, excluding the trailing null. If this value is greater or equal to size, not all characters from the result have been stored in s. You should try again with a bigger output string. Here is an example of doing this:
/* Construct a message describing the value of a variable whose name is name and whose value is value. */ char * make_message (char *name, char *value) { /* Guess we need no more than 100 chars of space. */ int size = 100; char *buffer = (char *) xmalloc (size); int nchars; /* Try to print in the allocated space. */ nchars = snprintf (buffer, size, "value of %s is %s", name, value); if (nchars >= size) { /* Reallocate buffer now that we know how much space is needed. */ buffer = (char *) xrealloc (buffer, nchars + 1); /* Try again. */ snprintf (buffer, size, "value of %s is %s", name, value); } /* The last call worked, return the string. */ return buffer; }
In practice, it is often easier just to use asprintf
, below.
Attention: In the GNU C library version 2.0 the return value
is the number of characters stored, not including the terminating null.
If this value equals size - 1
, then there was not enough
space in s for all the output. This change was necessary with
the adoption of snprintf by ISO C9x.
Go to the first, previous, next, last section, table of contents.