Главная » Free Pascal » Строки типа PChar Free Pascal

0

Строки типа PChar тоже относятся к строкам неограниченной длины, но способ их представления в памяти отличается от Ansi-строк. Имя переменной типа PChar тоже является указателем на значение переменной, хранящееся в куче. Но этот ука- затель не типизирован — он "знает" адрес значения, но не "знает" его длину. При- знаком конца строки типа PChar является байт с нулевым значением, который ав- томатически добавляется вслед за последним значащим символом. В момент объявления переменной типа PChar компилятор выделяет 4 байта под указатель и заносит туда константу Nil, что эквивалентно созданию пустой строки. К любому символу значения строки типа PChar можно обратиться по его индексу, отсчет ко- торых производится от 0.

Константа или переменная типа PChar может быть объявлена или создана раз- ными способами, которые демонстрируются в программе pchar_1 (листинг 5.12).

   Листинг 5 .1 2 .  Программа  pchar_1                                             

program pchar_1; const

pcs1 : PChar = ‘1 : Hello, world!';

var

pcs2 : PChar = ‘2 : Hello, world!';

ss3 : String = ‘3 : Hello, world!’+#0+’ABC'; as4 : AnsiString = ‘4 : Hello, world!';

ss5 : String[20];

begin

writeln(‘pcs1 = ‘,pcs1); writeln(‘pcs2 = ‘,pcs2); writeln(‘ ss3 = ‘,ss3); pcs2 := @ss3[1]; writeln(‘pcs2 = ‘,pcs2); pcs2 := PChar(as4); writeln(‘pcs2 = ‘,pcs2);

ss5 := ‘5 : Hello, world!’#0; pcs2 := @ss5[1]; writeln(‘pcs2 = ‘,pcs2); readln;

end.

Результаты ее работы приведены на рис. 5.11. Обратите внимание на некоторые технические детали программы pchar_1. Во-первых, когда мы собираемся присво- ить переменной типа PChar значение короткой строки, то должны сами позаботить- ся о включении в ее состав байта с нулевым кодом (#0). Во-вторых, если такой байт не является последним (см., например, значение переменной ss3), то все следую- щие за ним байты к PChar-строке не присоединяются. В-третьих, указателю PChar- строки присваивается адрес первого значащего символа короткой строки. Наконец, если указателю типа PChar надо присвоить указатель типа AnsiString, то нельзя обойтись без явного преобразования типов (PChar(as4)).

Рис. 5.11. Формирование данных типа PChar

Кроме операций ввода/вывода и присвоения над данными типа PChar можно выполнять довольно много других операций. Но все они подобно языкам C, C++ реализуются с помощью 26 процедур и функций, включенных в состав модуля Strings.

Строки типа WideString

"Широкие" строки типа WideString очень похожи на PChar-строки. Их главное отличие состоит в том, что на кодировку каждого символа в значении широкой строки отводятся два байта, в которые записывается код из таблицы Unicode. При- знаком конца значения широкого кода является двухбайтовый ноль. Естественно, что создавать значения широких строк нужно в специальном текстовом редакторе.

Для обработки широких строк можно использовать почти все подпрограммы и функции, описанные в разд. 5.2 (Length, Copy, Delete, Insert, Pos, SizeOf).

Источник: Кетков, Ю. Л., Свободное программное обеспечение. FREE PASCAL для студентов и школьников, Ю. Л. Кетков, А. Ю. Кетков. — СПб.: БХВ-Петербург, 2011. — 384 с.: ил. + CD-ROM — (ИиИКТ)

По теме:

  • Комментарии