我试图在字符串509951644
和4099516441
上调用atoi。第一个转换没有任何问题。第二个是给我十进制值2,147,483,647(0x7FFFFFFF)。为什么会这样?
答案 0 :(得分:3)
您的第二个整数正在创建溢出。最大32位有符号整数是2147483647。
通常不建议使用atoi
;请改用strtol
,它实际上会告诉您您的值是否超出范围。 (当输入超出范围时,atoi
的行为未定义。您的行为似乎只是吐出最大int
值
您还可以检查您的编译器是否具有atoi64
函数,这样可以使用64位值。
答案 1 :(得分:0)
2147483647是C(有符号)中的最大整数值。它给出了最大可能...原始太大而无法转换为signed int。我建议查找如何转换为unsigned int。