- 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;
bormand 10.05.2012 16:15 # +7
TheCalligrapher 10.05.2012 21:52 # +4
Все остальное - малозначительные детали.
HaskellGovno 10.05.2012 22:21 # −2
bormand 11.05.2012 05:16 # 0
TheCalligrapher 12.05.2012 19:05 # +4
По моему мнению, основная проблема с 'atoi' не в этом, а в том, что функция порождает неопределенное поведение при переполнении и тупо возвращает '0' при некорректном формате входа.
bormand 12.05.2012 19:18 # +1
TheCalligrapher 12.05.2012 18:56 # +9
Это часто умиляет в пионэрском говнкоде, когда пионэр осознает наличие проблемы, и для ее "решения" воздвигает вокруг вызова 'atoi' горы дополнительного кода, призванного проверять как коректность формата, так и непереполняемость результата. При этом сложность этого нагромождения кода обычно на порядки превышает сложность самого 'atoi' и, как правило, содержит внутри себя еще одну неявную реализацию 'atoi' вручную :)
На самом деле функции группы 'ato...' никакой практической ценности не представляют. Другой способ конвертации строк в число - функция 'sscanf' - несколько лучше, но тоже вывзвает неопределенное поведение при переполнении.
Единственно правильный способ перевода строки в число - это функции группы 'strto...'. Пользуйтесь 'strtol' и забудьте навсегда про существование 'atoi'. Функции группы 'strto...' для того и были введены, чтобы люди перестали мучать этот несчастный 'atoi'.
P.S. В коде "продвинутых" пионэров встречается даже варианты, когда присле вызова 'atoi' и получения нуля в ответ делается вызов 'strtol', чтобы выяснить, что случилось :)
Xom94ok 16.05.2012 22:05 # 0
guest 01.06.2012 14:55 # +2