我一直想知道为什么printf("%.d", 0);什么都不输出,而它输出除 0 以外的任何其他数字,并按printf("%d", 0);预期输出“0”。
两个代码之间的唯一区别是精度。以下是文档中关于精度的说明:
可选精度,采用句点形式。后跟可选的数字字符串。如果省略数字字符串,则精度为零。这给出了d、i、o、u、x 和 X 转换中出现的最小位数。
在这种情况下,精度应该被忽略,不是吗?
从文档(强调我的):
对于整数说明符(d、i、o、u、x、X):精度指定要写入的最小位数。如果要写入的值短于此数字,则结果将用前导零填充。即使结果更长,该值也不会被截断。精度为 0 意味着不为值 0 写入任何字符。
但不知道为什么,可能与 C 处理 NULL 指针的方式有关,或者正如@TripeHound 指出的那样,这可能是一个设计决策。