今天的一些代码有点意外。我在 AIX 上编译它,将警告级别设置为 anal 以查看可能潜伏的恶意问题。从代码中爬出了一些新的东西。
1540-2837 (W) '0' flag is disregarded when combined with
precision and 'i' printf format.
在查看了有问题的行之后,我整理了一个小程序来重现它。在几个平台上对其进行测试表明它不是特定于 AIX 的。
下面的第一个 printf 模仿了程序中的内容。
#include <stdio.h>
int main(void)
{
int x = 3;
printf("Format 0.3i <%0.3i>\n", x); // prints 003, and AIX does a warning
printf("Format .3i <%.3i>\n", x); // prints 003, with no warning
printf("Format 3i <%3i>\n", x); // prints 3, with no warning.
return 0;
}
通常,如果需要前导零,“03i”格式会很好地完成这项工作。
“%.3i”在这里的真正含义是什么?
为什么它有它的行为?