C에서 "부호없는 long"을 인쇄하는 방법은 무엇입니까?


344

unsigned longC로 데이터 유형 을 인쇄하는 방법을 이해할 수 없습니다 .

이 있다고 가정 unsigned_foo하면 unsigned long다음을 시도합니다.

  • printf("%lu\n", unsigned_foo)
  • printf("%du\n", unsigned_foo)
  • printf("%ud\n", unsigned_foo)
  • printf("%ll\n", unsigned_foo)
  • printf("%ld\n", unsigned_foo)
  • printf("%dl\n", unsigned_foo)

그리고 그들 모두는 내가 가지고있는 -123123123것 대신 어떤 종류의 숫자를 인쇄 unsigned long합니다.

답변:


499

%lu에 대한 올바른 형식입니다 unsigned long. 메모리 손상이나 초기화되지 않은 변수와 같은 다른 문제가 있습니다. 아마도 우리에게 더 큰 그림을 보여줄까요?


12
죄송합니다 %lu. 이번에는 일했습니다. 감사. 다른 일이 일어 났어 야했지만 작동하지 않았습니다.
bodacydo

1
@ bodacydo : 버그가 있으면 반 무작위로 나타날 수 있습니다 ... 인쇄하기 전에 변수에 유효한 값이 있는지 확인하십시오.
타나토스

1
변수가 초기화되지 않은 경우에도 printf가 형식 지정자가 일 때 빼기 부호를 인쇄 할 수있는 지점에 도달 할 수있는 방법이 없어야합니다 %lu. 기술적으로 정의되지 않은 동작이지만 실제로 변수는 예측할 수없는 값을 가지며 printf에 전달되고 printf는 부호없는 것으로 해석됩니다. 내가 bodacydo의 원래 문제를 추측하고있어 하나의 의도 대신 잘못된 printf와 통화 도달 흐름했다 ...
R .. GitHub의 STOP 돕기 ICE

8
@Anisha Kaul : % lu는 유효한 변환 사양이며 % ul은 아닙니다. %lu다음과 같이 나뉩니다. %— "변환 사양"을 시작합니다. l— 길이 수정 자, l"[signed] long int"를 의미; u— 변환 지정 u자는 unsigned int10 진수로 인쇄됩니다. 우리가 길이 수정을 준 때문에 l, 그것은 다음을 받아 들인다 unsigned long int. 문자 백분율, 길이, 변환 순서로되어 있어야합니다 . (너비와 정밀도와 같이 추가 할 수있는 몇 가지 옵션이 더 있습니다. 이 모든 것을 정확하게 문서화 한 man 페이지를 참조하십시오 !)
Thanatos

1
% ul은 부호없는 (% u와 함께) 인쇄하고 문자 "l"을 그대로 인쇄합니다. "% uw"가 부호없는 문자를 인쇄 한 다음 "w"문자가 인쇄됩니다. %는 convspec을 시작합니다. u (또는 d, s, c ...와 같은 다른 문자)는이를 종료합니다.
Veky

30
  • %lu에 대한 부호없는 긴
  • %llu에 대한 부호 오래 오래

13
요다 컨벤션 : "부호없는 long" "(l) ong (u) nsigned"입니다.
Reb. Cabin

28

대한 INT %d

대한 긴 INT %ld

들어 오래 오래 INT %lld

대한 부호 없음 long long int와 %llu


23

모든 조합 중 당신이 시도 %ld하고 %lu모두에서 유효한의 printf 형식 지정자있는 유일한 사람입니다. %lu(부호없는 10 진수) %lx또는 %lX(소문자 또는 대문자가있는 긴 16 %lo진수) 및 (8 진수)는 unsigned long 유형의 변수에 유효한 형식 지정자입니다 (물론 필드 사이에 필드 너비, 정밀도 등을 추가 할 수 있음) %l).


1
% ld는 std :: numeric_limits <unsigned long> :: max () / 2의 값까지 올바로 작동합니다. 이 % ld 이상은 잘못된 값 (음수 값)을 인쇄합니다.
Kaushik Acharya

1
@KaushikAcharya : 아니요, 위의 UB입니다. 그리고 printf허용치가없는 정확한 정확한 인수 유형을 요구하도록 지정 되었으므로, 그 이전에는 UB 일 va_arg수도 있습니다.
R .. GitHub STOP HELPING ICE



8

부호없는 long의 올바른 지정자는 %lu입니다.

정확한 값을 얻지 못하면 코드에 문제가있을 수 있습니다.

여기에 코드를 복사하십시오. 그렇다면 누군가 문제가 무엇인지 더 잘 알 수 있습니다.


-5

나는 같은 문제가 있었다. "% ul"을 시도하십시오, 그것은 나를 위해 작동합니다.


6
이 질문은 8 년 전에 광범위하게 답변되었습니다. 새로운 답변이 새로운 정보를 추가하고 더 중요하다는 것이 올바른지 확인하십시오.
Gerhardh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.