1 .\" Copyright (c) 1990, 1991, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" This code is derived from software contributed to Berkeley by
5 .\" Chris Torek and the American National Standards Committee X3,
6 .\" on Information Processing Systems.
8 .\" Redistribution and use in source and binary forms, with or without
9 .\" modification, are permitted provided that the following conditions
11 .\" 1. Redistributions of source code must retain the above copyright
12 .\" notice, this list of conditions and the following disclaimer.
13 .\" 2. Redistributions in binary form must reproduce the above copyright
14 .\" notice, this list of conditions and the following disclaimer in the
15 .\" documentation and/or other materials provided with the distribution.
16 .\" 3. All advertising materials mentioning features or use of this software
17 .\" must display the following acknowledgement:
18 .\" This product includes software developed by the University of
19 .\" California, Berkeley and its contributors.
20 .\" 4. Neither the name of the University nor the names of its contributors
21 .\" may be used to endorse or promote products derived from this software
22 .\" without specific prior written permission.
24 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
25 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
28 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 .\" @(#)printf.3 8.1 (Berkeley) 6/4/93
37 .\" $FreeBSD: src/lib/libc/stdio/printf.3,v 1.17.2.10 2001/12/14 18:33:57 ru Exp $
43 .Nm printf , fprintf , sprintf , snprintf , asprintf ,
44 .Nm vprintf , vfprintf, vsprintf , vsnprintf , vasprintf
45 .Nd formatted output conversion
51 .Fn printf "const char *format" ...
53 .Fn fprintf "FILE *stream" "const char *format" ...
55 .Fn sprintf "char *str" "const char *format" ...
57 .Fn snprintf "char *str" "size_t size" "const char *format" ...
59 .Fn asprintf "char **ret" "const char *format" ...
62 .Fn vprintf "const char *format" "va_list ap"
64 .Fn vfprintf "FILE *stream" "const char *format" "va_list ap"
66 .Fn vsprintf "char *str" "const char *format" "va_list ap"
68 .Fn vsnprintf "char *str" "size_t size" "const char *format" "va_list ap"
70 .Fn vasprintf "char **ret" "const char *format" "va_list ap"
74 family of functions produces output according to a
82 the standard output stream;
86 write output to the given output
93 write to the character string
99 dynamically allocate a new string with
102 These functions write the output under the control of a
104 string that specifies how subsequent arguments
105 (or arguments accessed via the variable-length argument facilities of
107 are converted for output.
109 These functions return the number of characters printed
110 (not including the trailing
112 used to end output to strings),
117 which return the number of characters that would have been printed if the
120 (again, not including the final
128 to be a pointer to a buffer sufficiently large to hold the formatted string.
129 This pointer should be passed to
131 to release the allocated storage when it is no longer needed.
132 If sufficient space cannot be allocated,
136 will return -1 and set
147 of the characters printed into the output string
150 character then gets the terminating
152 if the return value is greater than or equal to the
154 argument, the string was too short
155 and some of the printed characters were discarded.
160 effectively assume an infinite
163 The format string is composed of zero or more directives:
168 which are copied unchanged to the output stream;
169 and conversion specifications, each of which results
170 in fetching zero or more subsequent arguments.
171 Each conversion specification is introduced by
175 The arguments must correspond properly (after type promotion)
176 with the conversion specifier.
179 the following appear in sequence:
182 An optional field, consisting of a decimal digit string followed by a
184 specifying the next argument to access.
185 If this field is not provided, the argument following the last
186 argument accessed will be used.
187 Arguments are numbered starting at
189 If unaccessed arguments in the format string are interspersed with ones that
190 are accessed the results will be indeterminate.
192 Zero or more of the following flags:
198 specifying that the value should be converted to an
201 .Cm c , d , i , n , p , s ,
204 conversions, this option has no effect.
207 conversions, the precision of the number is increased to force the first
208 character of the output string to a zero (except if a zero value is printed
209 with an explicit precision of zero).
214 conversions, a non-zero result has the string
220 conversions) prepended to it.
225 conversions, the result will always contain a decimal point, even if no
226 digits follow it (normally, a decimal point appears in the results of
227 those conversions only if a digit follows).
232 conversions, trailing zeros are not removed from the result as they
238 character specifying zero padding.
239 For all conversions except
241 the converted value is padded on the left with zeros rather than blanks.
242 If a precision is given with a numeric conversion
243 .Cm ( d , i , o , u , i , x ,
250 A negative field width flag
252 indicates the converted value is to be left adjusted on the field boundary.
255 conversions, the converted value is padded on the right with blanks,
256 rather than on the left with blanks or zeros.
263 A space, specifying that a blank should be left before a positive number
264 produced by a signed conversion
265 .Cm ( d , e , E , f , g , G ,
271 character specifying that a sign always be placed before a
272 number produced by a signed conversion.
275 overrides a space if both are used.
278 An optional decimal digit string specifying a minimum field width.
279 If the converted value has fewer characters than the field width, it will
280 be padded with spaces on the left (or right, if the left-adjustment
281 flag has been given) to fill out
284 An optional precision, in the form of a period
287 optional digit string.
288 If the digit string is omitted, the precision is taken as zero.
289 This gives the minimum number of digits to appear for
290 .Cm d , i , o , u , x ,
293 conversions, the number of digits to appear after the decimal-point for
297 conversions, the maximum number of significant digits for
301 conversions, or the maximum number of characters to be printed from a
306 The optional character
308 specifying that a following
309 .Cm d , i , o , u , x ,
312 conversion corresponds to a
315 .Vt unsigned short int
316 argument, or that a following
318 conversion corresponds to a pointer to a
322 The optional character
324 (ell) specifying that a following
325 .Cm d , i , o , u , x ,
328 conversion applies to a pointer to a
331 .Vt unsigned long int
332 argument, or that a following
334 conversion corresponds to a pointer to a
338 The optional characters
340 (ell ell) specifying that a following
341 .Cm d , i , o , u , x ,
344 conversion applies to a pointer to a
347 .Vt unsigned long long int
348 argument, or that a following
350 conversion corresponds to a pointer to a
354 The optional character
356 specifying that a following
357 .Cm d , i , o , u , x ,
360 conversion corresponds to a
363 .Vt unsigned quad int
364 argument, or that a following
366 conversion corresponds to a pointer to a
372 specifying that a following
376 conversion corresponds to a
380 A character that specifies the type of conversion to be applied.
383 A field width or precision, or both, may be indicated by
386 or an asterisk followed by one or more decimal digits and a
392 argument supplies the field width or precision.
393 A negative field width is treated as a left adjustment flag followed by a
394 positive field width; a negative precision is treated as though it were
396 If a single format directive mixes positional (nn$)
397 and non-positional arguments, the results are undefined.
399 The conversion specifiers and their meanings are:
400 .Bl -tag -width "diouxX"
404 (or appropriate variant) argument is converted to signed decimal
412 or unsigned hexadecimal
421 conversions; the letters
426 The precision, if any, gives the minimum number of digits that must
427 appear; if the converted value requires fewer digits, it is padded on
432 argument is converted to signed decimal, unsigned octal, or unsigned
433 decimal, as if the format had been
438 These conversion characters are deprecated, and will eventually disappear.
442 argument is rounded and converted in the style
443 .Oo \- Oc Ns d Ns Cm \&. Ns ddd Ns Cm e Ns \\*[Pm]dd
444 where there is one digit before the
445 decimal-point character
446 and the number of digits after it is equal to the precision;
447 if the precision is missing,
448 it is taken as 6; if the precision is
449 zero, no decimal-point character appears.
452 conversion uses the letter
456 to introduce the exponent.
457 The exponent always contains at least two digits; if the value is zero,
462 argument is rounded and converted to decimal notation in the style
463 .Oo \- Oc Ns ddd Ns Cm \&. Ns ddd ,
464 where the number of digits after the decimal-point character
465 is equal to the precision specification.
466 If the precision is missing, it is taken as 6; if the precision is
467 explicitly zero, no decimal-point character appears.
468 If a decimal point appears, at least one digit appears before it.
472 argument is converted in style
481 The precision specifies the number of significant digits.
482 If the precision is missing, 6 digits are given; if the precision is zero,
486 is used if the exponent from its conversion is less than -4 or greater than
487 or equal to the precision.
488 Trailing zeros are removed from the fractional part of the result; a
489 decimal point appears only if it is followed by at least one digit.
493 argument is converted to an
495 and the resulting character is written.
499 argument is expected to be a pointer to an array of character type (pointer
501 Characters from the array are written up to (but not including)
505 if a precision is specified, no more than the number specified are
507 If a precision is given, no null character
508 need be present; if the precision is not specified, or is greater than
509 the size of the array, the array must contain a terminating
515 pointer argument is printed in hexadecimal (as if by
520 The number of characters written so far is stored into the
521 integer indicated by the
523 (or variant) pointer argument.
524 No argument is converted.
529 No argument is converted.
530 The complete conversion specification
535 In no case does a non-existent or small field width cause truncation of
536 a field; if the result of a conversion is wider than the field width, the
537 field is expanded to contain the conversion result.
539 To print a date and time in the form
540 .Dq Li "Sunday, July 3, 10:02" ,
545 are pointers to strings:
546 .Bd -literal -offset indent
548 fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
549 weekday, month, day, hour, min);
553 to five decimal places:
554 .Bd -literal -offset indent
557 fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
560 To allocate a 128 byte string and print into it:
561 .Bd -literal -offset indent
565 char *newfmt(const char *fmt, ...)
569 if ((p = malloc(128)) == NULL)
572 (void) vsnprintf(p, 128, fmt, ap);
597 first appeared in the
600 These were implemented by
601 .An Peter Wemm Aq peter@FreeBSD.org
604 but were later replaced with a different implementation
606 .An Todd C. Miller Aq Todd.Miller@courtesan.com
610 The conversion formats
615 are provided only for backward compatibility.
616 The effect of padding the
618 format with zeros (either by the
620 flag or by specifying a precision), and the benign effect (i.e., none)
627 conversions, as well as other
628 nonsensical combinations such as
630 are not standard; such combinations
637 assume an infinitely long string,
638 callers must be careful not to overflow the actual space;
639 this is often hard to assure.
640 For safety, programmers should use the
643 Unfortunately, this interface is not portable.