• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

  • Автор темы Psixo
  • Дата начала
P

Psixo

Вообщем следующая сиутация,на форме расположенны три элемента 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

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

Код:
	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;
 
P

Psixo

Кажется понял свою ошибку,вместо того чтобы скопировать строку из едита я присвоил указатель. Забавно получилось,сильно отвык от С, вэб программинг порой зло. :)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!