Sunday, November 28, 2010

printf cheatsheet

Format string

  % [flag]* [minimum_field_width] [precision] [length_modifier] <conversion_specifier>

Flags

Flag Description  
# The value should be converted to an "alternate form".  
0 zero padded. By default, blank padded  
- left adjusted  
' ' (A single space) A blank should be left before a positive number (or empty  string)  produced by a signed conversion.  
+ A sign is always placed before a number produced by a signed conversion.  

Minimum Field Width

"a decimal digit string (with  non-zero first digit). If the value has fewer characters, it will be padded.  In no case does a nonexistent or small field width cause truncation of a field."

Precision

a period ('.')  followed by an optional decimal digit string. It has different meanings for different conversions.

Precision Description  
d, i, o, u, x, and X minimum number of digits to appear printf("%.2d", 1) ==> "01"
a, A, e, E, f, and F number of digits to appear after  the radix  character printf("%.2f",0.1) ==> "0.10"
g and G maximum number of significant digits  
s and S maximum number of characters to be printed from a string printf("%.2s","hello") ==> "he"

Length Modifier

For each conversion specifier, there is expected argument type. For example, for conversion d,  and i, type of arguments should be int. Length Modifiers can be used to specify argument types rather than expected type by default.

Modifier Conversion Argument types
hh d, i, o, u, x, or X signed char or unsigned char
n signed char*
h d, i, o, u, x, or X short int or unsigned short int
b short int*
l d, i, o, u, x, or X long int, or unsigned long int
n long int*
c wint_t
s wchar_t
ll d, i, o, u, x, or X long long int, or unsigned long long int
n long long int*
L a, A, e, E, f, F, g, or G long double
j d, i, o, u, x, or X intmax_t, uintmax_t
z d, i, o, u, x, or X size_t, ssize_t
t d, i, o, u, x, or X ptrdiff_t

Conversion specifier

conversion arguments notation  
d, i int argument signed decimal notation  
o, u, x, X unsigned int unsigned octal, unsigned decimal, unsigned hexdec notation abcedf are used for x.
ABCDEF are used for X.
e, E double rounded and converted in the style [-]d.ddde±dd precision is 6 by default.
f, F double rounded  and  converted  to  decimal  notation in the style [-]ddd.ddd precision is 6 by default.
g, G double converted in style f or e (or F or E for G  conversions).
Style e  is  used  if the  exponent from its conversion is less than -4 or greater than or equal to the precision.
 
a, A double converted to hexadecimal notation.
for a, (using the letters abcdef) in the style [-]0xh.hhhhp±d;
C99;  not in SUSv2
c int converted to an unsigned char, and the resulting character is written  
s const char* Characters from the array are written.  
p void * printed in hexadecimal (as if by %#x or %#lx)  
n int * The number of characters written so far is stored into the integer  indicated  by  the int * (or variant) pointer argument.  

No comments: