2013-01-14 48 views
2

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

回答

3

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

无论如何一般不推荐使用atoi;而是使用strtol,这实际上会告诉您您的值是否超出范围。 (中atoi的行为是不确定当输入超出范围。您似乎是简单地吐出最大int值)

你也可以检查你的编译器有点像atoi64功能,这将让您使用64位值。

0

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