- 1
if( str[0] == '<' || str[1] == '?' || str[2] == 'x' || str[3] == 'm' || str[4] == 'l') {...}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+30
if( str[0] == '<' || str[1] == '?' || str[2] == 'x' || str[3] == 'm' || str[4] == 'l') {...}
Проверка на xml-ность
WGH 24.10.2012 12:43 # +1
Ну а что касается кода... ну пренебрегает автор strncmp, с кем не бывает.
ErmineMD 24.10.2012 13:02 # +9
TarasB 24.10.2012 13:07 # 0
ErmineMD 24.10.2012 13:08 # +1
bormand 24.10.2012 13:18 # +1
if( str[0] != '<' || str[1] != '?' || str[2] != 'x' || str[3] != 'm' || str[4] != 'l') {...}
bazhenovc 24.10.2012 14:35 # +1
absolut 25.10.2012 10:53 # +4
Это проверка на "подозрение на xml-ность" :)
ErmineMD 25.10.2012 10:57 # −2
bormand 25.10.2012 11:03 # +2
ErmineMD 25.10.2012 11:05 # 0
eth0 25.10.2012 14:07 # +3
i-- 24.10.2012 14:10 # +4
roman-kashitsyn 24.10.2012 14:13 # +5
Steve_Brown 24.10.2012 16:02 # +4
Close enough.
defecate-plusplus 24.10.2012 16:14 # +2
и 2) проверять на 2, 4 и 8 символьные литералы тоже, и на будущее 16-символьные тоже неплохо бы
WGH 24.10.2012 17:19 # +1
Не портабельно. Два наиболее разумных варианта предусмотрены, но всё равно!
Steve_Brown 25.10.2012 10:05 # 0
Elvenfighter 24.10.2012 23:36 # 0
... хотя - то же самое что в топике :)
bormand 25.10.2012 06:39 # +2
[trollmode=on]
Только топик работает на строках короче четырех символов, а ваш код - UB.
str = "<?" - 3 байта, '<' '?' и нолик. Код из топика (если не забыть заменить || на &&) остановится на нолике и корректно выдаст false, ваш же код прочитает 1 лишний байт за буфером. Да, согласен, на 32битной платформе краш при этом маловероятен (Но если буфер начинался за 3 байта до конца странички, за которой следует невыделенная память - то таки возможен). Но это UB, а UB это как заряженное ружье висящее на стене, которое когда-нибудь выстрелит.
К тому же на некоторых платформах этот код не сможет нормально работать из-за требований к выравниванию, endianess и размеру long'а.
[/trollmode]
bot 25.10.2012 19:14 # 0