netlib.narod.ru< Назад | Оглавление | Далее >

B3. Функции, оперирующие со строками: <string.h>

Имеются две группы функций, оперирующих со строками. Они определены в заголовочном файле <string.h>. Имена функций первой группы начинаются с букв str, второй — с mem. Если копирование имеет дело с объектами, перекрывающимися по памяти, то, за исключением memmove, поведение функций не определено. Функции сравнения рассматривают аргументы как массивы элементов типа unsigned char.

В приведенной ниже таблице переменные s и t принадлежат типу char *, cs и ct — типу const char *, n — типу size_t, а c — значение типа int, приведенное к типу char.

char *strcpy(s,ct)

копирует строку ct в строку s, включая '\0'; возвращает s

char *strncpy(s,ct,n)

копирует не более n символов строки ct в s; возвращает s. Дополняет результат символами '\0', если символов в ct меньше n

char *strcat(s,ct)

приписывает ct к s; возвращает s

char *strncat(s,ct,n)

приписывает не более n символов ct к s, завершая s символом '\0'; возвращает s

int strcmp(cs,st)

сравнивает cs и ct; возвращает отрицательное число, если cs<ct; 0, если cs==ct; и положительное число больше нуля, если cs>ct1

int strncmp(cs,ct,n)

сравнивает не более n символов cs и ct; возвращает отрицательное число, если cs<ct, 0, если cs==ct, и положительное число, больше нуля, если cs>ct

char *strchr(cs,c)

возвращает указатель на первое вхождение символа c в строку cs или, если такового не оказалось, NULL

char *strrchr(cs,c)

возвращает указатель на последнее вхождение символа c в строку cs или, если такового не оказалось, NULL

size_t strspn(cs,ct)

возвращает длину начального фрагмента cs, состоящего из символов, входящих в строку ct

size_t strcspn(cs,ct)

возвращает длину начального фрагмента cs, не содержащего никаких символов, входящих в строку ct

char *strpbrk(cs,ct)

возвращает указатель на первый символ в cs, который совпал с одним из символов, входящих в ct, или, если такового не оказалось, NULL

char *strstr(cs,ct)

возвращает указатель на первое вхождение ct в cs или, если такового не оказалось, NULL

size_t strlen(cs)

возвращает длину cs

char *strerror(n)

возвращает указатель на зависящую от реализации строку, соответствующую номеру ошибки n

char *strtok(s,ct)

strtok ищет в s лексему, ограниченную символами из ct; более подробное описание этой функции см. ниже


1 Здесь и ниже под такими выражениями как cs<ct не следует понимать арифметическое сравнение указателей. Подразумевается лексикографическое сравнение, т.е. cs меньше (больше) ct, если первый несовпавший элемент в cs арифметически меньше (больше) соответствующего элемента из ct.

Последовательные вызовы strtok разбивают строку s на лексемы. Ограничителем лексемы служит любой символ из строки ct. В первом вызове указатель s не равен NULL. Функция находит в строке s первую лексему, состоящую из символов, не входящих в ct; ее работа заканчивается тем, что поверх следующего символа пишется '\0' и возвращается указатель на лексему. Каждый последующий вызов, в котором указатель s равен NULL, возвращает указатель на следующую лексему, которую функция будет искать сразу за концом предыдущей. Функция strtok возвращает NULL, если далее никакой лексемы не обнаружено. Параметр ct от вызова к вызову может варьироваться.

Функции mem... предназначены для манипулирования с объектами как с массивами символов; их назначение — получить интерфейсы к эффективным программам. В приведенной ниже таблице s и t принадлежат типу void *; cs и ct — типу const void *; n — типу size_t; а c имеет значение типа int, приведенное к типу char.

void *memcpy(s, ct, n)

копирует n символов из ct в s и возвращает s

void *memmove(s, ct, n)

делает то же самое, что и memcpy, но работает и в случае «перекрывающихся» объектов.

int memcmp(cs, ct, n)

сравнивает первые n символов cs и ct; выдает тот же результат, что и функция strcmp

void *memchr(cs, c, n)

возвращает указатель на первое вхождение символа c в cs или, если среди первых n символов c не встретилось, NULL

void *memset(s, c, n)

размещает символ c в первых n позициях строки s и возвращает s


netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz