6.3. ASCIIZ-строка
В версии 7.0 для совместимости с другими языками программирования и средой Windows введен еще один вид строк - строки, оканчивающиеся нулевым байтом - символом с кодом 0 (т. н. ASCHZ-строки). В отличие от строк типа string у этих строк не накладывается ограничение на их размер (фактически размер может быть до 65535 байтов). Этим строкам дан стандартный тип PChar. Фактически этот тип является указателем на символ (об указателях см. п. 7):
PChar = "Char,
однако применение расширенного синтаксиса (ключ {Х+} - см. п. 17.7.1) позволяет использовать такую переменную как строку, эквивалентную массиву типа
pChar = array[0..К] of Char,
где К - количество символов в строке, не считая завершающего символа с кодом 0. В отличие от типа string символ с индексом 0 здесь является первым символом строки, а последний символ с индексом К - завершающим символом с кодом 0.
При работе с ASCIIZ-строками целесообразно задавать расширенный синтаксис; в этом случае не возникают трудности при использовании различных стандартных подпрограмм, работающих со строками.
Пример. Использование строк типа PChar при расширенном синтаксисе.
program EXAMPLE12; |
|
{$X+} |
{не обязательно - используется по умолчанию} |
type |
|
T= array[0. .7] of Char; |
{массив для строки из 7 символов} |
var |
|
Str: PChar; |
|
const |
|
A: T = 'привет!'#0; |
|
begin |
|
Str : = 'ПРИВЕТ!'; |
|
WriteLn(Str); |
{вывод строки: ПРИВЕТ!} |
Str = @А; |
{допустимо также: Str:==A} |
WriteLn(Str); |
{вывод строки: привет!} |
WriteLn(Str[1l); |
{вывод символа 'р'} |
ReadLn |
|
end. |
|
Если используется ключ {$Х-}, переменная типа PChar в этом случае рассматривается как указатель на один единственный символ. В этом случае ни один и; операторов предыдущего примера, за исключением операторов Str := @A; и ReadLn, недопустимы, а оператор WriteLn(Str^), выполненный после оператора Str:=@A;, выдаст один символ "п".
Для работы с ASCIIZ-строками в версии 7.0 используются специальные стандартные модули Strings (см. п. 16.2) и WinDos (см. п. 16.6).
|