一、问题
atoi( const char *str )和atol(const char *str )转换超过10位的字符串,转换失败
二、分析
atoi函数返回的int取值范围:-2147483648 ~ 2147483647
atol函数返回的long int取值范围:-2147483648 ~ 2147483647
10位数超过int和long int的取值范围
三、解决
使用函数_atoi64函数替换
原型:_int64 _atoi64(const char *_String)
参数:带符号数字字符串
返回值:_int64/long long
四、示例
测试代码:
printf("atoi: %d\n",atoi("12345678901"));
printf("atoi: %d\n",atoi("-12345678901"));
printf("atol: %ld\n",atol("12345678901"));
printf("atol: %ld\n",atol("-12345678901"));
printf("_atoi64: %lld\n",_atoi64("12345678901"));
printf("_atoi64: %lld\n",_atoi64("-12345678901"));
结果:
atoi: 2147483647
atoi: -2147483648
atol: 2147483647
atol: -2147483648
_atoi64: 12345678901
_atoi64: -12345678901
atoi和atol转换超过int或long int取值范围的数值会返回最大值或最小值
_atoi64成功转换超过10位的数字字符串