为什么我不应该使用atoi()?
有人告诉我,我不应该使用atoi()
,而且我应该总是使用strtol()
代替。 atoi()
我不应该使用它有什么问题? strtol()
真的是正确的用法吗? (那么strtol()
返回一个long
,而不是atoi()
这样的事实呢?)
来自您自己的链接 :
atoi()函数由strtol()包含但保留,因为它在现有代码中广泛使用。 如果未知该数字在范围内,则应使用strtol(),因为不需要atoi()来执行任何错误检查。
要么
atoi
已经过时了
如果string非常大并且无法转换,则会导致未定义的行为,因为该字符串的值可能太大而且可能不在范围内。 在这种情况下(其中数字未知在范围内 strtol()
应使用strtol()
。
使用atoi
无法确定传递的字符串是否真的是一个数字,因为没有特殊错误“return”。 它也只处理十进制值(基数为10),因此无法处理任意基数,例如strtol
。 此外,它无法处理大于有符号整数的值(大多数平台上为32位)。