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