¿Por qué no puedes comprobar si errno es igual a ERANGE?
He estado tratando de convertir correctamente una matriz de caracteres a un largo constrtol
, compruebe si hubo un desbordamiento o un subflujo y luego realice un int intcast a lo largo. En el camino, he notado una gran cantidad de código que se ve así
if ((result == LONG_MAX || result == LONG_MIN) && errno == ERANGE)
{
// Handle the error
}
¿Por qué no puedes simplemente decir
if(errno == ERANGE)
{
// Handle the error
}
Según tengo entendido, si se produce un desbordamiento o desbordamiento, errno está configurado en ERANGE en ambos casos. Entonces, ¿es realmente necesario el primero? ¿Podría ser problemático verificar ERANGE solo?
Así es como se ve mi código a partir de ahora
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;
Si hay una razón para lo primero, avíseme.