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) と記載されています。変換された値の文字数がフィールド幅よりも少ない場合、フィールド幅の左側 (または、後述の左調整フラグが指定されている場合は右側) に (デフォルトでは) スペースが埋め込まれます。フィールド幅は、アスタリスク * (後述) または非負の 10 進整数の形式を取ります。」</p>
C99 の文言は同じです。
フィールド幅が として指定されている*
場合、対応する引数はint
(7.12.6.1:5) として取得されます。しかし、ハードコーディングされたフィールド幅がint
.