В языке программирования C строка, такая как "2147483649"
, переполняется как int, так как наибольший unsigned int равен 2147483647
. Когда я хочу преобразовать строки целых чисел в int
, как я могу проверить эти случаи переполнения?переполнение при изменении из строки в int в C
Я не могу просто проверить, если это >=-(2^32-1)
и <= (2^32-1)
, так как процесс преобразования этой строки в int
(например atoi()
) уже изменяет это значение. Есть ли простой способ вместо проверки числа цифр строки перед преобразованием, а также каждой цифры за раз, чтобы убедиться, что она находится в диапазоне int
?
Почему 'atoi()'? Используйте 'strtol()'/'strtoll()' для лучшего. –
Использование 'strtol',' atoi() 'не имеет проверки ошибок. Проверьте лимиты с 'LONG_MAX' и' LONG_MIN' с 'limits.h' – RoadRunner
Возможно, это поможет вам: http://stackoverflow.com/questions/7456902/long-vs-int-cc-whats-the-point –