Не используйте atoi()
или любую из функций atoi*()
, если вы заботитесь об обработке ошибок. Эти функции не позволяют обнаруживать ошибки; ни atoi(99999999999999999999)
, ни atoi("foo")
не может сказать вам, что возникла проблема. (Я думаю, что один или оба из этих случаев на самом деле имеют неопределенное поведение, но я должен проверить, чтобы убедиться.)
Функции strto*()
немного сложны в использовании, но они могут надежно сказать вам, представляет ли строка действительное число, находится ли она в диапазоне и каково ее значение. (Вы должны иметь дело с errno
, чтобы получить полную проверку.)
Если вы просто хотите получить значение типа int, вы можете использовать strtol()
(который после проверки ошибок даст вам результат long
) и преобразовать его в int
после также , проверяя, что результат находится в представимом диапазоне int
(см. INT_MIN
и INT_MAX
в <limits.h>
). strtoul()
дает вам unsigned long
результат. strtoll()
и strtoull
() для long long
и unsigned long long
соответственно; они новы в C99, и ваша реализация компилятора может не поддерживать их (хотя, вероятно, большинство реализаций сторонних разработчиков).