- 1
- 2
- 3
short lPort = atoi(szTemp);
if (lPort <= 0 || lPort > 65535)
lPort = 80;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+116
short lPort = atoi(szTemp);
if (lPort <= 0 || lPort > 65535)
lPort = 80;
Все остальное - малозначительные детали.
По моему мнению, основная проблема с 'atoi' не в этом, а в том, что функция порождает неопределенное поведение при переполнении и тупо возвращает '0' при некорректном формате входа.
Это часто умиляет в пионэрском говнкоде, когда пионэр осознает наличие проблемы, и для ее "решения" воздвигает вокруг вызова 'atoi' горы дополнительного кода, призванного проверять как коректность формата, так и непереполняемость результата. При этом сложность этого нагромождения кода обычно на порядки превышает сложность самого 'atoi' и, как правило, содержит внутри себя еще одну неявную реализацию 'atoi' вручную :)
На самом деле функции группы 'ato...' никакой практической ценности не представляют. Другой способ конвертации строк в число - функция 'sscanf' - несколько лучше, но тоже вывзвает неопределенное поведение при переполнении.
Единственно правильный способ перевода строки в число - это функции группы 'strto...'. Пользуйтесь 'strtol' и забудьте навсегда про существование 'atoi'. Функции группы 'strto...' для того и были введены, чтобы люди перестали мучать этот несчастный 'atoi'.
P.S. В коде "продвинутых" пионэров встречается даже варианты, когда присле вызова 'atoi' и получения нуля в ответ делается вызов 'strtol', чтобы выяснить, что случилось :)