- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
int mr_word_compare(const char* r1, int s1, const char* r2, int s2)
{
char* p1 = (char*)r1;
char* p2 = (char*)r2;
while (*p1 != ' ')
++ p1;
*p1 = '\0';
while (*p2 != ' ')
++ p2;
*p2 = '\0';
int res = strcmp(r1, r2);
*p1 = ' ';
*p2 = ' ';
return res;
}
Анонимус 24.08.2010 18:22 # 0
бедный компилятор
кстати, а где тут с++?
Dummy00001 24.08.2010 19:51 # +3
В С по умолчанию строковые литералы не есть конст. В С++ литералы - всегда конст.
вызов функции `mr_word_compare("hello ", "hello ")` в классическом С будет работать - а в С++ сразу повалится на записе нулей в строки.
НО. почти все современные С компиляторы литералы тоже делают рид-онли - не смотря на то что их тип в С остался "char *" а не как в С++ "const char *".
т.е. фактически здесь С++ нету....
Altravert 24.08.2010 18:41 # 0
Не начинай...
Я вот жду, когда автор придет и скажет "тут им пришлось const char* в аргументе объявить, потому что передают строку в виде "блабла"... ". Только вдумайтесь. Но, раз я это придумал раньше, чем vayerx, то
vayerx, что ты имел ввиду?
Так, ну игнор s1 и s2 я увидел не сразу, но комплятор должен много пиздеть насчет этого.Насчет того, что человек не в теме за указатели это понятно. Всё?
Kornew 24.08.2010 19:19 # 0
компилер: Ембаркадеро Рад студия С++ 10 (консоль(С и С++), без вцл)
Анонимус 24.08.2010 19:25 # +5
Kornew 24.08.2010 19:37 # +1
зы: зачем придумывалась эта функция даже знать не хочется, она практически не имеет смысла (либо крайне специфический: сравнение строк по первому слову в строке)
а так - наглядно показано, что спецификатор конст - можно обойти;
absolut 24.08.2010 21:37 # +1
В плюсах много чего можно, если ЯВНО постараться.
Защита же в большей степени сделана для исключения неявных ошибок.
vayerx 24.08.2010 21:23 # 0
все найденные втфы:
1. двухкратный проход по строкам
2. собственная реализация без strcmp была бы короче
и, как уже писали:
3. запись в константные строки
4. неиспользование s1,s2 - длин буферов.
не говоря об интуитивно понятных идентификаторах
KoirN 24.08.2010 21:08 # +2
KoirN 24.08.2010 21:10 # +2
Анонимус 24.08.2010 21:19 # +1
Я например не большой спец в плюсах, и некоторые шутки могу не понять. А С понимаю.
Все таки это разные языки.
daemon_master 25.08.2010 02:51 # 0