C中有大数字的问题

Jos*_*eph 0 c int

当我给它编号为4293974227(或更高)时,为什么这样的代码应该提供如此高的结果?

int main (int argc, char *argv[])
{


unsigned long long int i;

unsigned long long int z = atoi(argv[1]);

unsigned long long int tmp1 = z;


unsigned long long int *numbers = malloc (sizeof (unsigned long long int) * 1000);

for (i=0; tmp1<=tmp1+1000; i++, tmp1++) {

    numbers[i] = tmp1;
    printf("\n%llu - %llu", numbers[i], tmp1);
}

}
Run Code Online (Sandbox Code Playgroud)

结果应以提供的数字开头,但是如下所示:

18446744073708558547 - 18446744073708558547
18446744073708558548 - 18446744073708558548
18446744073708558549 - 18446744073708558549
18446744073708558550 - 18446744073708558550
18446744073708558551 - 18446744073708558551
Run Code Online (Sandbox Code Playgroud)

ECC ...

什么是废话?

谢谢!

Car*_*rum 6

atoi()回报int.如果你需要更大的数字,尝试strtol(),strtoll()或他们的亲属.