Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
ВнизТип данных String Найти похожие ветки
← →
ssnakess © (2011-03-11 12:02) [0]Доброго времени суток!
Тип String до 256 символов представляет собой массив где элемент с индексом 0 хранит в себе длину строки. Дельфи позволяет объявить переменную типа String и записать в неё строку более чем 255 символов. Подскажите, что из себя будет представлять переменная в этом случае?
Может быть PChar?
← →
Сергей М. © (2011-03-11 12:07) [1]Указатель это (в дан.случае на элемент с индексом 0).
← →
ssnakess © (2011-03-11 12:13) [2]
> Указатель это (в дан.случае на элемент с индексом 0).
но если строка более 255 символов, то элемент с индексом 0 не будет длиной строки? Как тогда хранится строка?
← →
clickmaker © (2011-03-11 12:16) [3]> Как тогда хранится строка?
по смещению -4 - длина строки. Сама строка лежит, начиная с 0-го байта, как обычный массив
← →
ssnakess © (2011-03-11 12:19) [4]
> clickmaker © (11.03.11 12:16) [3]
спасибо :)
← →
Сергей М. © (2011-03-11 12:21) [5]
> если строка более 255 символов
С чего она будет больше ? Ты же ведешь речь именно о ShortString, насколько я понял ..
> Как тогда хранится строка?
Любая строковая переменная с неуказанной явно длиной в адр.пространстве процесса представлена указателем.
← →
Anatoly Podgoretsky © (2011-03-11 12:25) [6]
> String и записать в неё строку более чем 255 символов.
Может и меньше и элемента с индексом 0 совсем нет. Если только явно не указать длину.
← →
Anatoly Podgoretsky © (2011-03-11 12:26) [7]
> но если строка более 255 символов, то элемент с индексом
> 0 не будет длиной строки? Как тогда хранится строка?
Устройство строк хорошо описано в справке.
← →
Юрий Зотов © (2011-03-11 12:28) [8]> ssnakess © (11.03.11 12:02)
> Тип String до 256 символов представляет собой массив где элемент с
> индексом 0 хранит в себе длину строки.
Это тип ShortString. А тип String - это либо ShortString, либо AnsiString, в зависимости от настроек компилятора. В старых версиях Delphi по умолчанию тип String - это AnsiString.
> Дельфи позволяет объявить переменную типа String и записать в неё
> строку более чем 255 символов.
Это тип AnsiString (в старых версиях Delphi).
> что из себя будет представлять переменная в этом случае?
> Может быть PChar?
Не совсем. Переменная типа AnsiString - это, как и PChar, действительно указатель на тело строки, заканчивающееся символом #0 (и поэтому тип AnsiString совместим с PChar, что позволяет использовать простое приведение типа, когда это нужно).
Но если PChar - это только указатель на тело строки, то AnsiString - это одновременно еще и указатель на структуру, в которой (по отрицательным смещениям) хранятся еще длина строки и счетчик ссылок на нее.
Кроме того, тип AnsiString - это тип с управляемым временем жизни (в отличие от PChar). Компилятор генерит код, автоматически управляющий значением счетчика ссылок и если тот становится равным нулю, то строка уничтожается.
PS
> All
Могу спорить, что сейчас сюда придет Великий Непотопляемый Гуру и расскажет мне про WideString и Юникод.
:o)
← →
OW © (2011-03-11 12:50) [9]если только ветка долго в топе провисит :)
← →
ssnakess © (2011-03-11 13:24) [10]> All
спасибо :)
PS
как обычно, пока не задашь вопрос на форуме, ничего не на гуглишь на искомую тему :) как только спросишь, сразу же находишь отличную статью :)
вот например.
http://www.sources.ru/magazine/0804/delphistr.html
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2011.06.19;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.003 c