百度百科:https://baike.baidu.com/item/strtol
转换越界:https://stackoverflow.com/questions/5493235/strtol-returns-an-incorrect-value
第2参数判断是否转换成功:https://bbs.csdn.net/topics/390891699
long int strtol(const char *nptr,char **endptr,int base);
判断转换失败的情况:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char *end;
int ret = (unsigned int)strtol(" +123", &end, 10); // 使用第2个参数,判断strtol是否转换成功
if(*end == 32) //ACSSI码的值为32(space),转换失败
{
perror("转换失败");
return -1;
}
else if( (ret == LONG_MIN || ret == LONG_MAX) && errno == ERANGE ) //超出最大值
{
perror("Value out of range");
return -1;
}
else // 转换成功
printf("%d",ret);
return 0;
}