C中的atoi功能无法正常工作

有人可以解释为什么atoi函数不能与超过9位的nuber一起工作.
例如:

我输入123456789,程序说123456789,但是当我输入12345678901程序时说-519403114 …感谢您的帮助.

int main ()
{
    int i;
    char szinput [256];
    printf ("Enter a Card Number:");
    fgets(szinput,256,stdin);
    i=atoi(szinput);
    printf("%d\n",i);
    getch();
    return 0;
}
如果您关心错误处理,请不要使用atoi()或任何atoi *()函数.这些功能无法检测错误; atoi(99999999999999999999)和atoi(“foo”)都没有办法告诉你有问题. (我认为这些案例中的一个或两个实际上都有未定义的行为,但我必须检查以确定.)

strto *()函数使用起来有点棘手,但它们可以可靠地告诉您字符串是否表示有效数字,是否在范围内,以及它的值是什么. (你必须处理errno以获得全面检查.)

如果你只想要一个int值,你可以使用strtol()(在错误检查之后,给你一个很长的结果)并在检查结果是否在int的可表示范围内之后将其转换为int(参见INT_MIN和INT_MAX在< limits.h>)中. strtoul()给你一个unsigned long结果. strtoll()和strtoull()分别为long long和unsigned long long;它们是C99中的新功能,并且您的编译器实现可能不支持它们(尽管大多数非Microsoft实现可能都支持它们).

相关文章
相关标签/搜索