Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
15-1298375142
Empleado
2011-02-22 14:45
2011.06.19
Goto in Delphi


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


15-1298707427
RWolf
2011-02-26 11:03
2011.06.19
Подскажите подходящий grid


2-1300117377
HannibalSmith23
2011-03-14 18:42
2011.06.19
Задача Delphi


15-1298035148
Palladin
2011-02-18 16:19
2011.06.19
Почему у Спока





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский