2013-07-17 169 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()

相关问题