top of page

Тип pchar

    В язык программирования Pascal введен тип pchar, который описывает так называемые длинные (или ASCIIZ) строки. В переменных типа string длина строки записывается в нулевом байте, а т.к. в 1 байт нельзя записать значение, превосходящее 255, то и длина переменной типа string не может превосходить 255 символов. Переменная типа pchar – это строка, которая может иметь длину до 65534 символов. Длина таких строк не указывается явно: строка начинается с первого символа и замыкается символом #0. Поскольку тип pchar определяется как указатель на символ, ASCIIZ-строки создаются в динамической памяти. С типом pchar совместим любой символьный массив, левая граница которого равна нулю. ASCIIZ-строки индексируются с отсчетом значений индекса от 0. Строковые константы также могут быть записаны в переменные типа pchar. Для вывода ASCIIZ-строк применимы операторы write и writeln.

 

Пример использования ASCIIZ-строк:

 

  1. const

  2.     ch_arr: array[0..20] of char='Hello World!';

  3. var

  4.     p_str: pchar;

  5. begin

  6.     p_str :=ch_arr;

  7.     writeln(p_str);

  8.     p_str[4] :=#0;

  9.     writeln(ch_arr);

  10.     readln

  11. end.

 

    В программе символьный массив объявлен в виде типизированной константы. Поскольку под него отведены 21 байт, его содержимое нужно было бы задавать строкой из 21 символа; однако в языке программирования Паскаль строковая константа, длина которой меньше количества элементов символьного массива, также записывается в символьный массив с автоматическим заполнением конца массива символом #0. В приведенной программе осуществляется коррекция переменной p_str, что меняет содержимое массива ch_arr, т.к. переменная p_str после присваивания p_str :=ch_arr просто ссылается на этот массив и оперирует областью памяти, которую он занимает. Поэтому выражение p_str[4] :=#0 изменяет длину строки ch_arr до четырех символов.

 

    ASCIIZ-строка может быть объявлена типизированной константой, но ее длина в этом случае не может превосходить 255 символов. Например:

 

  1. const

  2.     pch: pchar='My name is ';

 

    К данным типа pchar с помощью операции сложения можно добавлять целые значения, что соответствует смещению начала ASCIIZ-строки на указанное число позиций. Аналогично выполняется операция вычитания. Введена также операция вычитания между двумя ASCIIZ-строками, результатом которой является целочисленное значение, соответствующее смещению в памяти начала одной ASCIIZ-строки по отношению к началу другой.

 

  1. const

  2.     pch1: pchar='hello world';

  3.     pch2: pchar='привет мир';

  4. var

  5.     p_str: pchar;

  6.     n: longint;

  7. begin

  8.     p_str :=pch1 + 6;

  9.     writeln(p_str); // world

  10.     writeln(pch2 + 7); // мир  

  11.     p_str :='This is world';

  12.     writeln(p_str);  

  13.     n :=pch2 - pch1;

  14.     writeln(n);

  15.     readln

  16. end.

 

Значение n показывает взаимное смещение в памяти двух ASCIIZ-строк.
Основные средства по работе с ASCIIZ-строками сосредоточены в модуле Strings.

bottom of page