manual:
http://man7.org/linux/man-pages/man3/printf.3.html
int printf(const char *format, ...);
通过format格式串控制输出,调用成功返回输出字符个数(不包括null);失败返回负值。
char buf1[256]; sprintf(buf1, "%d %o %u %x %X %f ", 100, 100, 100, 188, 188, 100.123); //buf1= "100 144 100 bc BC 100.123000 " %f默认六位有效数字 sprintf(buf1, "%d %#o %u %#x %#X %f ", 100, 100, 100, 188, 188, 100.123); //buf1 = "100 0144 100 0xbc 0XBC 100.123000 " %f默认六位有效数字 sprintf(buf1, "%.2d %f %.4f %010.4f", 100, 100.123, 100.123, 100.123); //buf1 = "100 100.123000 100.1230 00100.1230" %f默认六位有效数字 memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%4d %10d", 100, 1888); //buf1 = " 100 1888" 右对其 memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%-4d %-10d", 100, 1888); //buf1 = "100 1888 " 左对齐 memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%04d %010d", 100, 1888); //buf1 = "0100 0000001888" 右对其 memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%*d", 4, 188); //buf1 = " 188" 右对其 memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%.4d",188); //buf1 = "0188" 右对其 char str1[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G'}; memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%s", str1); //buf1 未知结束串 memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%.7s", str1); //buf1 = "ABCDEFG" memset(buf1, 0, sizeof(buf1)); sprintf(buf1, "%#0*X", 8, 128); //buf1 = "0X000080"
格式串(关键摘要)
格式串是由字符串组成,在初始化串中,由0个或者多个转换准则组成:
1.普通字符(不包括%),直接拷贝到输出流中
2.转换符,每一个转换符将取0个或者多个后续参数,每一个转换以'%'开始,以转换说明符结束,存在0或者多个标识,一个可选择的占位,一个可调节的精度,和一个长度修饰符。
参数与转换符必须一致,默认是按照给定的顺序;如果出现 '%*' ,则请求下一个参数(参数不够将会失败)
标识字符
字符'%' 后0个 或者多个标识:
# 值会显示另一种状态,对于o八进制转换,第一个字符会是0; x,X十六进制转换,结果不为0时增加'0x' 、‘0X’前缀。
0 值前缀对齐用0填充,对于d, i, o, u, x, X, a, A, e, E, f, F, g,G转换,0填充左侧而不是空格
- 值左对齐
占位宽
一个可选的十进制数字指定了最小占位宽,如果值少于占位宽,则会以空格填充。
精度
在转换里,以'.'标识,接一个十进制数字。对于d, i, o, u, x, and X转换,最小数字显示,不足则填充; a, A, e, E, f, and F 决定了基数的精度;g,G决定最大的精度;s,S决定了取最多的字符数。
长度修饰
integer : d, i, o, u, x, or X
l : long int , unsigned long int
ll : long long int , unsigned long long
L : long double
j: intmax_t
z : size_t
t : pirdiff_t