小智 7
来自FreeBSD手册页 man 3 printf
一个可选的精度,以句点的形式.后跟一个可选的数字字符串.如果省略数字字符串,则精度为零. 这给出了d,i,o,u,x和X转换的最小位数,a,e,E,f和F转换的小数点后出现的位数, g和G转换的最大有效位数,或者s转换为字符串打印的最大字符数.
所以在这种情况下,%04.4d
中,.4
该号码的所有四个数字应打印指定.当然,04
如果小于1000 ,该部件只用前导零填充数字.但是,在这种情况下,如上面的手册页所述,
"0"(零)零填充.对于除n之外的所有转换,转换后的值在左侧用零填充而不是空白. 如果使用数字转换(d,i,o,u,i,x和X)给出精度,则忽略0标志.
因为无论如何肯定会打印所有四位数字,我的猜测是它只是一个遗留物或错字或其他东西.此语法产生编译器警告gcc -Wall
(请参阅Sinan Unur的示例),但它似乎不是实际错误.