strtoull and long long arithmetic

c, long-integer, string

Solution

Do you have `<stdlib.h>` included?

I can reproduce on MacOS X if I omit `<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);
}

Omit the header, I get your result. Include the header, I get the correct answer.

Both 32-bit and 64-bit compiles.

As noted in the comments, in the absence of a declaration for strtoll(), the compiler treats it as a function returning int.

To see more of what goes on, look at the hex outputs:

     123110724001300    0x00006FF7_F2F8DE14    Correct
18446744073490980372    0xFFFFFFFF_F2F8DE14    Incorrect

Manually inserted underscores...

Problem

Can anyone explain the output of this program and how I can fix it? ``` unsigned long long ns = strtoull("123110724001300", (char **)NULL, 10); fprintf(stderr, "%llu\n", ns); // 18446744073490980372 ```

Original source

Related problems