C 标准是否为下面的程序提供任何借口不在其标准输出上产生千兆字节的空间?
#include <stdio.h>
int main()
{
// 2^64 = 18446744073709551616
printf("x%18446744073709551619dx\n", 42);
return 0;
}
在 Mac OS X 10.8 和 Linux 上测试,我得到x 42x
.
C11 标准说 (7.21.6.1:4):“可选的最小字段宽度。如果转换后的值的字符数少于字段宽度,则在字段宽度的左侧(或右侧,如果已给出稍后描述的左侧调整标志)用空格(默认情况下)填充。字段宽度采用星号 *(稍后描述)或非负十进制整数的形式。”</p>
C99 中的措辞是相同的。
当字段宽度为 时*
,相应的参数将作为int
(7.12.6.1:5) 获得。但似乎并没有说硬编码的字段宽度应该适合int
.