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 .\" 4. Neither the name of the University nor the names of its contributors
17 .\" may be used to endorse or promote products derived from this software
18 .\" without specific prior written permission.
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 .\" @(#)printf.3 8.1 (Berkeley) 6/4/93
39 .Nm printf , fprintf , sprintf , snprintf , asprintf , dprintf ,
40 .Nm vprintf , vfprintf, vsprintf , vsnprintf , vasprintf, vdprintf
41 .Nd formatted output conversion
47 .Fn printf "const char * restrict format" ...
49 .Fn fprintf "FILE * restrict stream" "const char * restrict format" ...
51 .Fn sprintf "char * restrict str" "const char * restrict format" ...
53 .Fn snprintf "char * restrict str" "size_t size" "const char * restrict format" ...
55 .Fn asprintf "char **ret" "const char *format" ...
57 .Fn dprintf "int fd" "const char * restrict format" ...
60 .Fn vprintf "const char * restrict format" "va_list ap"
62 .Fn vfprintf "FILE * restrict stream" "const char * restrict format" "va_list ap"
64 .Fn vsprintf "char * restrict str" "const char * restrict format" "va_list ap"
66 .Fn vsnprintf "char * restrict str" "size_t size" "const char * restrict format" "va_list ap"
68 .Fn vasprintf "char **ret" "const char *format" "va_list ap"
70 .Fn vdprintf "int fd" "const char * restrict format" "va_list ap"
74 family of functions produces output according to a
84 the standard output stream;
88 write output to the given output
93 write output to the given file descriptor;
99 write to the character string
105 dynamically allocate a new string with
108 Extended locale versions of these functions are documented in
112 for more information.
114 These functions write the output under the control of a
116 string that specifies how subsequent arguments
117 (or arguments accessed via the variable-length argument facilities of
119 are converted for output.
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
149 of the characters printed into the output string
152 character then gets the terminating
154 if the return value is greater than or equal to the
156 argument, the string was too short
157 and some of the printed characters were discarded.
158 The output is always null-terminated, unless
172 For those routines that write to a user-provided character string,
173 that string and the format strings should not overlap, as the
174 behavior is undefined.
176 The format string is composed of zero or more directives:
181 which are copied unchanged to the output stream;
182 and conversion specifications, each of which results
183 in fetching zero or more subsequent arguments.
184 Each conversion specification is introduced by
188 The arguments must correspond properly (after type promotion)
189 with the conversion specifier.
192 the following appear in sequence:
195 An optional field, consisting of a decimal digit string followed by a
197 specifying the next argument to access.
198 If this field is not provided, the argument following the last
199 argument accessed will be used.
200 Arguments are numbered starting at
202 If unaccessed arguments in the format string are interspersed with ones that
203 are accessed the results will be indeterminate.
205 Zero or more of the following flags:
206 .Bl -tag -width ".So \ Sc (space)"
208 The value should be converted to an
211 .Cm c , d , i , n , p , s ,
214 conversions, this option has no effect.
217 conversions, the precision of the number is increased to force the first
218 character of the output string to a zero.
223 conversions, a non-zero result has the string
229 conversions) prepended to it.
231 .Cm a , A , e , E , f , F , g ,
234 conversions, the result will always contain a decimal point, even if no
235 digits follow it (normally, a decimal point appears in the results of
236 those conversions only if a digit follows).
241 conversions, trailing zeros are not removed from the result as they
243 .It So Cm 0 Sc (zero)
245 For all conversions except
247 the converted value is padded on the left with zeros rather than blanks.
248 If a precision is given with a numeric conversion
249 .Cm ( d , i , o , u , i , x ,
256 A negative field width flag;
257 the converted value is to be left adjusted on the field boundary.
260 conversions, the converted value is padded on the right with blanks,
261 rather than on the left with blanks or zeros.
267 .It So "\ " Sc (space)
268 A blank should be left before a positive number
269 produced by a signed conversion
270 .Cm ( a , A , d , e , E , f , F , g , G ,
274 A sign must always be placed before a
275 number produced by a signed conversion.
278 overrides a space if both are used.
279 .It So "'" Sc (apostrophe)
284 or the integral portion of a floating point conversion
288 should be grouped and separated by thousands using
289 the non-monetary separator returned by
293 An optional separator character (
294 .Cm \ , | \; | \ : | _
295 ) used for separating multiple values when printing an AltiVec or SSE vector,
296 or other multi-value unit.
298 NOTE: This is an extension to the
301 Behaviour of these values for
303 is only defined for operating systems conforming to the
304 AltiVec Technology Programming Interface Manual.
305 (At time of writing this includes only Mac OS X 10.2 and later.)
307 An optional decimal digit string specifying a minimum field width.
308 If the converted value has fewer characters than the field width, it will
309 be padded with spaces on the left (or right, if the left-adjustment
310 flag has been given) to fill out
313 An optional precision, in the form of a period
316 optional digit string.
317 If the digit string is omitted, the precision is taken as zero.
318 This gives the minimum number of digits to appear for
319 .Cm d , i , o , u , x ,
322 conversions, the number of digits to appear after the decimal-point for
323 .Cm a , A , e , E , f ,
326 conversions, the maximum number of significant digits for
330 conversions, or the maximum number of characters to be printed from a
335 An optional length modifier, that specifies the size of the argument.
336 The following length modifiers are valid for the
337 .Cm d , i , n , o , u , x ,
341 .Bl -column ".Cm q Em (deprecated)" ".Vt signed char" ".Vt unsigned long long" ".Vt long long *"
342 .It Sy Modifier Ta Cm d , i Ta Cm o , u , x , X Ta Cm n
343 .It Cm hh Ta Vt "signed char" Ta Vt "unsigned char" Ta Vt "signed char *"
344 .It Cm h Ta Vt short Ta Vt "unsigned short" Ta Vt "short *"
345 .It Cm l No (ell) Ta Vt long Ta Vt "unsigned long" Ta Vt "long *"
346 .It Cm ll No (ell ell) Ta Vt "long long" Ta Vt "unsigned long long" Ta Vt "long long *"
347 .It Cm j Ta Vt intmax_t Ta Vt uintmax_t Ta Vt "intmax_t *"
348 .It Cm t Ta Vt ptrdiff_t Ta (see note) Ta Vt "ptrdiff_t *"
349 .It Cm z Ta (see note) Ta Vt size_t Ta (see note)
350 .It Cm q Em (deprecated) Ta Vt quad_t Ta Vt u_quad_t Ta Vt "quad_t *"
356 modifier, when applied to a
360 conversion, indicates that the argument is of an unsigned type
361 equivalent in size to a
365 modifier, when applied to a
369 conversion, indicates that the argument is of a signed type equivalent in
372 Similarly, when applied to an
374 conversion, it indicates that the argument is a pointer to a signed type
375 equivalent in size to a
378 The following length modifier is valid for the
379 .Cm a , A , e , E , f , F , g ,
383 .Bl -column ".Sy Modifier" ".Cm a , A , e , E , f , F , g , G"
384 .It Sy Modifier Ta Cm a , A , e , E , f , F , g , G
385 .It Cm l No (ell) Ta Vt double
386 (ignored, same behavior as without it)
387 .It Cm L Ta Vt "long double"
390 The following length modifier is valid for the
395 .Bl -column ".Sy Modifier" ".Vt wint_t" ".Vt wchar_t *"
396 .It Sy Modifier Ta Cm c Ta Cm s
397 .It Cm l No (ell) Ta Vt wint_t Ta Vt "wchar_t *"
400 The AltiVec Technology Programming Interface Manual also defines five additional length modifiers
401 which can be used (in place of the conventional length modifiers) for the printing of AltiVec or SSE vectors:
404 Treat the argument as a vector value, unit length will be determined by the conversion
405 specifier (default = 16 8-bit units for all integer conversions,
406 4 32-bit units for floating point conversions).
408 Treat the argument as a vector of 8 16-bit units.
410 Treat the argument as a vector of 4 32-bit units.
413 NOTE: The vector length specifiers are extensions to the
416 Behaviour of these values for
418 is only defined for operating systems conforming to the
419 AltiVec Technology Programming Interface Manual.
420 (At time of writing this includes only Mac OS X 10.2 and later.)
422 As a further extension, for SSE2 64-bit units:
425 Treat the argument as a vector of 2 64-bit units.
428 A character that specifies the type of conversion to be applied.
431 A field width or precision, or both, may be indicated by
434 or an asterisk followed by one or more decimal digits and a
440 argument supplies the field width or precision.
441 A negative field width is treated as a left adjustment flag followed by a
442 positive field width; a negative precision is treated as though it were
444 If a single format directive mixes positional
446 and non-positional arguments, the results are undefined.
448 The conversion specifiers and their meanings are:
449 .Bl -tag -width ".Cm diouxX"
453 (or appropriate variant) argument is converted to signed decimal
461 or unsigned hexadecimal
470 conversions; the letters
475 The precision, if any, gives the minimum number of digits that must
476 appear; if the converted value requires fewer digits, it is padded on
481 argument is converted to signed decimal, unsigned octal, or unsigned
482 decimal, as if the format had been
487 These conversion characters are deprecated, and will eventually disappear.
491 argument is rounded and converted in the style
493 .Oo \- Oc Ar d Li \&. Ar ddd Li e \(+- Ar dd
495 where there is one digit before the
496 decimal-point character
497 and the number of digits after it is equal to the precision;
498 if the precision is missing,
499 it is taken as 6; if the precision is
500 zero, no decimal-point character appears.
503 conversion uses the letter
507 to introduce the exponent.
508 The exponent always contains at least two digits; if the value is zero,
512 .Cm a , A , e , E , f , F , g ,
515 conversions, positive and negative infinity are represented as
519 respectively when using the lowercase conversion character, and
523 respectively when using the uppercase conversion character.
524 Similarly, NaN is represented as
526 when using the lowercase conversion, and
528 when using the uppercase conversion.
532 argument is rounded and converted to decimal notation in the style
534 .Oo \- Oc Ar ddd Li \&. Ar ddd ,
536 where the number of digits after the decimal-point character
537 is equal to the precision specification.
538 If the precision is missing, it is taken as 6; if the precision is
539 explicitly zero, no decimal-point character appears.
540 If a decimal point appears, at least one digit appears before it.
544 argument is converted in style
555 The precision specifies the number of significant digits.
556 If the precision is missing, 6 digits are given; if the precision is zero,
560 is used if the exponent from its conversion is less than \-4 or greater than
561 or equal to the precision.
562 Trailing zeros are removed from the fractional part of the result; a
563 decimal point appears only if it is followed by at least one digit.
567 argument is rounded and converted to hexadecimal notation in the style
569 .Oo \- Oc Li 0x Ar h Li \&. Ar hhhp Oo \(+- Oc Ar d ,
571 where the number of digits after the hexadecimal-point character
572 is equal to the precision specification.
573 If the precision is missing, it is taken as enough to represent
574 the floating-point number exactly, and no rounding occurs.
575 If the precision is zero, no hexadecimal-point character appears.
578 is a literal character
580 and the exponent consists of a positive or negative sign
581 followed by a decimal number representing an exponent of 2.
584 conversion uses the prefix
592 to represent the hex digits, and the letter
596 to separate the mantissa and exponent.
598 Note that there may be multiple valid ways to represent floating-point
599 numbers in this hexadecimal format.
601 .Li 0x1.92p+1 , 0x3.24p+0 , 0x6.48p-1 ,
605 The format chosen depends on the internal representation of the
606 number, but the implementation guarantees that the length of the
607 mantissa will be minimized.
608 Zeroes are always represented with a mantissa of 0 (preceded by a
610 if appropriate) and an exponent of
621 argument is converted to an
622 .Vt "unsigned char" ,
623 and the resulting character is written.
627 (ell) modifier is used, the
629 argument shall be converted to a
631 and the (potentially multi-byte) sequence representing the
632 single wide character is written, including any shift sequences.
633 If a shift sequence is used, the shift state is also restored
634 to the original state after the character.
644 argument is expected to be a pointer to an array of character type (pointer
646 Characters from the array are written up to (but not including)
650 if a precision is specified, no more than the number specified are
652 If a precision is given, no null character
653 need be present; if the precision is not specified, or is greater than
654 the size of the array, the array must contain a terminating
660 (ell) modifier is used, the
662 argument is expected to be a pointer to an array of wide characters
663 (pointer to a wide string).
664 For each wide character in the string, the (potentially multi-byte)
665 sequence representing the
666 wide character is written, including any shift sequences.
667 If any shift sequence is used, the shift state is also restored
668 to the original state after the string.
669 Wide characters from the array are written up to (but not including)
673 if a precision is specified, no more than the number of bytes specified are
674 written (including shift sequences).
675 Partial characters are never written.
676 If a precision is given, no null character
677 need be present; if the precision is not specified, or is greater than
678 the number of bytes required to render the multibyte representation of
679 the string, the array must contain a terminating wide
685 pointer argument is printed in hexadecimal (as if by
690 The number of characters written so far is stored into the
691 integer indicated by the
693 (or variant) pointer argument.
694 No argument is converted.
697 argument must be in write-protected memory if this specifier is used; see
698 .Sx SECURITY CONSIDERATIONS
704 No argument is converted.
705 The complete conversion specification
711 character is defined in the program's locale (category
714 In no case does a non-existent or small field width cause truncation of
715 a numeric field; if the result of a conversion is wider than the field
717 field is expanded to contain the conversion result.
719 These functions return the number of characters printed
720 (not including the trailing
722 used to end output to strings),
727 which return the number of characters that would have been printed if the
730 (again, not including the final
732 These functions return a negative value if an error occurs.
734 To print a date and time in the form
735 .Dq Li "Sunday, July 3, 10:02" ,
740 are pointers to strings:
741 .Bd -literal -offset indent
743 fprintf(stdout, "%s, %s %d, %.2d:%.2d\en",
744 weekday, month, day, hour, min);
748 to five decimal places:
749 .Bd -literal -offset indent
752 fprintf(stdout, "pi = %.5f\en", 4 * atan(1.0));
755 To allocate a 128 byte string and print into it:
756 .Bd -literal -offset indent
760 char *newfmt(const char *fmt, ...)
764 if ((p = malloc(128)) == NULL)
767 (void) vsnprintf(p, 128, fmt, ap);
773 The conversion formats
778 are provided only for backward compatibility.
779 The effect of padding the
781 format with zeros (either by the
783 flag or by specifying a precision), and the benign effect (i.e., none)
790 conversions, as well as other
791 nonsensical combinations such as
793 are not standard; such combinations
796 In addition to the errors documented for the
800 family of functions may fail if:
803 An invalid wide character code was encountered.
805 Insufficient storage space is available.
816 Subject to the caveats noted in the
831 With the same reservation, the
848 first appeared in the
851 These were implemented by
852 .An Peter Wemm Aq Mt peter@FreeBSD.org
855 but were later replaced with a different implementation
859 .An Todd C. Miller Aq Mt Todd.Miller@courtesan.com .
864 functions were added in
869 family of functions do not correctly handle multibyte characters in the
872 .Sh SECURITY CONSIDERATIONS
877 functions are easily misused in a manner which enables malicious users
878 to arbitrarily change a running program's functionality through
879 a buffer overflow attack.
884 assume an infinitely long string,
885 callers must be careful not to overflow the actual space;
886 this is often hard to assure.
887 For safety, programmers should use the
893 foo(const char *arbitrary_string, const char *and_another)
899 * This first sprintf is bad behavior. Do not use sprintf!
901 sprintf(onstack, "%s, %s", arbitrary_string, and_another);
904 * The following two lines demonstrate better use of
907 snprintf(onstack, sizeof(onstack), "%s, %s", arbitrary_string,
917 family of functions are also easily misused in a manner
918 allowing malicious users to arbitrarily change a running program's
919 functionality by either causing the program
920 to print potentially sensitive data
921 .Dq "left on the stack" ,
922 or causing it to generate a memory fault or bus error
923 by dereferencing an invalid pointer.
926 can be used to write arbitrary data to potentially carefully-selected
928 Programmers are therefore strongly advised to never pass untrusted strings
931 argument, as an attacker can put format specifiers in the string
932 to mangle your stack,
933 leading to a possible security hole.
934 This holds true even if the string was built using a function like
936 as the resulting string may still contain user-supplied conversion specifiers
937 for later interpolation by
943 is assumed to be untrustworthy if located in writable memory (i.e. memory with
944 protection PROT_WRITE; see
946 and any attempt to use such an argument is fatal.
947 Practically, this means that
949 is permitted in literal
951 strings but disallowed in
953 strings located in normal stack- or heap-allocated memory.
955 Always use the proper secure idiom:
957 .Dl "snprintf(buffer, sizeof(buffer), \*q%s\*q, string);"