2016-03-21 32 views
1

我一直在想,为什么printf("%.d", 0);什么都不输出,而它输出任何其他数字比0,printf("%d", 0);输出'0'如预期。printf 0与0精度

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

可选精度,以句点形式表示。随后是一个 可选数字字符串。如果数字串被省略,则精度为 被视为零。这给出了的最小数字数字出现 d,i,o,u,x和X转换。

在这种情况下,精度应该被忽略,否?

+2

您可能想要阅读其他一些文档,例如[this one](http://en.cppreference.com/w/c/io/fprintf)(通常非常准确),其中说“如果两个转换后的值和精度为0,则转换结果不包含任何字符。“ –

回答

4

从文档(重点煤矿):

对于整数说明符(d,I,O,U,X,X):精度指定要被写入的最小位数。如果要写入的值小于此数字,则结果将用前导零填充。即使结果更长,值也不会被截断。 0精度意味着没有字符的值写入0

不知道为什么,虽然,可能有与C的方式做处理NULL指针,或作为@TripeHound指出的那样,可能是一个设计决定。

+0

好的,那么我也许应该停止在我的电脑上使用这个人;) – realUser404

+0

你的电脑上的那个人是指基本的printf函数,而不是c包装。我猜测0和NULL之间有冲突;如果你有时间'info coreutils'printf invocation''给你完整的手册页。 –

+0

我的猜测是,它与NULL无关,只是为了让您可以选择将零值作为空白(如电子表格倾向于允许的)。 – TripeHound