Системное программирование в UNIX средствами Free Pascal

       

Процедура strcat присоединяет строку s2


uses strings;
Function StrCat(s1, s2:PChar):PChar;
Function StrLCat(s1, S2:PChar; length:Longint):PChar;
Function StrComp(S1, S2:PChar):Longint;
Function StrLComp(S1,S2:PChar; length:Longint):Longint;
Function StrIComp(S1,S2:PChar):Longint;
Function StrLIComp(S1,S2:PChar; length:Longint):Longint;
Function StrCopy(s1, s2:PChar):PChar;
Function StrLCopy(s1, S2:PChar; length:Longint):PChar;
Function StrMove(s1, S2:PChar; MaxLen:Longint):PChar;
Function StrNew(s1:PChar):PChar;
Function StrLen(s1:PChar):Longint;
Function StrScan(s1: PChar; C:Char):PChar;


Function StrRScan(s1:PChar; C:Char):PChar;
Function StrPos(S1,S2:PChar):PChar;
uses stdio;
function strpbrk(const s1, s2:pchar):pchar;
function strspn(const s1, s2:pchar):longint;
function strcspn(const s1, s2:pchar):longint;
function strtok(s1:pchar; const s2:pchar):pchar; (* Первый вызов *)
function strtok(nil; const s2:pchar):pchar; (* Последующие вызовы *)
Процедура strcat присоединяет строку s2 к концу строки s1. Процедура strlcat делает то же самое, но добавляет при этом не более length символов. Обе процедуры возвращают указатель на строку s1. Пример использования процедуры strcat:
strcat(fileprefix, '.dat');
Если переменная fileprefix первоначально содержала строку file, то после выполнения процедуры она будет содержать строку file.dat. Следует отметить, что процедура strcat изменяет строку, на которую указывает ее первый аргумент. Таким же свойством обладают и процедуры strlcat, strcopy, strlcopy и strtok. Программист должен убедиться, что размер первого аргумента этих процедур достаточно велик, чтобы вместить результат выполнения соответствующей операции.
Процедура strcomp сравнивает две строки s1 и s2. Если возвращаемое значение положительно, то это означает, что строка s1
лексикографически «больше», чем строка s2, в соответствии с порядком расположения символов в наборе символов ASCII. Если оно отрицательно, то это означает, что строка s1 «меньше», чем строка s2. Если же возвращаемое значение равно нулю, то строки совпадают. Процедура strlcomp аналогична процедуре strcomp, но сравнивает только первые length символов. Процедуры stricomp и strlicomp выполняют те же проверки, но игнорируют регистр символов. Пример использования процедуры strcomp:


if strcmop (token, 'print') = 0 then
begin
  (* Обработать ключевое слово print *)
end;
Процедура strcopy подобна процедуре strcat. Она копирует содержимое строки s2
в строку s1. Процедура strlcopy копирует в точности length символов, отбрасывая ненужные символы (что означает, что строка s1
может не заканчиваться нулевым символом) или записывая нулевые символы вместо недостающих символов строки s2. Процедура strnew возвращает указатель на копию строки s1. Возвращаемый процедурой
strnew указатель может быть передан функции free, так как память выделяется при помощи функции malloc.
Процедура strlen просто возвращает длину строки s1. Другими словами, она возвращает число символов в строке s1
до нулевого символа, обозначающего ее конец.
Процедура strscan возвращает указатель на первое вхождение символа с
(который передается в параметре типа char) в строке s1 или nil, если символ в строке не обнаружен. Процедура strpos возвращает адрес первого вхождения подстроки s2
в строке s1 (или nil, если подстрока не найдена). Процедура strrscan точно так же ищет последнее вхождение символа с. В главе 4 процедура strrscan была использована для удаления пути из полного маршрутного имени файла:
(* Выделяем имя файла из полного маршрутного имени *)
filename := strscan(pathname, '/');
Процедура strpbrk возвращает указатель на первое вхождение в строке s1
любого символа из строки s2 или нулевой указатель, если таких вхождений нет.
Процедура strspn возвращает длину префикса строки s1, который состоит только из символов, содержащихся в строке s2. Процедура strcspn возвращает длину префикса строки s1, который не содержит ни одного символа из строки s2.
И, наконец, процедура strtok позволяет программе разбить строку s1
на лексические единицы (лексемы). В этом случае строка s2
содержит символы, которые могут разделять лексемы (например, пробелы, символы табуляции и перевода строки). Во время первого вызова, для которого первый аргумент равен s1, указатель на строку s1
запоминается, и возвращается указатель на первую лексему. Последующие вызовы, для которых первый аргумент задается равным nil, возвращают следующие лексемы из строки s1. Когда лексем в строке больше не останется, возвращается нулевой указатель.

Содержание раздела