- 1
- 2
- 3
- 4
- 5
- 6
string user="Администратор";
char* qwe1;
int i=0;
for(i=0;user[i]!=0;i++){};
qwe1[]=new char[i];
for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+175
string user="Администратор";
char* qwe1;
int i=0;
for(i=0;user[i]!=0;i++){};
qwe1[]=new char[i];
for(int j=0;user[j]!=0;j++)qwe1[j]=user[j];
перевод std::string в массив чаров
maniac 30.10.2010 18:36 # 0
niXman 30.10.2010 18:40 # 0
да и ненависть тут не при чем. просто он не знает чего хочет :)
sera 30.10.2010 18:41 # +2
bugmenot 30.10.2010 19:06 # 0
KirAmp 30.10.2010 19:20 # 0
maniac 30.10.2010 19:33 # +2
В 40 лет перед носом несогласных можно потрясти партбилетом писькой многолетним опытом. В тринадцать же лет трясти почти нечем.
Govnocoder#0xFF 30.10.2010 19:43 # 0
KirAmp 30.10.2010 20:45 # −16
Govnocoder#0xFF 30.10.2010 20:51 # +12
KirAmp 30.10.2010 21:02 # −16
maniac 30.10.2010 20:55 # 0
KirAmp 30.10.2010 21:07 # +2
maniac 30.10.2010 21:12 # +6
KirAmp 30.10.2010 21:15 # +1
istem 30.10.2010 21:31 # +8
KirAmp 30.10.2010 21:43 # 0
>>Поставь мне минус, если тебе от этого легче станет
seonull 31.10.2010 07:21 # +5
и сказать "Мне сейчас 16 скажем... и я в состоянии помериться пиписькойопытом с "дедами"" не одно и то же. и правильно делают что минусуют.
Анонимус 31.10.2010 01:49 # 0
niXman 31.10.2010 09:13 # −1
давай померимся ;)
какие условия?
KirAmp 31.10.2010 10:33 # +1
Я понимаю, что за 4 года сознательной жизни я успел выучить пописАть только 3 языках, причем один из которых "паскаль для лицея".
Но все же я говнокодю куда реже, чем средний студент, и только по уважительной причине, как лень.
А вообще - я вчера был в говно и злой на весь мир....
koodeer 31.10.2010 16:42 # +3
Да, ты ещё школяр, раз оправдываешься этим.
bugmenot 31.10.2010 17:12 # +1
напомните мне, что такое "лицей"? ПТУ? СПТУ?
andremacareno 31.10.2010 17:50 # +3
KirAmp 31.10.2010 18:30 # 0
А нажраться поводов хватает....
bugmenot 31.10.2010 18:57 # 0
А расскажите чего пили, чем закусывали...
telnet 01.11.2010 08:12 # +3
seonull 01.11.2010 08:46 # 0
KirAmp 01.11.2010 08:56 # 0
[*разнылся_и_убежал*]
Не путайте понятия "школьник" и "идиот". Возраст к моему неадекватному поведению никак не относится).....
p.s. Вы давно труъ школьников не видели? Я ж "вычислю тебя по айпи и сделаю что-нибудь плохое".
absolut 01.11.2010 09:27 # 0
Просто не часто бывает когда "школьник" действительно школьник.
Это как выиграть в лотерею. Сразу не верится.
KirAmp 01.11.2010 09:47 # 0
Особенно когда школьник сам признается в этом, тем самым представляя, какой словесный высер затем последует и показывая абсолютное к этому безразличие.
Я повторюсь, мне абсолютно без разницы на мнение первокурсников (а местами и старше), считающими что унижая школьника - они выглядят умнее, главное - это моя мысль, а она заключается в следующей фразе:
>>>возраст - это далеко не главное.
istem 01.11.2010 14:22 # 0
koodeer 01.11.2010 19:54 # 0
У меня таких поводов совсем нет. (в смысле - совсем не пью)
KirAmp 31.10.2010 18:28 # 0
Вчера немного не ясно выразил свои мысли :-\
bugmenot 30.10.2010 21:03 # +2
к сожалению продолжение не опубликованно http://forum.vingrad.ru/index.php?showtopic=313888&view=findpost &p=2239480
Govnocoder#0xFF 30.10.2010 21:16 # −2
Govnoeb 31.10.2010 14:39 # −2
Govnocoder#0xFF 31.10.2010 14:44 # −2
absolut 30.10.2010 21:42 # 0
seonull 31.10.2010 07:29 # 0
niXman 31.10.2010 09:17 # −1
absolut 31.10.2010 09:39 # +1
при С++
niXman 31.10.2010 09:50 # −1
absolut 31.10.2010 10:04 # +1
absolut 31.10.2010 09:44 # +2
niXman 31.10.2010 09:52 # 0
seonull 31.10.2010 12:38 # 0
andremacareno 30.10.2010 23:19 # 0
Кстати я бы вот такой говнокод написал бы:
#include <string.h>
#include <assert.h>
char *str="to be or not to be";
char *str2=new char[strlen(str)+1];
assert(str2 != 0);
strcpy(str2, str);
maniac 31.10.2010 00:19 # 0
Хотя проще так:
или вообще пользоваться string.
niXman 31.10.2010 09:16 # −5
во первых - потому что в коде на с++ небезопасно использовать функции Си.
во вторых - ибо не могу придумать ситуацию, когда нужно именно создать копию строки в виде массива байт, в с++.
absolut 31.10.2010 09:50 # 0
Ну например при взаимодействии С++ и С. Передаешь из std::string, а сохраняешь в виде char[].
niXman 31.10.2010 09:54 # −2
string::c_str() чем не устраивает? этот метод был добавлен именно для совмещения с Си кодом.
хотя сама идея в с++ коде использовать что-то написанное на Си - нелепа.
absolut 31.10.2010 09:58 # 0
Вот это и есть создание копии в виде массива.
Я же не про идиотские попытки преобразования как в ГК говорю :)
Ну, представьте у вас есть некая рукописная библиотека на чистом С, и вам нужно использовать ее в С++ проекте, будете переписывать ее по новой?
niXman 31.10.2010 09:59 # −5
при том, не завернутую в смарт поинтер?
absolut 31.10.2010 10:06 # 0
Так если библиотека например изменяет значение строки, как тут без копии обойтись.
niXman 31.10.2010 10:15 # −7
читаем: http://ru.wikipedia.org/wiki/RAII
> Так если библиотека например изменяет значение строки, как тут без копии обойтись.
если библиотека изменяет значение строки, то она внутрях, сама должна выделять и освобождать память. пользователь библиотеки не обязан знать как она устроена. это второе.
первое - если некоторая функция библиотеки просит неконстантный указатель(или не указатель на константу), то создателя такой библиотеки уверенно можно считать дауном.
в третьих - существует правило гласящее: "ресурс должен освобождаться на том же уровне где был создан/выделен".
вопросы? ;)
absolut 31.10.2010 10:30 # 0
> если некоторая функция библиотеки просит неконстантный указатель(или не указатель на константу), то создателя такой библиотеки уверенно можно считать дауном.
strcpy();
niXman 31.10.2010 10:33 # −5
std::shared_ptr<char> ptr(new char ...);
any_func(ptr.get());
> strcpy();
она не выделяет ресурсы
Lexey 01.11.2010 15:31 # +1
niXman 31.10.2010 10:36 # −5
absolut 31.10.2010 10:47 # 0
Вот вы хорошо сказали "ресурс должен освобождаться на том же уровне где был создан/выделен".
А то, что копию строки (так яростно обсуждаемой) надо делать ДО вызова функции (которая ее изменяет), так и не поняли. Начали ООП сущности привлекать зачем-то, типа smart ptr и RAII. Всё же на поверхности лежит.
niXman 31.10.2010 10:16 # −7
absolut 31.10.2010 10:36 # +2
absolut 31.10.2010 09:51 # +3
байт потеряли :)
maniac 31.10.2010 10:12 # +2
Спасибо, точно, забыл нулевой))
absolut 31.10.2010 09:53 # +1
Или вы думаете при отладке память проверять после new актуально, а в релизе - уже нет ?
andremacareno 31.10.2010 10:16 # −6
---
Допускаю, что память может не выделиться. Откройте "Как программировать на C++" Дейтела и Дейтела и увидите ассерт после каждого нью плюс рекомендации по этому поводу.
absolut 31.10.2010 10:50 # +3
Ужос !!! Надеюсь, у вас все еще впереди.
Т.е. вылет у пользователя с ассертом, это лучше, чем вывод соответствующего сообщения, создания дампа памяти и отправки его потом разработчику?
nil 31.10.2010 13:10 # +3
Govnoeb 31.10.2010 14:35 # +1
absolut 31.10.2010 19:44 # 0
andremacareno 31.10.2010 10:09 # 0
P. S. Что за срач? Не использовать Си в программе на Си++ можно, но часто нарушается правило "Бритва Оккама" ("не плоди сущности без необходимости") .
absolut 31.10.2010 10:17 # 0
niXman 31.10.2010 10:19 # −2
вы неверно понимаете правило.
в реале, никогда не приходилось в с++ коде использовать функции из Си.
absolut 31.10.2010 10:53 # 0
Даже memcpy() ?
niXman 31.10.2010 11:03 # −1
memcpy - std::copy<>
в стандартных алгоритмах есть все: http://www.cplusplus.com/reference/algorithm/
absolut 31.10.2010 14:14 # +1
nil 31.10.2010 13:45 # 0
absolut 01.11.2010 23:11 # +1
nil 01.11.2010 23:40 # +2
andremacareno 31.10.2010 11:44 # −1