为什么这样的代码应该提供如此高的结果,当我给它编号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);
}
}
结果应该从提供的号码开始,但是这样开始:
18446744073708558547 - 18446744073708558547
18446744073708558548 - 18446744073708558548
18446744073708558549 - 18446744073708558549
18446744073708558550 - 18446744073708558550
18446744073708558551 - 18446744073708558551
... ECC
这是什么废话?
谢谢!
答案 0 :(得分:6)
atoi()
返回int
。如果您需要更大的数字,请尝试strtol()
, strtoll()
或其亲属。
答案 1 :(得分:3)
atoi()
返回(int)
,无法处理(long long)
。尝试atoll()
,或者失败atol()
(前者是首选)。
答案 2 :(得分:0)
您正在将有符号整数打印为无符号。