]> git.saurik.com Git - apple/libc.git/blame - stdio/FreeBSD/wprintf.3
Libc-391.tar.gz
[apple/libc.git] / stdio / FreeBSD / wprintf.3
CommitLineData
5b2abdfb
A
1.\" Copyright (c) 1990, 1991, 1993
2.\" The Regents of the University of California. All rights reserved.
3.\"
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.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
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.
23.\"
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
34.\" SUCH DAMAGE.
35.\"
36.\" @(#)printf.3 8.1 (Berkeley) 6/4/93
9385eb3d
A
37.\" FreeBSD: src/lib/libc/stdio/printf.3,v 1.47 2002/09/06 11:23:55 tjr Exp
38.\" $FreeBSD: src/lib/libc/stdio/wprintf.3,v 1.5 2003/07/05 07:55:34 tjr Exp $
5b2abdfb 39.\"
9385eb3d
A
40.Dd July 5, 2003
41.Dt WPRINTF 3
5b2abdfb
A
42.Os
43.Sh NAME
9385eb3d
A
44.Nm wprintf , fwprintf , swprintf ,
45.Nm vwprintf , vfwprintf , vswprintf
46.Nd formatted wide character output conversion
5b2abdfb
A
47.Sh LIBRARY
48.Lb libc
49.Sh SYNOPSIS
50.In stdio.h
9385eb3d 51.In wchar.h
5b2abdfb 52.Ft int
9385eb3d 53.Fn fwprintf "FILE * restrict stream" "const wchar_t * restrict format" ...
5b2abdfb 54.Ft int
9385eb3d 55.Fn swprintf "wchar_t * restrict ws" "size_t n" "const wchar_t * restrict format" ...
5b2abdfb 56.Ft int
9385eb3d 57.Fn wprintf "const wchar_t * restrict format" ...
5b2abdfb
A
58.In stdarg.h
59.Ft int
9385eb3d 60.Fn vfwprintf "FILE * restrict stream" "const wchar_t * restrict" "va_list ap"
5b2abdfb 61.Ft int
9385eb3d 62.Fn vswprintf "wchar_t * restrict ws" "size_t n" "const wchar_t *restrict format" "va_list ap"
5b2abdfb 63.Ft int
9385eb3d 64.Fn vwprintf "const wchar_t * restrict format" "va_list ap"
5b2abdfb
A
65.Sh DESCRIPTION
66The
9385eb3d 67.Fn wprintf
5b2abdfb
A
68family of functions produces output according to a
69.Fa format
70as described below.
9385eb3d
A
71The
72.Fn wprintf
5b2abdfb 73and
9385eb3d
A
74.Fn vwprintf
75functions
5b2abdfb 76write output to
9385eb3d 77.Dv stdout ,
5b2abdfb 78the standard output stream;
9385eb3d 79.Fn fwprintf
5b2abdfb 80and
9385eb3d 81.Fn vfwprintf
5b2abdfb
A
82write output to the given output
83.Fa stream ;
9385eb3d 84.Fn swprintf
5b2abdfb 85and
9385eb3d
A
86.Fn vswprintf
87write to the wide character string
88.Fa ws .
5b2abdfb
A
89.Pp
90These functions write the output under the control of a
91.Fa format
92string that specifies how subsequent arguments
93(or arguments accessed via the variable-length argument facilities of
94.Xr stdarg 3 )
95are converted for output.
96.Pp
97These functions return the number of characters printed
98(not including the trailing
99.Ql \e0
9385eb3d 100used to end output to strings).
5b2abdfb 101.Pp
9385eb3d
A
102The
103.Fn swprintf
5b2abdfb 104and
9385eb3d
A
105.Fn vswprintf
106functions will fail if
107.Fa n
108or more wide characters were requested to be written,
5b2abdfb
A
109.Pp
110The format string is composed of zero or more directives:
111ordinary
5b2abdfb
A
112characters (not
113.Cm % ) ,
114which are copied unchanged to the output stream;
115and conversion specifications, each of which results
116in fetching zero or more subsequent arguments.
117Each conversion specification is introduced by
118the
119.Cm %
120character.
121The arguments must correspond properly (after type promotion)
122with the conversion specifier.
123After the
124.Cm % ,
125the following appear in sequence:
126.Bl -bullet
127.It
128An optional field, consisting of a decimal digit string followed by a
129.Cm $ ,
130specifying the next argument to access.
131If this field is not provided, the argument following the last
132argument accessed will be used.
133Arguments are numbered starting at
134.Cm 1 .
135If unaccessed arguments in the format string are interspersed with ones that
136are accessed the results will be indeterminate.
137.It
138Zero or more of the following flags:
9385eb3d
A
139.Bl -tag -width ".So \ Sc (space)"
140.It Sq Cm #
141The value should be converted to an
5b2abdfb
A
142.Dq alternate form .
143For
144.Cm c , d , i , n , p , s ,
145and
146.Cm u
147conversions, this option has no effect.
148For
149.Cm o
150conversions, the precision of the number is increased to force the first
151character of the output string to a zero (except if a zero value is printed
152with an explicit precision of zero).
153For
154.Cm x
155and
156.Cm X
157conversions, a non-zero result has the string
158.Ql 0x
159(or
160.Ql 0X
161for
162.Cm X
163conversions) prepended to it.
164For
9385eb3d 165.Cm a , A , e , E , f , F , g ,
5b2abdfb
A
166and
167.Cm G
168conversions, the result will always contain a decimal point, even if no
169digits follow it (normally, a decimal point appears in the results of
170those conversions only if a digit follows).
171For
172.Cm g
173and
174.Cm G
175conversions, trailing zeros are not removed from the result as they
176would otherwise be.
9385eb3d
A
177.It So Cm 0 Sc (zero)
178Zero padding.
5b2abdfb
A
179For all conversions except
180.Cm n ,
181the converted value is padded on the left with zeros rather than blanks.
182If a precision is given with a numeric conversion
183.Cm ( d , i , o , u , i , x ,
184and
185.Cm X ) ,
186the
187.Cm 0
188flag is ignored.
9385eb3d
A
189.It Sq Cm \-
190A negative field width flag;
191the converted value is to be left adjusted on the field boundary.
5b2abdfb
A
192Except for
193.Cm n
194conversions, the converted value is padded on the right with blanks,
195rather than on the left with blanks or zeros.
196A
197.Cm \-
198overrides a
199.Cm 0
200if both are given.
9385eb3d
A
201.It So "\ " Sc (space)
202A blank should be left before a positive number
5b2abdfb 203produced by a signed conversion
9385eb3d 204.Cm ( a , A , d , e , E , f , F , g , G ,
5b2abdfb
A
205or
206.Cm i ) .
9385eb3d
A
207.It Sq Cm +
208A sign must always be placed before a
5b2abdfb
A
209number produced by a signed conversion.
210A
211.Cm +
212overrides a space if both are used.
9385eb3d
A
213.It Sq Cm '
214Decimal conversions
215.Cm ( d , u ,
216or
217.Cm i )
218or the integral portion of a floating point conversion
219.Cm ( f
220or
221.Cm F )
222should be grouped and separated by thousands using
223the non-monetary separator returned by
224.Xr localeconv 3 .
5b2abdfb
A
225.El
226.It
227An optional decimal digit string specifying a minimum field width.
228If the converted value has fewer characters than the field width, it will
229be padded with spaces on the left (or right, if the left-adjustment
230flag has been given) to fill out
231the field width.
232.It
233An optional precision, in the form of a period
234.Cm \&.
235followed by an
236optional digit string.
237If the digit string is omitted, the precision is taken as zero.
238This gives the minimum number of digits to appear for
239.Cm d , i , o , u , x ,
240and
241.Cm X
242conversions, the number of digits to appear after the decimal-point for
9385eb3d 243.Cm a , A , e , E , f ,
5b2abdfb 244and
9385eb3d 245.Cm F
5b2abdfb
A
246conversions, the maximum number of significant digits for
247.Cm g
248and
249.Cm G
250conversions, or the maximum number of characters to be printed from a
251string for
252.Cm s
253conversions.
254.It
9385eb3d
A
255An optional length modifier, that specifies the size of the argument.
256The following length modifiers are valid for the
257.Cm d , i , n , o , u , x ,
5b2abdfb
A
258or
259.Cm X
9385eb3d
A
260conversion:
261.Bl -column ".Cm q Em (deprecated)" ".Vt signed char" ".Vt unsigned long long" ".Vt long long *"
262.It Sy Modifier Ta Cm d , i Ta Cm o , u , x , X Ta Cm n
263.It Cm hh Ta Vt "signed char" Ta Vt "unsigned char" Ta Vt "signed char *"
264.It Cm h Ta Vt short Ta Vt "unsigned short" Ta Vt "short *"
265.It Cm l No (ell) Ta Vt long Ta Vt "unsigned long" Ta Vt "long *"
266.It Cm ll No (ell ell) Ta Vt "long long" Ta Vt "unsigned long long" Ta Vt "long long *"
267.It Cm j Ta Vt intmax_t Ta Vt uintmax_t Ta Vt "intmax_t *"
268.It Cm t Ta Vt ptrdiff_t Ta (see note) Ta Vt "ptrdiff_t *"
269.It Cm z Ta (see note) Ta Vt size_t Ta (see note)
270.It Cm q Em (deprecated) Ta Vt quad_t Ta Vt u_quad_t Ta Vt "quad_t *"
271.El
272.Pp
273Note:
274the
275.Cm t
276modifier, when applied to a
277.Cm o , u , x ,
5b2abdfb
A
278or
279.Cm X
9385eb3d
A
280conversion, indicates that the argument is of an unsigned type
281equivalent in size to a
282.Vt ptrdiff_t .
283The
284.Cm z
285modifier, when applied to a
286.Cm d
5b2abdfb 287or
9385eb3d
A
288.Cm i
289conversion, indicates that the argument is of a signed type equivalent in
290size to a
291.Vt size_t .
292Similarly, when applied to an
5b2abdfb 293.Cm n
9385eb3d
A
294conversion, it indicates that the argument is a pointer to a signed type
295equivalent in size to a
296.Vt size_t .
297.Pp
298The following length modifier is valid for the
299.Cm a , A , e , E , f , F , g ,
5b2abdfb
A
300or
301.Cm G
9385eb3d
A
302conversion:
303.Bl -column ".Sy Modifier" ".Cm a , A , e , E , f , F , g , G"
304.It Sy Modifier Ta Cm a , A , e , E , f , F , g , G
305.It Cm L Ta Vt "long double"
306.El
307.Pp
308The following length modifier is valid for the
309.Cm c
310or
311.Cm s
312conversion:
313.Bl -column ".Sy Modifier" ".Vt wint_t" ".Vt wchar_t *"
314.It Sy Modifier Ta Cm c Ta Cm s
315.It Cm l No (ell) Ta Vt wint_t Ta Vt "wchar_t *"
316.El
5b2abdfb
A
317.It
318A character that specifies the type of conversion to be applied.
319.El
320.Pp
321A field width or precision, or both, may be indicated by
322an asterisk
323.Ql *
324or an asterisk followed by one or more decimal digits and a
325.Ql $
326instead of a
327digit string.
328In this case, an
329.Vt int
330argument supplies the field width or precision.
331A negative field width is treated as a left adjustment flag followed by a
332positive field width; a negative precision is treated as though it were
333missing.
9385eb3d
A
334If a single format directive mixes positional
335.Pq Li nn$
5b2abdfb
A
336and non-positional arguments, the results are undefined.
337.Pp
338The conversion specifiers and their meanings are:
9385eb3d 339.Bl -tag -width ".Cm diouxX"
5b2abdfb
A
340.It Cm diouxX
341The
342.Vt int
343(or appropriate variant) argument is converted to signed decimal
344.Cm ( d
345and
346.Cm i ) ,
347unsigned octal
348.Pq Cm o ,
349unsigned decimal
350.Pq Cm u ,
351or unsigned hexadecimal
352.Cm ( x
353and
354.Cm X )
355notation.
356The letters
9385eb3d 357.Dq Li abcdef
5b2abdfb
A
358are used for
359.Cm x
360conversions; the letters
9385eb3d 361.Dq Li ABCDEF
5b2abdfb
A
362are used for
363.Cm X
364conversions.
365The precision, if any, gives the minimum number of digits that must
366appear; if the converted value requires fewer digits, it is padded on
367the left with zeros.
368.It Cm DOU
369The
9385eb3d 370.Vt "long int"
5b2abdfb
A
371argument is converted to signed decimal, unsigned octal, or unsigned
372decimal, as if the format had been
373.Cm ld , lo ,
374or
375.Cm lu
376respectively.
377These conversion characters are deprecated, and will eventually disappear.
378.It Cm eE
379The
380.Vt double
381argument is rounded and converted in the style
9385eb3d
A
382.Sm off
383.Oo \- Oc Ar d Li \&. Ar ddd Li e \\*[Pm] Ar dd
384.Sm on
5b2abdfb
A
385where there is one digit before the
386decimal-point character
387and the number of digits after it is equal to the precision;
388if the precision is missing,
389it is taken as 6; if the precision is
390zero, no decimal-point character appears.
391An
392.Cm E
393conversion uses the letter
9385eb3d 394.Ql E
5b2abdfb 395(rather than
9385eb3d 396.Ql e )
5b2abdfb
A
397to introduce the exponent.
398The exponent always contains at least two digits; if the value is zero,
399the exponent is 00.
9385eb3d
A
400.Pp
401For
402.Cm a , A , e , E , f , F , g ,
403and
404.Cm G
405conversions, positive and negative infinity are represented as
406.Li inf
407and
408.Li -inf
409respectively when using the lowercase conversion character, and
410.Li INF
411and
412.Li -INF
413respectively when using the uppercase conversion character.
414Similarly, NaN is represented as
415.Li nan
416when using the lowercase conversion, and
417.Li NAN
418when using the uppercase conversion.
419.It Cm fF
5b2abdfb
A
420The
421.Vt double
422argument is rounded and converted to decimal notation in the style
9385eb3d
A
423.Sm off
424.Oo \- Oc Ar ddd Li \&. Ar ddd ,
425.Sm on
5b2abdfb
A
426where the number of digits after the decimal-point character
427is equal to the precision specification.
428If the precision is missing, it is taken as 6; if the precision is
429explicitly zero, no decimal-point character appears.
430If a decimal point appears, at least one digit appears before it.
431.It Cm gG
432The
433.Vt double
434argument is converted in style
435.Cm f
436or
437.Cm e
438(or
9385eb3d
A
439.Cm F
440or
5b2abdfb
A
441.Cm E
442for
443.Cm G
444conversions).
445The precision specifies the number of significant digits.
446If the precision is missing, 6 digits are given; if the precision is zero,
447it is treated as 1.
448Style
449.Cm e
9385eb3d 450is used if the exponent from its conversion is less than \-4 or greater than
5b2abdfb
A
451or equal to the precision.
452Trailing zeros are removed from the fractional part of the result; a
453decimal point appears only if it is followed by at least one digit.
9385eb3d
A
454.It Cm aA
455The
456.Vt double
457argument is converted to hexadecimal notation in the style
458.Sm off
459.Oo \- Oc Li 0x Ar h Li \&. Ar hhhp Oo \\*[Pm] Oc Ar d ,
460.Sm on
461where the number of digits after the hexadecimal-point character
462is equal to the precision specification.
463If the precision is missing, it is taken as enough to exactly
464represent the floating-point number; if the precision is
465explicitly zero, no hexadecimal-point character appears.
466This is an exact conversion of the mantissa+exponent internal
467floating point representation; the
468.Sm off
469.Oo \- Oc Li 0x Ar h Li \&. Ar hhh
470.Sm on
471portion represents exactly the mantissa; only denormalized
472mantissas have a zero value to the left of the hexadecimal
473point.
474The
475.Cm p
476is a literal character
477.Ql p ;
478the exponent is preceded by a positive or negative sign
479and is represented in decimal, using only enough characters
480to represent the exponent.
481The
482.Cm A
483conversion uses the prefix
484.Dq Li 0X
485(rather than
486.Dq Li 0x ) ,
487the letters
488.Dq Li ABCDEF
489(rather than
490.Dq Li abcdef )
491to represent the hex digits, and the letter
492.Ql P
493(rather than
494.Ql p )
495to separate the mantissa and exponent.
496.It Cm C
497Treated as
498.Cm c
499with the
500.Cm l
501(ell) modifier.
5b2abdfb
A
502.It Cm c
503The
504.Vt int
505argument is converted to an
9385eb3d
A
506.Vt "unsigned char" ,
507then to a
508.Vt wchar_t
509as if by
510.Xr btowc 3 ,
5b2abdfb 511and the resulting character is written.
9385eb3d
A
512.Pp
513If the
514.Cm l
515(ell) modifier is used, the
516.Vt wint_t
517argument is converted to a
518.Vt wchar_t
519and written.
520.It Cm S
521Treated as
522.Cm s
523with the
524.Cm l
525(ell) modifier.
5b2abdfb
A
526.It Cm s
527The
9385eb3d 528.Vt "char *"
5b2abdfb 529argument is expected to be a pointer to an array of character type (pointer
9385eb3d
A
530to a string) containing a multibyte sequence.
531Characters from the array are converted to wide characters and written up to
532(but not including)
5b2abdfb
A
533a terminating
534.Dv NUL
535character;
536if a precision is specified, no more than the number specified are
537written.
538If a precision is given, no null character
539need be present; if the precision is not specified, or is greater than
540the size of the array, the array must contain a terminating
541.Dv NUL
542character.
9385eb3d
A
543.Pp
544If the
545.Cm l
546(ell) modifier is used, the
547.Vt "wchar_t *"
548argument is expected to be a pointer to an array of wide characters
549(pointer to a wide string).
550Each wide character in the string
551is written.
552Wide characters from the array are written up to (but not including)
553a terminating wide
554.Dv NUL
555character;
556if a precision is specified, no more than the number specified are
557written (including shift sequences).
558If a precision is given, no null character
559need be present; if the precision is not specified, or is greater than
560the number of characters in
561the string, the array must contain a terminating wide
562.Dv NUL
563character.
5b2abdfb
A
564.It Cm p
565The
9385eb3d 566.Vt "void *"
5b2abdfb
A
567pointer argument is printed in hexadecimal (as if by
568.Ql %#x
569or
570.Ql %#lx ) .
571.It Cm n
572The number of characters written so far is stored into the
573integer indicated by the
9385eb3d 574.Vt "int *"
5b2abdfb
A
575(or variant) pointer argument.
576No argument is converted.
577.It Cm %
578A
579.Ql %
580is written.
581No argument is converted.
582The complete conversion specification
583is
584.Ql %% .
585.El
586.Pp
9385eb3d
A
587The decimal point
588character is defined in the program's locale (category
589.Dv LC_NUMERIC ) .
590.Pp
5b2abdfb 591In no case does a non-existent or small field width cause truncation of
9385eb3d
A
592a numeric field; if the result of a conversion is wider than the field
593width, the
5b2abdfb 594field is expanded to contain the conversion result.
9385eb3d
A
595.Sh SECURITY CONSIDERATIONS
596Refer to
597.Xr printf 3 .
5b2abdfb 598.Sh SEE ALSO
9385eb3d
A
599.Xr btowc 3 ,
600.Xr fputws 3 ,
601.Xr printf 3 ,
602.Xr putwc 3 ,
603.Xr setlocale 3 ,
604.Xr wcsrtombs 3 ,
605.Xr wscanf 3
5b2abdfb 606.Sh STANDARDS
9385eb3d
A
607Subject to the caveats noted in the
608.Sx BUGS
609section
610of
611.Xr printf 3 ,
612the
613.Fn wprintf ,
614.Fn fwprintf ,
615.Fn swprintf ,
616.Fn vwprintf ,
617.Fn vfwprintf
5b2abdfb 618and
9385eb3d 619.Fn vswprintf
5b2abdfb
A
620functions
621conform to
9385eb3d 622.St -isoC-99 .