我一直在尝试将 char 数组正确转换为 long with strtol
,检查是否存在溢出或下溢,然后对 long 进行 int 转换。一路走来,我注意到很多看起来像这样的代码
if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE)
{
// Handle the error
}
为什么你不能只说
if(errno == ERANGE)
{
// Handle the error
}
据我了解,如果发生下溢或溢出,两种情况下 errno 都设置为 ERANGE。那么前者真的有必要吗?单独检查 ERANGE 会不会有问题?
这是我的代码现在的样子
char *endPtr;
errno = 0;
long result = strtol(str, &endPtr, 10);
if(errno == ERANGE)
{
// Handle Error
}
else if(result > INT_MAX || result < INT_MIN)
{
// Handle Error
}
else if(endPtr == str || *endPtr != '\0')
{
// Handle Error
}
num = (int)result;
return num;
如果有前者的原因,请告诉我。