Как проверить, что введенный пользователем номер не больше LLONG_MAX или LOWER, чем LLONG_MIN?

Я хочу проверить, больше ли введенный пользователем номер или меньше указанных значений.

Я знаю о функции atoll, но, похоже, это не особенно полезно, поскольку проверка неопределенного значения выглядит не слишком убедительной.

Я также знаю, что я могу проверить, есть ли строка, введенная пользователем, все цифры, в этом случае я мог бы проверять вещи так, как если бы длина строки была больше длины LLONG_MAX или LLONG_MIN после LLONG_MIN 0 с слева, или в том случае, когда длина обоих одинакова, я мог бы проверять цифру цифрой, и если значение введенного числа в этой цифре больше, чем значение LLONG_MAX или LLONG_MIN оно было бы вне диапазона.

Но я думаю, что должен быть лучший способ сделать это. Надеюсь, вы можете дать мне советы о том, что это такое.

    strtoll этого strtoll функцию strtoll .

    В случае, если введенное значение выходит за допустимые пределы, errno устанавливается в ERANGE и LLONG_MIN или LLONG_MAX в зависимости от того, будет ли значение переполняться или переполняться.

    На странице руководства:

    Функция strtol() возвращает результат преобразования, если значение не будет переполнено или переполнено. Если происходит недополнение, strtol() возвращает LONG_MIN . Если происходит переполнение, strtol() возвращает LONG_MAX . В обоих случаях errno устанавливается на ERANGE . Точно так же выполняется для strtoll()LLONG_MIN и LLONG_MAX вместо LONG_MIN и LONG_MAX ).

    Используйте strtol . По стандарту strtol :

    Если правильное значение находится за пределами диапазона представляемых значений, то {LONG_MIN} , {LONG_MAX} , {LLONG_MIN} или {LLONG_MAX} должны быть возвращены (согласно знаку значения), а errno[ERANGE] .

    Так:

     errno = 0; long long result = strtoll( inputStr, NULL, 0 ); if ( ( LLONG_MAX == result ) && ( ERANGE == errno ) ) { /* handle error */ ... }