Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > TStringList


Автор: Kirgston 21.4.2011, 20:12
Доброго времени суток! Собственно случился странный казус. Может я это... мат часть не того... но вызывая :

Код

    TStringList *tmp = new TStringList;
    tmp->Add(L"123");
    tmp->Strings[0][0] = 0;
    UnicodeString ss = tmp->Strings[0];


я получаю всё тот же 123. Вызовы тех же Delete & Insert & blablabla() бесполезны. Это из разряда "рид онли" ? Как обойти данный сарказм? =) Я конечно знаю как можно обойти... но это слишком не красиво  smile 

Автор: Kirgston 21.4.2011, 20:36
Ошибся... оказывается  tmp->Strings[0] = L"321" работает нормально зато tmp->Strings[0].Delete(1,1); нивкакую... я дурак или как? smile 

Автор: 586 21.4.2011, 22:18
tmp->Strings[0] = tmp->Strings[0].Delete(1,1);

Автор: Kirgston 22.4.2011, 07:32
Цитата(586 @  21.4.2011,  22:18 Найти цитируемый пост)
tmp->Strings[0] = tmp->Strings[0].Delete(1,1); 

Тут будет вызван конструктор копирования. Не правда ли? А можно без него?

Автор: 586 22.4.2011, 18:52
tmp->Strings[0] возвращает копию строки, а не ссылку. Поэтому, изменение того, что возвратил tmp->Strings[0] не приведёт к изменению данных в TStringList.

Подругому никак.

Либо, вместо TStringList используй std::vector - в нём можно менять строки напрямую.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)