• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

Проблемы с переводом 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
 
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;
 
Код:
	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;
 
Кажется понял свою ошибку,вместо того чтобы скопировать строку из едита я присвоил указатель. Забавно получилось,сильно отвык от С, вэб программинг порой зло. :)
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы