Проблемы с переводом Ansistring в Char

Psixo

Member
21.06.2006
11
0
#1
Вообщем следующая сиутация,на форме расположенны три элемента Edit1, RichEdit1, Button1, при клике на кнопку выполняется следующий код

Код:
int i,j;

int string_len = Edit1->Text.Length();
char *string = new char[string_len];
memset(string, 0, string_len);
string = Edit1->Text.c_str();				 


RichEdit1->Lines->Add( AnsiString(string));
RichEdit1->Lines->Add(string);

delete string;
В итоге получается такой результат,при в воде до четырех символов в RichEdit отображается все корректно,но при вводе 4 символо вылезает артефакт,дли примера:
Ввел в Edit1: weew
Получил в RichEdit1: weew(здесь квадратик)

В чем прикол,иногда он вылазиет иногда нет 50/50
Компилю в BuilderC++ 5
 
Z

zubr

Гость
#2
1. Если твой указатель string должен указывать на Edit1->Text.c_str(), зачем вообще выделять под него динамическую память. Получается в каком то месте выделяется память, которая нигде не используется. Сделай тогда так:
Код:
char *string =NULL;
string = Edit1->Text.c_str();

RichEdit1->Lines->Add( AnsiString(string));
RichEdit1->Lines->Add(string);
2. Можно сделать так:
Код:
int string_len = Edit1->Text.Length()+1;
char *string = new char[string_len];
ZeroMemory(string, string_len);
strcpy(string, Edit1->Text.c_str());

RichEdit1->Lines->Add( AnsiString(string));
RichEdit1->Lines->Add(string);

delete string;
 
6

62316e

Гость
#3
Код:
	char *cp = new char[Edit1->Text.Length() +1];
strcpy( cp, Edit1->Text.c_str() );


RichEdit1->Lines->Add( AnsiString(Edit1->Text));
RichEdit1->Lines->Add(cp);

delete [] cp; delete cp; cp = NULL;
 

Psixo

Member
21.06.2006
11
0
#4
Кажется понял свою ошибку,вместо того чтобы скопировать строку из едита я присвоил указатель. Забавно получилось,сильно отвык от С, вэб программинг порой зло. :)