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