Кроме стандартных строк ShortString и AnsiString, в языке Delphi поддерживаются нуль-терминированные строки языка C, используемые процедурами и функциями Windows. Нуль-терминированная строка представляет собой индексированный от нуля массив ASCII-символов, заканчивающийся нулевым символом #0. Для поддержки нуль-терминированных строк в языке Delphi введены три указательных типа данных:
type
PAnsiChar = ^AnsiChar;
PWideChar = ^WideChar;
PChar = PAnsiChar;
|
Типы PAnsiChar и PWideChar являются фундаментальными и на самом деле используются редко. PChar - это обобщенный тип данных, в основном именно он используется для описания нуль-терминированных строк.
Ниже приведены примеры объявления нуль-терминированных строк в виде типизированных констант и переменных:
const S1: PChar = 'Object Pascal'; // #0 дописывается //автоматически S2: array[0..12] of Char = 'Delphi/Kylix'; // #0 дописывается //автоматически var S3: PChar; |
Переменные типа PChar являются указателями, а не настоящими строками. Поэтому, если переменной типа PChar присвоить значение другой переменной такого же типа, то в результате получится два указателя на одну и ту же строку, а не две копии исходной строки. Например, в результате оператора
S3 := S1; |
переменная S3 получит адрес уже существующей строки 'Object Pascal'.
Для удобной работы с нуль-терминированными строками в языке Delphi предусмотрена директива $EXTENDEDSYNTAX. Если она включена (ON), то появляются следующие дополнительные возможности:
- массив символов, в котором нижний индекс равен 0, совместим с типом PChar;
- строковые константы совместимы с типом PChar.
- указатели типа PChar могут участвовать в операциях сложения и вычитания с целыми числами; допустимо также вычитание (но не сложение!) указателей.
В режиме расширенного синтаксиса допустимы, например, следующие операторы:
S3 := S2; // S3 указывает на строку 'Delphi/Kylix' S3 := S1 + 7; // S3 указывает на подстроку 'Pascal' |
В языке Delphi существует богатый набор процедур и функций для работы с нуль-терминированными строками (см. справочник по среде Delphi).