atoi()
не будет (не должен) вызывать переполнение стека, если строка содержит символы, отличные от цифр.Он просто преобразует в int
любую цифру, найденную в начале строки, до тех пор, пока ее больше не будет.
int x = atoi("12monkeys"); // x is 12
int y = atoi("monkeys12"); // y is 0
Вы можете проверить, что целочисленное переполнение (число вне диапазона [-2 ^ 31, 2 ^ 31-1] на современной (текущей) архитектуре ПК).
edit (комментарии)
Покастандарты C предупреждают о неопределенном поведении , если значение не может быть представлено, наиболее распространенные последние компиляторы C (gcc, MS ...) не аварийно завершают работу , если значение неприемлемо(если, конечно, указатель char *
не является нулевым или неправильным).
В любом случае, вы можете легко реализовать свой собственный atoi()
(с теми же ограничениями, что и в моем ответе)
#include <ctype.h>
int myatoi(char *s) {
int res = 0, minus = *s == '-';
if (minus) s++;
while (isdigit(*s)) {
res = res*10 + (*s++ - '0');
}
return minus ? -res : res;
}