Форум: "Основная";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
ВнизПомогите разобратся что я делаю не так? Найти похожие ветки
← →
Юрий Зотов (2002-02-01 20:49) [14]s1:="Hello World!";
s1[6]:=#0;
Label1.Caption:=s1; //Hello
Это и есть та обрезка, о которой я говорил. Идем далее.
s2:=s1;
Здесь пока еще не происходит выделения памяти для s2 и копирования тела строки s1. Вместо этого копируется значение указателя и в s1 увеличивается счетчик ссылок. Пока еще s1 и s2 указывают на одну и ту же область памяти: Pointer(s1) = Pointer(s2).
s2[6]:="?";
Вот теперь под s2 выделяется память и в нее копируется тело строки (но не до #0, а вся выделенная под тело s1 память), адрес s2 становится другим, в s1 счетчик ссылок уменьшается, а в s2 увеличивается и лишь потом в тело s2 подставляется 6-й символ. Теперь s1 и s2 - это разные строки с разными адресами.
Естественно, PChar(S1) даст "Hello", остальное будет обрезано.
А для бинарных буферов лучше использовать динамические мачссивы - array of byte. Это надежнее - Вы сами себя страхуете от ошибок.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.02.21;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.007 c