首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C中的atoi函数不能正常工作(超过某一值时)

C中的atoi函数不能正常工作(超过某一值时)
EN

Stack Overflow用户
提问于 2011-10-16 15:02:58
回答 2查看 12.4K关注 0票数 5

有人能解释一下为什么atoi函数不能工作在9位以上的nmuber上吗?

例如:

当我输入:123456789时,程序返回:123456789

但是,当我输入:12345678901时,程序返回:-519403114...

代码语言:javascript
运行
复制
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;
}
EN

回答 2

Stack Overflow用户

发布于 2011-10-16 15:04:22

因为您正在用这么大的值溢出int

而且,在许多平台上,atoi是不受欢迎的和线程不安全的,所以您最好放弃它,转而使用strto(l|ll|ul|ull)

考虑使用strtoull代替。由于unsigned long long是大多数现代平台上的64位类型,所以您可以转换像2 ^ 64 (18446744073709551616)这样大的数字。

若要打印unsigned long long,请使用%llu格式说明符。

票数 7
EN

Stack Overflow用户

发布于 2012-03-14 13:10:39

如果您正在编写win32应用程序,则可以使用atoi的windows实现,详细信息请参阅下面的页面。

http://msdn.microsoft.com/en-us/library/czcad93k%28v=vs.80%29.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7785106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档