Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблемы с переводом Ansistring в Char
Форум программистов > Системное программирование > C, С++ и С Builder > Borland C++ Builder & Kylix
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
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;
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;
Psixo
Кажется понял свою ошибку,вместо того чтобы скопировать строку из едита я присвоил указатель. Забавно получилось,сильно отвык от С, вэб программинг порой зло. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.