Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Указатель на char в структуре


Автор: FallenAngel 11.12.2007, 20:09
Доброго времени суток!
Есть код:
Код

struct dni
{
 char data[12], *zametka;
 int day, mon, year;
};

 void main()
{
 dni  *nov;
 int lenz=0; //длина введённой заметки
 nov=new dni;
 lenz=strlen(MainForm->NoteEdit->Text.c_str());
 nov->zametka=new char[lenz];
 nov->zametka=MainForm->NoteEdit->Text.c_str();
 nov->day=atoi(MainForm->DayEdit->Text.c_str());
}


В предпоследней строке в "заметку" кладётся некая строка из эдита.
В последней же, в "день" кладём число из другого эдита. Почему при последнем действии в nov->zametka попадает тоже, что и в  nov->day, и как это исправить?

Автор: zkv 11.12.2007, 20:16
Цитата(FallenAngel @  11.12.2007,  20:09 Найти цитируемый пост)
и как это исправить? 

для начала понять наверное, что нельзя так делать:
Код

 nov->zametka=new char[lenz];
 nov->zametka=MainForm->NoteEdit->Text.c_str();

этим самым ты просто скопировал указатель, притом на временный объект, да еще и память выделенную потерял.

наверное ты хотел нарисовать что-то вроде:
Код

 nov->zametka=new char[lenz];
 strcpy( nov->zametka,MainForm->NoteEdit->Text.c_str() );


но если пишешь на С++, почему не использовать std::string?

Автор: bel_nikita 11.12.2007, 20:16
Цитата(FallenAngel @ 11.12.2007,  19:09)
Есть код:
Код

struct dni
{
 char data[12], *zametka;
 int day, mon, year;
};

 void main()
{
 dni  *nov;
 int lenz=0; //длина введённой заметки
 nov=new dni;
 lenz=strlen(MainForm->NoteEdit->Text.c_str());
// memory leak!
 nov->zametka=new char[lenz];
 nov->zametka=MainForm->NoteEdit->Text.c_str();
//
 nov->day=atoi(MainForm->DayEdit->Text.c_str());
}

Так делать нельзя, для чего память выделял?

Автор: FallenAngel 11.12.2007, 20:29
Огромное Пасип!!!
Доконца ещё не разобрался с указателями на тип char.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)