我可以在%d格式说明符中输入的最大宽度值是多少?例如:
int c=0;
printf("%1234567899d%n",0,&c);
printf("%d",c);
Run Code Online (Sandbox Code Playgroud)
当我使用大值的写入值c是0。这是为什么?
尽管没有明确说明,但字段宽度的类型很可能是int. 这是因为如果给出字段宽度,则需要*一个参数。int
关于函数(任何扩展)的C 标准第 7.21.6.1p5 节规定了有关字段 witdh 的以下内容:fprintfprintf
如上所述,字段宽度或精度或两者可以由星号指示。在这种情况下,
int参数提供字段宽度或精度。指定字段宽度或精度或两者的参数应(按该顺序)出现在要转换的参数(如果有)之前。负字段宽度参数被视为标志,-后跟正字段宽度。负精度参数被视为忽略精度。
我在 CentOS 7 和 Ubuntu 18 上对此进行了测试,我可以指定的最大宽度是 2147483614,它比有符号 32 位的最大值小 33 int。如果我使用更大的值,则第一个printf不会打印任何内容并c保持 0。
一般来说,您可以期望的最大值c是INT_MAX,但是确切的值会根据实现的不同而有所不同。