Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Использование строк с завершающим нулем

Строки с завершающим нулем хранятся в виде символьных масси-

вов с нулевой базой (начинающихся с 0) с индексом целого типа, то

есть в виде массива:

array[0..X] of Char;

где X - положительное ненулевое целое число. Такие массивы назы-

ваются символьными массивами с нулевой базой. Приведем некоторые

примеры описаний символьных массивов с нулевой базой, которые мо-

гут использоваться для хранения завершающихся нулем строк.

type

TIdentifier = array[0..15] of Char;

TFileName = array[0..79] of Char;

TMemoText = array[0..1023] of Char;

Более всего строки Паскаля и строки с завершающим нулем от-

личаются интенсивностью использования указателей. Borland Pascal

выполняет операции с этими указателями, используя набор правил

расширенного синтаксиса. Кроме того, в Borland Pascal имеется

встроенный тип PChar, который представляет собой указатель на

строку с завершающим нулем. В модуле System тип PChar определяет-

ся следующим образом:

type PChar = ^Char;

Правилами расширенного синтаксиса управляет директива компи-

лятора $X. В состоянии {$X+} (по умолчанию) расширенный синтаксис

разрешен. Правила расширенного синтаксиса описываются в следующих

разделах.

Символьные указатели и строковые литералы

При разрешении расширенного синтаксиса строковый литерал

совместим по присваиванию с типом PChar. Это означает, что пере-

менной типа PChar можно присвоить строковый литерал. Например:

var

P: PChar;

.

.

begin

P := 'Привет...';

end;

В результате такого присваивания указатель указывает на об-

ласть памяти, содержащую строку с завершающим нулем, являющуюся

копией строкового литерала. Компилятор записывает строковые лите-

ралы в сегмент данных, аналогично описанию "скрытых" типизирован-

ных констант:

const

TempString: array[0..14] of Char = 'Привет...'#0;

var

P: PChar;

.

.

begin

P := @TempString;

end;

Когда соответствующие формальные параметры имеют тип Char,

строковые литералы вы можете использовать как фактические пара-

метры при вызовах процедур и функций. Например, если имеется про-

цедура с описанием:

procedure PrintStr(Str: PChar);

то допустимы следующие вызовы процедуры:

procedure PrintStr('Строка для проверки');

PrintStr(#10#13);

Аналогично тому, как это происходит при присваивании, компи-

лятор генерирует строку с завершающим нулем, представляющую собой

копию литеральной строки в сегменте данных, и передает указатель

на эту область памяти в параметре Str процедуры PrintStr.

Наконец, типизированная константа типа PChar может инициали-

зироваться строковой константой. Это справедливо также для струк-

турных типов, таких как массивы PChar и записи, а также объекты

PChar.

const

Message: PChar = 'Program terminated';

Prompt: PChar = 'Enter values: ';

Digits; array [0..9] of PChar = {

'Zero', 'One', 'Two', 'Three', 'Four', 'Five',

'Six', 'Seven', Eight', 'Nine'};

Строковая выражение-константа всегда вычисляется как строка

Паскаля, даже если она инициализируется как типизированная конс-

танта типа PChar. Таким образом, строковое выражение-константа

всегда ограничено длиной в 255 символов.

Соседние файлы в предмете Программирование на Pascal