有人能解释一下为什么atoi函数不能工作在9位以上的nmuber上吗?
例如:
当我输入: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;
}
发布于 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
格式说明符。
发布于 2012-03-14 13:10:39
如果您正在编写win32应用程序,则可以使用atoi的windows实现,详细信息请参阅下面的页面。
http://msdn.microsoft.com/en-us/library/czcad93k%28v=vs.80%29.aspx
https://stackoverflow.com/questions/7785106
复制相似问题