C 표준은 표준 출력에 기가 바이트의 공백을 생성하지 않도록 프로그램에 대한 변명을하고 있습니까? C에서 printf()의 큰 필드 너비
#include <stdio.h>
int main()
{
// 2^64 = 18446744073709551616
printf("x%18446744073709551619dx\n", 42);
return 0;
}
는 맥 OS X 10.8에서 테스트 및 Linux에서, 나는
x 42x
를 얻을.
C11 표준은 (7.21.6.1:4) : "선택적 최소 필드 너비. 변환 된 값의 너비가 필드 너비보다 적 으면 필드 너비에 왼쪽 (또는 왼쪽 조정 플래그가 지정되어 있으면 오른쪽)으로 공백 (기본값)으로 채 웁니다. 필드 너비는 별표 (*) 또는 음수가 아닌 10 진 정수 형식을 취합니다. "
C99의 표현은 같습니다.
필드 폭이 *
으로 주어지면 해당 인수는 int
(7.12.6.1:5)으로 얻어집니다. 그러나 하드 코딩 된 필드 너비가 int
에 맞아야한다고는 말할 수 없습니다.
글쎄, 당신의 가치는 64 비트'unsigned long long '보다 훨씬 큽니다. 세 번 더 길면 정확한 너비가됩니다. –
http://www.compileonline.com/compile_c_online.php에서 "x"만 출력으로 보았습니다. –
필드 폭 인코딩 제한에 대한 특정 질문은 다루지 않지만 §7.21.6.1/15 "하나의 변환으로 생성 될 수있는 문자의 수는 적어도 4095 여야합니다." 따라서 구현이 2^64 + 3을 올바르게 구문 분석하더라도 "기가 바이트"대신 출력 4094 공간을 준수합니다. – Casey