atoi()没有正确转换

时间:2013-01-14 15:41:41

标签: atoi

我试图在字符串5099516444099516441上调用atoi。第一个转换没有任何问题。第二个是给我十进制值2,147,483,647(0x7FFFFFFF)。为什么会这样?

2 个答案:

答案 0 :(得分:3)

您的第二个整数正在创建溢出。最大32位有符号整数是2147483647。

通常不建议使用atoi;请改用strtol,它实际上会告诉您您的值是否超出范围。 (当输入超出范围时,atoi的行为未定义。您的行为似乎只是吐出最大int

您还可以检查您的编译器是否具有atoi64函数,这样可以使用64位值。

答案 1 :(得分:0)

2147483647是C(有符号)中的最大整数值。它给出了最大可能...原始太大而无法转换为signed int。我建议查找如何转换为unsigned int。