atoi的问题
#include <stdio.h>#include <stdlib.h>
int main()
{
printf("%d\n", atoi("123456789999999999"));
return 0;
}
什么情况 这是溢出了吗?? 应该是的,int类型一般是16位的,但也有可能是32位的。 本帖最后由 人造人 于 2016-7-11 12:36 编辑
123456789999999999
这个数太大了,需要 unsigned long long 类型才能存放
标准库中只有这些吗?
_CRTIMP double __cdecl __MINGW_NOTHROW atof (const char*);
_CRTIMP int __cdecl __MINGW_NOTHROW atoi (const char*);
_CRTIMP long __cdecl __MINGW_NOTHROW atol (const char*);
我们看来需要一个可以转换 unsigned long long 类型的函数
我自己写了一个
#include <stdio.h>
#include <string.h>
unsigned long long my_atol(char const *str) // 名字可能需要换一个,因为是转换到 unsigned long long 类型
{
unsigned long long ret = 0;
int str_len = strlen(str);
int i = 0;
str_len--;
while(1)
{
char current = str;
ret = ret * 10 + (current - '0');
if(i == str_len)
{
break;
}
i++;
}
return ret;
}
int main()
{
printf("%llu\n", my_atol("1234567899999999997"));
return 0;
}
人造人 发表于 2016-7-11 12:35
123456789999999999
这个数太大了,需要 unsigned long long 类型才能存放
标准库中只有这些吗?
看不懂。。。。。。 你可以用_LARGE_INTEGER(大整数)来存放,上限是16E
页:
[1]