Вы не должны использовать функцию atoi
. Если факт, вы должны забыть, что он когда-либо существовал. Не имеет практического применения.
В то время как ответ Джека верен, заявив, что строки argv
должны быть сначала преобразованы в числа, использование atoi
для этой цели (особенно в ситуации, когда ввод поступает из «внешнего мира») является преступлением против программирования на Си. Практически нет ситуаций, когда atoi
может быть осмысленно использовано в программе.
Функция, которую вы должны использовать в этом случае: strtol
char *end;
long long_value = strtol(argv[2], &end, 10);
if (*end != '\0' || errno == ERANGE)
/* Conversion error happened */;
Точное условие проверки ошибок (например, требуется ли *end == '\0'
) будет зависеть от ваших намерений.
Если вы хотите получить int
в конце, вам также следует проверить значение для диапазона int
(или для вашего конкретного диапазона применения)
if (long_value < INT_MIN || long_value > INT_MAX)
/* Out of bounds error */;
int value = long_value;
/* This is your final value */