首页 > 解决方案 > printf 格式字符串最大宽度值(填充)%(??)d%n

问题描述

我可以在%d格式说明符中输入的最大宽度值是多少?例如:

int c=0;   
printf("%1234567899d%n",0,&c);
printf("%d",c);

当我使用大值时,写入的c值为0。这是为什么?

标签: cprintf

解决方案


虽然没有明确说明,但字段宽度的类型很可能是int. 这是因为如果给定字段宽度,*则需要一个int参数。

C 标准的第 7.21.6.1p5 节关于fprintf函数(任何扩展名printf)说明了关于字段 witdh 的以下内容:

如上所述,字段宽度或精度或两者都可以由星号指示。在这种情况下,int参数提供字段宽度或精度。指定字段宽度或精度或两者的参数应(按该顺序)出现在要转换的参数(如果有)之前。负字段宽度参数被视为-标志,后跟正字段宽度。采用负精度参数,就好像省略了精度一样。

我在 CentOS 7 和 Ubuntu 18 上对此进行了测试,我可以指定的最大宽度是 2147483614,它比有符号 32 位的最大值小 33 int。如果我使用任何更大的东西,第一个printf不打印任何内容并c保持为 0。

一般来说,您可以期望的最大值cINT_MAX,但是确切的值会因实现而异。


推荐阅读