printf 0,精度为0

时间:2016-03-21 15:19:04

标签: c printf

我一直想知道为什么printf("%.d", 0);没有输出任何内容,而它输出的内容适用于0以外的任何其他数字,而printf("%d", 0);输出' 0'如预期的那样。

两个代码之间的唯一区别是精度。以下是文档中关于精度的说明:

  

一个可选的精度,以句点的形式。接下来是            可选的数字串。如果省略数字字符串,则精度            被视为零。这会显示最小位数            对于d,i,o,u,x和X转换。

在这种情况下,应该忽略精度,不是吗?

2 个答案:

答案 0 :(得分:4)

从文档(强调我的):

  

对于整数说明符(d,i,o,u,x,X):precision指定要写入的最小位数。如果要写入的值小于此数字,则结果将使用前导零填充。即使结果较长,也不会截断该值。 精度为0表示没有为值0写入字符。

不知道为什么,可能与C处理NULL指针的方式有关,或者@TripeHound指出,这可能是一个设计决定。

答案 1 :(得分:1)

对于x和X说明符,以交替形式(#标志)的有趣内容:

  如果转换后的值是非零,则会在结果前添加

0x或0X。

例如,printf("a = %#.0x", 0);的结果为“ a =”

但是对于o指定者:

  

在可选的实现方式中,必要时可以提高精度,   写一个前导零。在这种情况下,   且精度为``0'',写入单个``0''。

因此,printf("a = %#.0o", 0);的结果为“ a = 0”