265 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
			
		
		
	
	
			265 lines
		
	
	
		
			6.1 KiB
		
	
	
	
		
			Groff
		
	
	
	
	
	
.\"	@(#)printf.3s	6.3 (Berkeley) 6/5/86
 | 
						|
.\"
 | 
						|
.TH PRINTF 3 "June 5, 1986"
 | 
						|
.AT 3
 | 
						|
.SH NAME
 | 
						|
printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf \- formatted output conversion
 | 
						|
.SH SYNOPSIS
 | 
						|
.nf
 | 
						|
.ft B
 | 
						|
#include <sys/types.h>
 | 
						|
#include <stdio.h>
 | 
						|
#include <stdarg.h>
 | 
						|
 | 
						|
int printf(const char *\fIformat\fP \fR[\fP, \fIarg\fP\fR] ...\fP);
 | 
						|
int fprintf(FILE *\fIstream\fP, const char *\fIformat\fP \fR[\fP, \fIarg\fP\fR] ...\fP);
 | 
						|
int sprintf(char *\fIs\fP, const char *\fIformat\fP \fR[\fP, \fIarg\fP\fR] ...\fP);
 | 
						|
int snprintf(char *\fIs\fP, size_t \fIn\fP, const char *\fIformat\fP \fR[\fP, \fIarg\fP\fR] ...\fP);
 | 
						|
int vprintf(const char *\fIformat\fP, va_list \fIargs\fP);
 | 
						|
int vfprintf(FILE *\fIstream\fP, const char *\fIformat\fP, va_list \fIargs\fP);
 | 
						|
int vsprintf(char *\fIs\fP, const char *\fIformat\fP, va_list \fIargs\fP);
 | 
						|
int vsnprintf(char *\fIs\fP, size_t \fIn\fP, const char *\fIformat\fP, va_list \fIargs\fP);
 | 
						|
.ft R
 | 
						|
.fi
 | 
						|
.SH DESCRIPTION
 | 
						|
.B Printf
 | 
						|
places output on the standard output stream
 | 
						|
.BR stdout .
 | 
						|
.B Fprintf
 | 
						|
places output on the named output
 | 
						|
.IR stream .
 | 
						|
.B Sprintf
 | 
						|
places `output' in the string
 | 
						|
.IR s ,
 | 
						|
followed by the character `\e0'.
 | 
						|
.B Snprintf
 | 
						|
(Minix-vmd only)
 | 
						|
is like
 | 
						|
.B sprintf
 | 
						|
except that no more than
 | 
						|
.IR n \-1
 | 
						|
characters are written to
 | 
						|
.I s
 | 
						|
followed by a `\e0'.
 | 
						|
.PP
 | 
						|
The
 | 
						|
.B v*printf
 | 
						|
functions can be used to make functions like the first four by using the
 | 
						|
.BR stdarg (3)
 | 
						|
method to process the argument.
 | 
						|
.PP
 | 
						|
Each of these functions converts, formats, and prints its arguments after
 | 
						|
the first under control of the first argument.
 | 
						|
The first argument is a character string which contains two types of objects:
 | 
						|
plain characters, which are simply copied to the output stream,
 | 
						|
and conversion specifications, each of which causes conversion and printing
 | 
						|
of the next successive
 | 
						|
.IR arg .
 | 
						|
.PP
 | 
						|
Each conversion specification is introduced by the character
 | 
						|
.BR % .
 | 
						|
The remainder of the conversion specification includes
 | 
						|
in the following order
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
Zero or more of following flags:
 | 
						|
.RS
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
a `#' character
 | 
						|
specifying that the value should be converted to an ``alternate form''.
 | 
						|
For 
 | 
						|
.BR c ,
 | 
						|
.BR d ,
 | 
						|
.BR s ,
 | 
						|
and
 | 
						|
.BR u
 | 
						|
conversions, this option has no effect.  For 
 | 
						|
.B o
 | 
						|
conversions, the precision of the number is increased to force the first
 | 
						|
character of the output string to a zero.  For 
 | 
						|
.BR x ( X )
 | 
						|
conversion, a non-zero result has the string 
 | 
						|
.BR 0x ( 0X )
 | 
						|
prepended to it.  For 
 | 
						|
.BR e ,
 | 
						|
.BR E ,
 | 
						|
.BR f ,
 | 
						|
.BR g ,
 | 
						|
and
 | 
						|
.BR G
 | 
						|
conversions, the result will always contain a decimal point, even if no
 | 
						|
digits follow the point (normally, a decimal point only appears in the
 | 
						|
results of those conversions if a digit follows the decimal point).  For
 | 
						|
.B g
 | 
						|
and
 | 
						|
.B G
 | 
						|
conversions, trailing zeros are not removed from the result as they
 | 
						|
would otherwise be.
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
a minus sign `\-' which specifies
 | 
						|
.I "left adjustment"
 | 
						|
of the converted value in the indicated field;
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
a `+' character specifying that there should always be
 | 
						|
a sign placed before the number when using signed conversions.
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
a space specifying that a blank should be left before a positive number
 | 
						|
during a signed conversion.  A `+' overrides a space if both are used.
 | 
						|
.RE
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
an optional digit string specifying a
 | 
						|
.I "field width;"
 | 
						|
if the converted value has fewer characters than the field width
 | 
						|
it will be blank-padded on the left (or right,
 | 
						|
if the left-adjustment indicator has been given) to make up the field width;
 | 
						|
if the field width begins with a zero,
 | 
						|
zero-padding will be done instead of blank-padding;
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
an optional period
 | 
						|
.RB ` . '
 | 
						|
which serves to separate the field width from the next digit string;
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
an optional digit string specifying a
 | 
						|
.I precision
 | 
						|
which specifies the number of digits to appear after the
 | 
						|
decimal point, for e- and f-conversion, or the maximum number of characters
 | 
						|
to be printed from a string;
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
the character
 | 
						|
.B l
 | 
						|
specifying that a following
 | 
						|
.BR d ,
 | 
						|
.BR o ,
 | 
						|
.BR x ,
 | 
						|
or
 | 
						|
.B u
 | 
						|
corresponds to a long integer
 | 
						|
.IR arg .
 | 
						|
.TP
 | 
						|
\(bu
 | 
						|
a character which indicates the type of
 | 
						|
conversion to be applied.
 | 
						|
.PP
 | 
						|
A field width or precision may be `*' instead of a digit string.
 | 
						|
In this case an integer
 | 
						|
.I arg
 | 
						|
supplies
 | 
						|
the field width or precision.
 | 
						|
.PP
 | 
						|
The conversion characters
 | 
						|
and their meanings are
 | 
						|
.TP
 | 
						|
.B dox
 | 
						|
The integer
 | 
						|
.I arg
 | 
						|
is converted to decimal, octal, or
 | 
						|
hexadecimal notation respectively.
 | 
						|
.TP
 | 
						|
.B X
 | 
						|
Like
 | 
						|
.BR x ,
 | 
						|
but use upper case instead of lower case.
 | 
						|
.TP
 | 
						|
.B f
 | 
						|
The float or double
 | 
						|
.I arg
 | 
						|
is converted to decimal notation
 | 
						|
in the style `[\fB\-\fR]ddd.ddd'
 | 
						|
where the number of d's after the decimal point
 | 
						|
is equal to the precision specification
 | 
						|
for the argument.
 | 
						|
If the precision
 | 
						|
is missing,
 | 
						|
6 digits are given;
 | 
						|
if the precision is explicitly 0, no digits and
 | 
						|
no decimal point are printed.
 | 
						|
.TP
 | 
						|
.B e
 | 
						|
The float or double
 | 
						|
.I arg
 | 
						|
is converted in the style
 | 
						|
`[\fB\-\fR]d\fB.\fRddd\fBe\fR\(+-dd'
 | 
						|
where there is one digit before the decimal point and
 | 
						|
the number after is equal to the
 | 
						|
precision specification for the argument;
 | 
						|
when the precision is missing,
 | 
						|
6 digits are produced.
 | 
						|
.TP
 | 
						|
.B g
 | 
						|
The float or double
 | 
						|
.I arg
 | 
						|
is printed in style
 | 
						|
.BR d ,
 | 
						|
in style
 | 
						|
.BR f ,
 | 
						|
or in
 | 
						|
style
 | 
						|
.BR e ,
 | 
						|
whichever gives full precision in minimum space.
 | 
						|
.TP
 | 
						|
.B c
 | 
						|
The character
 | 
						|
.I arg
 | 
						|
is printed.
 | 
						|
.TP
 | 
						|
.B s
 | 
						|
.I Arg
 | 
						|
is taken to be a string (character pointer)
 | 
						|
and characters from the string are printed until
 | 
						|
a null character or until
 | 
						|
the number of characters indicated by the precision
 | 
						|
specification is reached;
 | 
						|
however if the precision is 0 or missing
 | 
						|
all characters up to a null are printed.
 | 
						|
.TP
 | 
						|
.B u
 | 
						|
The unsigned integer
 | 
						|
.I arg
 | 
						|
is converted to decimal
 | 
						|
and printed.
 | 
						|
.TP
 | 
						|
.B %
 | 
						|
Print a `%'; no argument is converted.
 | 
						|
.PP
 | 
						|
In no case does a non-existent or small field width
 | 
						|
cause truncation of a field;
 | 
						|
padding takes place only if the specified field
 | 
						|
width exceeds the actual width.
 | 
						|
Characters generated by
 | 
						|
.B printf
 | 
						|
are printed by 
 | 
						|
.BR putc (3).
 | 
						|
.PP
 | 
						|
.B Examples
 | 
						|
.br
 | 
						|
To print a date and time in the form `Sunday, July 3, 10:02',
 | 
						|
where
 | 
						|
.I weekday
 | 
						|
and
 | 
						|
.I month
 | 
						|
are pointers to null-terminated strings:
 | 
						|
.PP
 | 
						|
.RS
 | 
						|
printf("%s, %s %d, %02d:%02d", weekday, month, day, hour, min);
 | 
						|
.RE
 | 
						|
.PP
 | 
						|
To print
 | 
						|
.if n pi
 | 
						|
.if t \(*p
 | 
						|
to 5 decimals:
 | 
						|
.IP
 | 
						|
printf("pi = %.5f", 4*atan(1.0));
 | 
						|
.SH "SEE ALSO"
 | 
						|
.BR putc (3),
 | 
						|
.BR scanf (3),
 | 
						|
.BR ecvt (3),
 | 
						|
.BR stdarg (3).
 |