Например:
{$X+}
var A:PChar;
B:array[0..100] of char;
К переменной А можно обращаться с помощью тех же методов, что и к переменной B.
В отличии от стандартных строк, память для переменных типа PСhar не выделяется автоматически в начале программы, что накладывает определенные ограничения на использование данного типа. Например, попытка обратиться к такой переменной как к массиву до присваивания ей некоторого значения обречена на провал. Значение любой переменной PChar до присваивания ей некоторого значения всегда равно nil (см. параграф 1.7.3).
Например:
{$X+}
var s1,s2:PChar;
begin
s1:='Номер 1';
writeln(s1);
s1[6]:='2'; {здесь мы совершенно правомерно обращаемся к седьмому символу строки s1, так как ей заранее было присвоено константное значение, в результате чего s1 указывает на некоторую область памяти}
writeln(s1);
s2[0]:='A'; s2[1]:='B'; s2[2]:='C'; {НЕВЕРНО! Переменной s2 ничего заранее присвоено не было...}
writeln(s2); {... и поэтому на экране ничего не появится}
readln;
end.
Не следует забывать, что ASCIIZ строки всегда должны заканчиваться нулем. При присваивании им строковых констант или определении типированных констант это происходит автоматически. Если же потребуется принудительно сократить длину строки, достаточно в требуемое место вставить символ с кодом 0.
Например:
const s:pchar='Казнить нельзя, помиловать';
begin
s[7]:=#0; {всего один символ недвусмысленно решает судьбу осужденного}
writeln(s);
readln;
end.
Так как строки PChar являются на самом деле указателями, то присваивание одной строки другой не создает копии значения строки. На самом деле, после такого присваивания обе строки будут указывать на одну и ту же область памяти, и все изменения в одной из них автоматически будут отражены в другой.
Например:
var s1,s2:pchar;
begin
s1:='Cтрока номер 1';
s2:=s1;
s2[13]:='2';
writeln(s1);
writeln(s2);
readln;
end.
В результате выполнения программы на экране появится:
Cтрока номер 2
Cтрока номер 2
Модуль Strings содержит большой набор функций, предназначенных для работы с ASCIIZ строками. Каждая из них может работать как с типом PChar, так и с массивом символов. К сожалению, функции, изменяющие или зависящие от регистра символов, не поддерживают русский алфавит.
Функции распределения динамической памяти |
Function StrNew(Str: PChar): PChar; Function StrDispose(Str: PChar); |
Функция StrNew выделяет блок динамической памяти и копирует туда переданную ей строку Str. Адрес выделенного блока возвращается в качестве результата. Функция StrDispose освобождает блок памяти, выделенный ранее функцией StrNew. |
Функции преобразования |
Function StrPCopy(Dest: PChar; Source: String): PChar; Function StrPas(Str: PChar): String; |
Функция StrPCopy копирует стандартную паскалевскую строку Source в ASCIIZ строку Dest и возвращает ее в качестве результата. Строка Dest должна иметь достаточный объем для сохранения строки Source. Функция StrPas совершает обратную операцию. |
Функция определения длины |
Function StrLen(Str: PChar): Word; |
Функция StrLen возвращает длину переданной ей строки |
Функции поиска |
Function StrPos(Str1, Str2: PChar): PChar; Function StrScan(Str: PChar; Chr: Char): PChar; Function StrRScan(Str: PChar; Chr: Char): PChar; |
Функция StrPos возвращает указатель на первое вхождение строки Str2 в строку Str1. Если такое вхождение отсутствует, функция возвращает nil. Функция StrScan возвращает указатель на первое, а StrRScan - на последнее вхождение символа Chr в строку Str. |
Функции контактенции |
Function StrCat(Dest, Source: PChar): PChar; Function StrLCat(Dest, Source: PChar; MaxLen: Word): PChar; |
Функция StrCat присоединяет к строке Dest строку Source и возвращает Dest. Строка Dest должна иметь достаточный объем для сохранения строки Source. Функция StrLCat присоединяет к строке Dest строку Source и возвращает Dest. Полученный результат будет иметь длину не более чем MaxLen символов. |
Функции сравнения |
Function StrComp(Str1, Str2 : PChar): Integer; Function StrIComp(Str1, Str2:PChar): Integer; Function StrLComp(Str1, Str2: PChar; MaxLen: Word): Integer; Function StrLIComp(Str1, Str2: PChar; MaxLen: Word): Integer; |
Функция StrComp сравнивает две строки и возвращает значение <0, если Str1 < Str2 =0, если Str1 = Str2 >0, если Str1 > Str2 Функция StrIComp сравнивает две строки без учета регистра. Следующие две функции сравнивают только MaxLen символов строк. |
Функции копирования |
Function StrCopy(Dest, Source: PChar): PChar; Function StrECopy(Dest, Source: Pchar): PChar; Function StrMove(Dest, Source: PChar; Count: Word): PChar; Function StrLCopy(Dest, Source: Pchar; MaxLen: Word): PChar; |
Функция StrCopy копирует строку Source в строку Dest и возвращает Dest. Функция StrECopy копирует строку Source в строку Dest и возвращает указатель на конец объединенной строки. Функция StrMove копирует Count символов из строки Source в строку Dest и возвращает Dest. Для всех трех функций строка Dest должна иметь достаточный объем для сохранения Source. Функция StrLCopy копирует максимум MaxLen символов строки Source в строку Dest и возвращает Dest. |
Функции изменения регистра |
Function StrLower(Str: PChar): PChar; Function StrUpper(Str: PChar): PChar; |
Функция StrLower переводит строку в строчные буквы. Функция StrUpper переводит строку в прописные буквы. |
Функция перехода |
Function StrEnd(Str: PChar): Pchar; |
Функция StrEnd возвращает указатель на конец строки. |