Главная страница
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
15-1298707427
RWolf
2011-02-26 11:03
2011.06.19
Подскажите подходящий grid


2-1299748767
laby
2011-03-10 12:19
2011.06.19
При вызове sp часики убрать


2-1299205296
kaini
2011-03-04 05:21
2011.06.19
Формирование строки


15-1299145221
Неважно
2011-03-03 12:40
2011.06.19
Версия Builder a


15-1299060395
Scott Storch
2011-03-02 13:06
2011.06.19
Цифровая подпись