2

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.

4

2 に答える 2