- 1
- 2
- 3
- 4
- 5
- 6
std::string response;
...
char* result = new char[response.size() + 1];
memcpy(&result[0], &response.c_str()[0], response.size());
result[response.size()] = 0;
return result;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+16
std::string response;
...
char* result = new char[response.size() + 1];
memcpy(&result[0], &response.c_str()[0], response.size());
result[response.size()] = 0;
return result;
Сам метод возвращает char * (при этом никто не запрещал использовать непосредственно std::string).
ЗЫ жаль что весь проект запостить нельзя. Он весь достоин.
Little-Horny 27.05.2014 12:05 # +4
На тот случай, если указатель на массив символов не совпадает с указателем на первый элемент массива. Чтобы познать Дзен, нужно было ещё к void* приведение сделать!
guest 27.05.2014 15:17 # −2
roman-kashitsyn 27.05.2014 15:28 # +7
absolut 27.05.2014 19:36 # 0
4-5 строки вкупе делают то же, что и strcpy.
Xom94ok 27.05.2014 19:46 # 0
UPD: а может и сработает http://ideone.com/4PT7Fs
Xom94ok 27.05.2014 19:52 # 0
absolut 28.05.2014 06:40 # 0
Xom94ok 28.05.2014 18:13 # 0
возможно, это имеет смысл в контексте, как, например, два нолика http запросе
bormand 28.05.2014 18:14 # +2
Ээээ. Это фича каких-то виндовых апи для работы с хттп?
А еще в винапишной функции для выбора файла такая фигня была - надо было разделять маски одним ноликом, а в конце поставить два.
Xom94ok 28.05.2014 20:46 # 0
Точно! Именно оно :) Сразу всплыл в памяти образ шестого билдера.
absolut 28.05.2014 21:16 # +3
а у кого-то он на рабочем столе лежит
Xom94ok 28.05.2014 21:47 # 0
а у нас лицензия на работе :-) последний, кто в нем писал, ушел полтора года назад; его говно прикрыли газеткой и обходят за милю :)
absolut 28.05.2014 22:03 # +2
absolut 28.05.2014 18:29 # +2
я знаю только про два перевода строки после заголовка. Про нолики не в курсе.
Xom94ok 28.05.2014 20:42 # +1
А, точно, сам ведь когда-то через телнет баловался. Значит, где-то еще я на это натыкался, вот и обратил внимание.
kipar 28.05.2014 10:26 # +1
нет, я просто забыл выделить сарказм зеленым.
>Первый аргумент memcpy тоже без квадратных скобок и амперсанда не работал? :)
А это для симметрии.
bormand 27.05.2014 13:21 # 0
Ну может быть автору это надо было передать в какую-нибудь сишную функцию?
Хотя даже если так, то можно было бы хотя бы в std::auto_ptr результат завернуть, чтобы с управлением памятью не париться...
absolut 27.05.2014 19:33 # +1
deprecated собственно, как и остальной код афтора
Soul_re@ver 27.05.2014 20:59 # 0
laMer007 28.05.2014 00:07 # 0
absolut 28.05.2014 06:42 # 0
bormand 28.05.2014 06:46 # 0
Ты не поверишь, но пока нет. У меня двое друзей работают по крестам в джвух разных конторах, и ни там ни там не разрешено юзать с++11. И что-то мне намекает, что не только у них такие ограничения.
defecate-plusplus 28.05.2014 07:28 # 0
на деле же микрософт так и не осилил стандарт - вот поэтому он и причислен к "экспериментальному"
видать, все силы бросили на очередные революционные фичи виндовс для планшетов
bormand 28.05.2014 07:54 # 0
Будем честны, g++ тоже его не допилил: GCC's support for C++11 is still experimental. Хотя, судя по табличке, все фичи окромя GC в g++ реализованы.
absolut 28.05.2014 07:57 # 0
absolut 28.05.2014 08:00 # 0
bormand 27.05.2014 21:23 # 0
Это если у тебя есть с++11 или бустятинку разрешают юзать. А если только хардкорные с++98 - то нифига оно не депрекейтед.
absolut 28.05.2014 07:51 # 0
bormand 28.05.2014 07:56 # +1
absolut 28.05.2014 08:09 # +1
h4tr3d 09.06.2014 14:25 # 0
TarasB 27.05.2014 16:00 # 0
roman-kashitsyn 27.05.2014 16:03 # +1
bormand 27.05.2014 16:45 # +1
Потому что std::string сдохнет и c_str начнет указывать на освобожденный буфер?
absolut 27.05.2014 19:31 # 0
TarasB 27.05.2014 19:40 # 0
absolut 27.05.2014 19:42 # 0
Вернуть c_str() от локальной std::string и ТУТ ЖЕ скопировать в другой std::string, я правильно тебя понял?
TarasB 28.05.2014 10:06 # 0
absolut 28.05.2014 10:40 # 0
h4tr3d 09.06.2014 14:26 # +1
someone 28.05.2014 19:14 # −1
Fixed?
roman-kashitsyn 28.05.2014 19:28 # 0
bormand 28.05.2014 19:34 # +2
Если массив удаляют через delete без [] - то оно в любом случае broken (с педантичной точки зрения, работать то будет).
bormand 28.05.2014 19:35 # 0
Поведение не идентичное, об этом выше пишет Xom94ok.
absolut 28.05.2014 21:19 # 0
А код из говна становится не говном, только при эквивалентной замене? :)
bormand 28.05.2014 21:23 # 0
Не факт, но над неэквивалентной заменой надо сначала 100 раз подумать. Вдруг она что-то поломает в соседнем модуле?
absolut 28.05.2014 22:01 # 0
bormand 28.05.2014 22:49 # 0
Жопа в том, что не всегда можно его увидеть. А еще большая жопа в том, что говнофичей этого кода могли воспользоваться. Но это в основном либ касается, а не прог.
bormand 28.05.2014 23:07 # +1
absolut 29.05.2014 05:41 # 0
kegdan 09.06.2014 15:25 # 0
absolut 29.05.2014 05:36 # 0