AnsiString в Delphi

Строки в Delphi представляют собой последовательность символов. Можно разделить на 4 типа строки в Делфи:

  1. ShortString (максимальная длина – 255) используется для обратной совместимости. Нулевой символ отсутствует в конце.
  2. AnsiString (максимальная длина ˜2 Гб) используется для символов ANSI. Нулевой символ присутствует в конце.
  3. String (255 символов или до ˜2 Гб) используется для ANSI или Unicode. Нулевой символ может присутствовать или не присутствовать в конце.
  4. WideString (˜1 Гб) используется в серверах COM, а так же для символов Unicode. Нулевой символ присутствует в конце.

Подробнее хочу остановиться на строковых типах ShortString и AnsiString. Они различаются между собой организацией хранения в памяти. Строки типа ShortString хранят в своем нулевом байте число символов в строке, а в последующих байтах – сами символы (не более 255). Поэтому, если Q – строка типа ShortString, то Ord(Q[0]) – то же, что и Length(Q), возвращает длину строки. Присваивание значения Q[0] соответствует вызову функции SetLength, которая устанавливает длину строки.

Переменная типа AnsiString является указателем на динамически выделяемую область памяти, в которой хранится строка. Может существовать несколько переменных, которые ссылаются на одну и ту же строку. В этом случае в памяти хранится только один экземпляр строки. Это экономит ресурсы. В случае, если строка равна 0, то этот указатель равен nil и память под строку не выделяется. Если же строка не пустая, то в выделенной памяти хранится сама строка, ее длина и число ссылок (переменных) ссылающихся на данную строку. Если переменной типа AnsiString присваивается новое значение, то число ссылок в прежней строке уменьшается на единицу, а в новой – увеличивается на единицу. Когда число ссылок на строку становится равным 0, то строка уничтожается, освобождая место в памяти.

Длинные строки типа AnsiString

Переменные этого типа объявляются обычным образом:

Var Q1: AnsiString;

       Q2: string;

Объявление глобальных переменных или типизированных констант можно сочетать с инициализацией, причем нулевой символ в конце строки добавляется автоматически.

Var Q1: AnsiString = ‘текст’;

       Q2: string = ‘начальный тест’;

Доступ к отдельным символам строки осуществляется как к символьному массиву по индексу (индекс отсчитывается от 1, а во всех других типах длинных строк индексы отсчитываются от 0). Для строки Q1 выражение Q1[2] возвращает символ строки ‘е’ – второй символ строки. Если индекс выходит за рамки числа символов в строке, то возвращается нулевой символ ‘#0’.

Функция Length(Q1) возвращает число символов строки, не считая нулевого символа. В данном случае Length(Q1) вернет 5.

Процедура SetLength:

Procedure SetLength(var Q; NewLength: Integer);

задает новый размер NewLength строки Q. Если NewLength меньше числа символов в строке, то текст строки усекается до указанного числа символов, иначе (т. е. больше), то прежний текст сохраняется, а после него записываются нулевые символы.

Для обработки строк типа AnsiString существует ряд библиотечных функций.

. delphi максимальный размер строки
. delphi максимальный размер строки
Комментирование и размещение ссылок запрещено.