2013-07-17 167 views
6

有人告訴我,我不應該使用atoi(),而應該始終使用strtol()來代替。 atoi()有什麼問題我不應該使用它? strtol()真的是正確的使用? (這strtol()返回擔心的是什麼long,不是intatoi()呢?)爲什麼我不應該使用atoi()?

+0

注意:我非常清楚爲什麼不使用'atoi()'。然而,雖然我看到有關如何使用atoi()解釋爲什麼不使用它的問題,但我一直無法找到這個直接的問題,我認爲將問題和答案連接在一起會是有用的正確地作爲一對。 –

+0

(另外,我很好奇看到人們想出什麼答案,變化可能很有趣。) –

+1

這是不是已經被討論過了?你有沒有環顧過這個網站? –

回答

16

從自己link

()函數由strtol將歸入(),但被保留,因爲的atoi它在現有的代碼中被廣泛使用。 如果數字不在範圍內,應該使用strtol(),因爲atoi()不需要執行任何錯誤檢查。

或者

atoi是過時

4

隨着atoi沒有發現如果傳遞的字符串確實是一個編號的方式,因爲沒有特殊的錯誤「迴歸」。它也只處理十進制值(基數10),所以不能處理任意的鹼基,如strtol。它也不能處理大於有符號整數的值(在大多數平臺上是32位)。

4

如果字符串會很大並且無法轉換,則會導致未定義的行爲,因爲該字符串的值可能太大,並且可能不在範圍內。在這種情況下(號碼未知在範圍內)應使用strtol()

相關問題