Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизTStringList.AddObject добавление строки вместо TObject Найти похожие ветки
← →
Unknown user © (2012-03-06 11:24) [0]Подскажите, можно ли так добавлять строки к TStringList?
var
AnotherString: string;
TStringList.AddObject(S, Pointer(AnotherString))
или обязательно делать копию строки
TStringList.AddObject(S, Pointer(NewStr(AnotherString)))
Строки имеют счетчик ссылок и вроде бы такой каст не должен нарушить его работу. Правильно?
← →
Ega23 © (2012-03-06 11:33) [1]Что ты хочешь сделать?
← →
Медвежонок Пятачок © (2012-03-06 11:36) [2]и вроде бы такой каст не должен нарушить его работу.
он и не нарушит.
тем, что никак не повлияет на количество ссылок на строку. и как только она выйдет из области видимости то в списке будет невалидный указатель
← →
Dimka Maslov © (2012-03-06 11:37) [3]Если уж очень надо - объяви класс с единственным членом - строкой и пудзырь его экземпляры в TStrings.Objects. Только потом не забывай вовремя удалять их.
← →
Игорь Шевченко © (2012-03-06 11:40) [4]
> Подскажите, можно ли так добавлять строки к TStringList?
лучше через KEY=VALUE, TStringList умеет работать с такими строками
читать TStrings.Names, TStrings.Values, и т.п.
← →
Unknown user © (2012-03-06 11:50) [5]Все понял, спасибо.
Это мне приходится чужой код рихтовать, тут вообще подход в стиле
var Res:PChar; S: String;
S:=Socket.RemoteHost;
GetMem(Res,16); FillChar(Res[0],16,32); Res[15]:=#0;
Move(S[1],Res[0],Length(S));
Usernames.AddObject(UserName,TObject(Res));
Мало что S может быть длиннее 16 символов, а памяти выделяется только 16 байт (это еще AnsiString). Так еще и выделенная память нигде не освобождается.
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.061 c