2013-01-14 69 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。我建議查找如何轉換爲無符號整型。