Почему вы не можете просто проверить, равен ли errno ERANGE?
Я пытался правильно преобразовать массив символов в длинный сstrtol
проверьте, не было ли переполнения или недостаточного заполнения, а затем выполните 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;
Если есть причина для первого, пожалуйста, дайте мне знать.