1. Мегаконкурс в апреле "Приведи друзей на codeby". Дарим деньги, подписку на журнал хакер и выдаем статус "Paid Access". Подробнее ...

    Скрыть объявление

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

Тема в разделе "Borland C++ Builder & Kylix", создана пользователем Psixo, 2 июл 2006.

Наш партнер Genesis Hackspace
  1. Psixo

    Psixo Member

    Регистрация:
    21 июн 2006
    Сообщения:
    11
    Симпатии:
    0
    Вообщем следующая сиутация,на форме расположенны три элемента Edit1, RichEdit1, Button1, при клике на кнопку выполняется следующий код

    Код (Text):
    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
     
  2. zubr

    zubr Гость

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

    RichEdit1->Lines->Add( AnsiString(string));
    RichEdit1->Lines->Add(string);
    2. Можно сделать так:
    Код (Text):
    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;
     
  3. 62316e

    62316e Гость

    Код (Text):
        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;
     
  4. Psixo

    Psixo Member

    Регистрация:
    21 июн 2006
    Сообщения:
    11
    Симпатии:
    0
    Кажется понял свою ошибку,вместо того чтобы скопировать строку из едита я присвоил указатель. Забавно получилось,сильно отвык от С, вэб программинг порой зло. :)
     
Загрузка...
Похожие Темы - Проблемы переводом Ansistring
  1. nikos
    Ответов:
    29
    Просмотров:
    340
  2. lmike
    Ответов:
    18
    Просмотров:
    254
  3. VikTor1990
    Ответов:
    0
    Просмотров:
    70
  4. hitesh
    Ответов:
    6
    Просмотров:
    155
  5. Hackerelite
    Ответов:
    24
    Просмотров:
    561

Поделиться этой страницей