为什么我不应该使用atoi()?

有人告诉我,我不应该使用atoi() ,而且我应该总是使用strtol()代替。 atoi()我不应该使用它有什么问题? strtol()真的是正确的用法吗? (那么strtol()返回一个long ,而不是atoi()这样的事实呢?)

来自您自己的链接 :

atoi()函数由strtol()包含但保留,因为它在现有代码中广泛使用。 如果未知该数字在范围内,则应使用strtol(),因为不需要atoi()来执行任何错误检查。

要么

atoi已经过时了

如果string非常大并且无法转换,则会导致未定义的行为,因为该字符串的值可能太大而且可能不在范围内。 在这种情况下(其中数字未知在范围内 strtol()应使用strtol()

使用atoi无法确定传递的字符串是否真的是一个数字,因为没有特殊错误“return”。 它也只处理十进制值(基数为10),因此无法处理任意基数,例如strtol 。 此外,它无法处理大于有符号整数的值(大多数平台上为32位)。