- 1
- 2
- 3
- 4
- 5
- 6
if(p) {
if (p->m_String[0] == 0) {
strcpy("foo", p->m_String);
}
DrawText(hdc, p->m_String, strlen(p->m_String), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+51.8
if(p) {
if (p->m_String[0] == 0) {
strcpy("foo", p->m_String);
}
DrawText(hdc, p->m_String, strlen(p->m_String), &rc, DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
и такие веселые куски попадаются в официальном примере написания плагинов на сайте Mozilla
пруф линк - http://mxr.mozilla.org/seamonkey/source/modules/plugin/samples/npruntime/plugin.cpp - строка 750
Oleg_quadro 13.11.2009 12:21 # −2
guest 13.11.2009 12:51 # −1
В Си используются нуль-завершенные строки (то есть конец строки обозначается нулевым байтом, а точный размер строки нигде не хранится).
В данном случае мы имеем такую не очень явную проверку на то, что строка пустая.
Всегда ваш, К.О.
Oleg_quadro 13.11.2009 13:50 # 0
Ну и что, что проверка не явная, ну и что там могут быть дальше символы.
Нам то до них что, если на нулевом символе строка прерывается.
Coach 13.11.2009 13:00 # +1
Oleg_quadro 13.11.2009 13:50 # 0
Про strcpy заметил, но потом подумал, что я неправ.
Coach 13.11.2009 15:43 # 0
Oleg_quadro 13.11.2009 13:51 # 0
Coach 13.11.2009 15:44 # 0
guest 13.11.2009 19:16 # 0
guest 13.11.2009 19:11 # −1
guest 13.11.2009 19:13 # 0
guest 13.11.2009 19:09 # 0
Работать то всё равно будет. Указатель перед обращением проверен.
Проверка на пустую строку верная.
guest 13.11.2009 21:47 # 0
Смысл примера, насколько я понял, был вывести строку p, если она непустая, иначе вывести "foo". Из-за неправильно использования strcpy "иначе" просто не сработает. Так что я бы не стал говорить, что проверка верная. А код я бы предпочёл написать без strcpy:
if (p){
const char * s = "foo";
if (p->m_String[0] != '\0')
s = p->m_String;
DrawText(hdc, s, strlen(s), ...);
}
guest 13.11.2009 22:38 # 0
if (p->m_String[0]) тогда уж.
guest 22.11.2009 17:23 # 0
tinimi 14.11.2009 10:08 # 0
guest 14.11.2009 20:48 # 0
tinimi 15.11.2009 00:15 # 0
xaionaro 15.11.2009 12:43 # +4
guest 20.11.2009 14:58 # 0
Теперь будем писать "проЁкт".