문제
누구 든지이 프로그램의 출력과 어떻게 수정할 수 있는지 설명 할 수 있습니까?
unsigned long long ns = strtoull("123110724001300", (char **)NULL, 10);
fprintf(stderr, "%llu\n", ns);
// 18446744073490980372
해결책
당신은 가지고 있습니까? <stdlib.h>
포함되어 있습니까?
생략하면 MacOS X에서 재현 할 수 있습니다 <stdlib.h>
.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
unsigned long long ns = strtoll("123110724001300", (char **)NULL, 10);
printf("%llu\n", ns);
return(0);
}
헤더를 생략하고 결과를 얻습니다. 헤더를 포함 시키면 정답이 있습니다.
32 비트 및 64 비트 컴파일.
주석에 언급 된 바와 같이, strtoll ()에 대한 선언이 없으면 컴파일러는이를 int를 반환하는 함수로 취급합니다.
무슨 일이 일어나고 있는지 더 많이 보려면 육각 출력을보십시오.
123110724001300 0x00006FF7_F2F8DE14 Correct
18446744073490980372 0xFFFFFFFF_F2F8DE14 Incorrect
수동 삽입 밑줄 ...
다른 팁
서명되지 않은 장거리를 원한다면 Strtoull을 사용하지 않는 이유는 무엇입니까?
나는 행동을 설명 할 수 없다. 그러나 Cygwin이있는 32 비트 Windows XP에서 gcc-4.3.2
:
#include <stdio.h>
#include <stdlib.h>
int main(void) {
unsigned long long ns = strtoull("123110724001300", NULL, 10);
fprintf(stderr, "%llu\n", ns);
return 0;
}
인쇄물
E:\Home> t.exe 123110724001300
제휴하지 않습니다 StackOverflow