Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.06.19;
Скачать: CL | DM;

Вниз

Тип данных 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.009 c
6-1234896883
Индеец
2009-02-17 21:54
2011.06.19
IdCookieManager не сохраняются куки


15-1298669393
Юрий
2011-02-26 00:29
2011.06.19
С днем рождения ! 26 февраля 2011 суббота


1-1257256989
Igorishe
2009-11-03 17:03
2011.06.19
предварительный просмотр


3-1260823039
Motzart
2009-12-14 23:37
2011.06.19
Настройка Dataset


2-1299929528
mefodiy
2011-03-12 14:32
2011.06.19
Ввод со сканера штрих-кодов