문제

누구 든지이 프로그램의 출력과 어떻게 수정할 수 있는지 설명 할 수 있습니까?

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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top