- 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 в массив чаров
да и ненависть тут не при чем. просто он не знает чего хочет :)
В 40 лет перед носом несогласных можно потрясти партбилетом писькой многолетним опытом. В тринадцать же лет трясти почти нечем.
>>Поставь мне минус, если тебе от этого легче станет
и сказать "Мне сейчас 16 скажем... и я в состоянии помериться пиписькойопытом с "дедами"" не одно и то же. и правильно делают что минусуют.
давай померимся ;)
какие условия?
Я понимаю, что за 4 года сознательной жизни я успел выучить пописАть только 3 языках, причем один из которых "паскаль для лицея".
Но все же я говнокодю куда реже, чем средний студент, и только по уважительной причине, как лень.
А вообще - я вчера был в говно и злой на весь мир....
Да, ты ещё школяр, раз оправдываешься этим.
напомните мне, что такое "лицей"? ПТУ? СПТУ?
А нажраться поводов хватает....
А расскажите чего пили, чем закусывали...
[*разнылся_и_убежал*]
Не путайте понятия "школьник" и "идиот". Возраст к моему неадекватному поведению никак не относится).....
p.s. Вы давно труъ школьников не видели? Я ж "вычислю тебя по айпи и сделаю что-нибудь плохое".
Просто не часто бывает когда "школьник" действительно школьник.
Это как выиграть в лотерею. Сразу не верится.
Особенно когда школьник сам признается в этом, тем самым представляя, какой словесный высер затем последует и показывая абсолютное к этому безразличие.
Я повторюсь, мне абсолютно без разницы на мнение первокурсников (а местами и старше), считающими что унижая школьника - они выглядят умнее, главное - это моя мысль, а она заключается в следующей фразе:
>>>возраст - это далеко не главное.
У меня таких поводов совсем нет. (в смысле - совсем не пью)
Вчера немного не ясно выразил свои мысли :-\
к сожалению продолжение не опубликованно http://forum.vingrad.ru/index.php?showtopic=313888&view=findpost &p=2239480
при С++
Кстати я бы вот такой говнокод написал бы:
#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);
Хотя проще так:
или вообще пользоваться string.
во первых - потому что в коде на с++ небезопасно использовать функции Си.
во вторых - ибо не могу придумать ситуацию, когда нужно именно создать копию строки в виде массива байт, в с++.
Ну например при взаимодействии С++ и С. Передаешь из std::string, а сохраняешь в виде char[].
string::c_str() чем не устраивает? этот метод был добавлен именно для совмещения с Си кодом.
хотя сама идея в с++ коде использовать что-то написанное на Си - нелепа.
Вот это и есть создание копии в виде массива.
Я же не про идиотские попытки преобразования как в ГК говорю :)
Ну, представьте у вас есть некая рукописная библиотека на чистом С, и вам нужно использовать ее в С++ проекте, будете переписывать ее по новой?
при том, не завернутую в смарт поинтер?
Так если библиотека например изменяет значение строки, как тут без копии обойтись.
читаем: http://ru.wikipedia.org/wiki/RAII
> Так если библиотека например изменяет значение строки, как тут без копии обойтись.
если библиотека изменяет значение строки, то она внутрях, сама должна выделять и освобождать память. пользователь библиотеки не обязан знать как она устроена. это второе.
первое - если некоторая функция библиотеки просит неконстантный указатель(или не указатель на константу), то создателя такой библиотеки уверенно можно считать дауном.
в третьих - существует правило гласящее: "ресурс должен освобождаться на том же уровне где был создан/выделен".
вопросы? ;)
> если некоторая функция библиотеки просит неконстантный указатель(или не указатель на константу), то создателя такой библиотеки уверенно можно считать дауном.
strcpy();
std::shared_ptr<char> ptr(new char ...);
any_func(ptr.get());
> strcpy();
она не выделяет ресурсы
Вот вы хорошо сказали "ресурс должен освобождаться на том же уровне где был создан/выделен".
А то, что копию строки (так яростно обсуждаемой) надо делать ДО вызова функции (которая ее изменяет), так и не поняли. Начали ООП сущности привлекать зачем-то, типа smart ptr и RAII. Всё же на поверхности лежит.
байт потеряли :)
Спасибо, точно, забыл нулевой))
Или вы думаете при отладке память проверять после new актуально, а в релизе - уже нет ?
---
Допускаю, что память может не выделиться. Откройте "Как программировать на C++" Дейтела и Дейтела и увидите ассерт после каждого нью плюс рекомендации по этому поводу.
Ужос !!! Надеюсь, у вас все еще впереди.
Т.е. вылет у пользователя с ассертом, это лучше, чем вывод соответствующего сообщения, создания дампа памяти и отправки его потом разработчику?
P. S. Что за срач? Не использовать Си в программе на Си++ можно, но часто нарушается правило "Бритва Оккама" ("не плоди сущности без необходимости") .
вы неверно понимаете правило.
в реале, никогда не приходилось в с++ коде использовать функции из Си.
Даже memcpy() ?
memcpy - std::copy<>
в стандартных алгоритмах есть все: http://www.cplusplus.com/reference/algorithm/