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

Thi*_*ame 8 c

有人告诉我,我不应该使用atoi(),而且我应该总是使用strtol().这有什么错atoi(),我不应该使用它?是strtol()真的,而不是用正确的事情?(那么strtol()返回a 的事实呢long,不是int那样的atoi()吗?)

Sam*_*ica 21

来自您自己的链接:

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

要么

atoi 已经过时了


Som*_*ude 6

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


Shu*_*ail 5

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