string.h — заголовочный файл стандартной библиотеки языка Си, содержащий функции для работы с нуль-терминированными строками и памятью.

Функции, объявленные в string.h, широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Кроме этого, строковые функции работают только с набором символов ASCII или его совместимыми расширениями, такими как CP437, ISO 8859-1 или Windows-1252; многобайтовые кодировки такие как UTF-8 будут работать, с отличием, что «длина» строки будет определяться как число байтов, а не число символов Юникода, которым они соответствуют. Несовместимые с ASCII строки обычно обрабатываются кодом описанным в wchar.h.

Большинство функций string.h не производят никакого выделения памяти и контроля границ; эта обязанность целиком возлагается на программиста.

Константы и типы

Имя ПримечанияNULL расширяется в null pointer; то есть, значение, которое гарантированно не является валидным адресом объекта в памяти.size_t беззнаковое целое, имеющее тот же тип, что и результат оператора sizeof.

Функции

Имя Примечанияvoid *memcpy(void *dest, const void *src, size_t n);копирует n байт из области памяти src в dest, которые не должны пересекаться, в противном случае результат не определён (возможно как правильное копирование, так и нет)void *memmove(void *dest, const void *src, size_t n);копирует n байт из области памяти src в dest, которые в отличие от memcpy могут перекрыватьсяvoid *memchr(const char *s, char c, size_t n);возвращает указатель на первое вхождение значения c среди первых n байтов s или NULL, если не найденоint memcmp(const char *s1, const char *s2, size_t n);сравнивает первые n символов в областях памятиvoid *memset(char *dest, char value, size_t size);заполняет область памяти одним байтом valuechar *strcat(char *dest, const char *src);дописывает строку src в конец destchar *strncat(char *dest, const char *src, size_t n);дописывает не более n начальных символов строки src (или всю src, если её длина меньше) в конец destchar *strchr(const char *s, int c);возвращает адрес символа c в строке s, начиная с головы, или NULL, если строка s не содержит символ cchar *strrchr(const char *s, int c);возвращает адрес символа c в строке s, начиная с хвоста, или NULL, если строка s не содержит символ cint strcmp(const char *s1, const char *s2);лексикографическое сравнение строк (возвращает "0", если строки одинаковые, положительное, если первая строка больше, и отрицательное, если меньше)int strncmp(const char *s1, const char *s2, size_t n);лексикографическое сравнение первых n байтов строкint strcoll(const char *s1, const char *s2);лексикографическое сравнение строк с учетом локали collating orderchar *strcpy(char *toHere, const char *fromHere);копирует строку из одного места в другоеchar *strncpy(char *toHere, const char *fromHere, size_t n);копирует до n байт строки из одного места в другоеchar *strerror(int);возвращает строковое представление сообщения об ошибке errno (не потоко-безопасная)size_t strlen(const char *str);возвращает длину строкиsize_t strspn(const char *s, const char *accept);определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, перечисленных в acceptsize_t strcspn(const char *s, const char *reject);определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, не перечисленных в rejectchar *strpbrk(const char *s, const char *accept);находит первое вхождение любого символа, перечисленного в acceptchar *strstr(const char *haystack, const char *needle);находит первое вхождение строки needle в haystackchar *strtok(char *dest, const char *src);преобразует строку в последовательность токенов. Не потоко-безопасная, не реентерабельная.size_t strxfrm(char *dest, const char *src, size_t n);создает оттранслированную копию строки, такую, что дословное сравнение её (strcmp) будет эквивалентно сравнению с коллатором.

Расширения к ISO C Имя Примечания Определена вchar *strdup(const char *);создает копию строки и возвращает указатель на неёPOSIX; первоначально расширение в BSDerrno_t strcpy_s(char *restrict s1, rsize_t s1max, const char *restrict s2);вариант strcpy с контролем границISO/IEC WDTR 24731void *mempcpy(void *dest, const void *src, size_t n);вариант memcpy с возвратом байта, следующего за последним записаннымGNUvoid *memccpy(void *dest, const void *src, int c, size_t n);копирует до n байт из одной области памяти в другую (не должны пересекаться), останавливаясь при встрече символа cUNIX 98?int *strerror_r(int, char *, size_t);возвращает строкое представление кода ошибки errno (потоко-безопасная; небольшая разница в семантике между GNU и XSI/POSIX)GNU, POSIXsize_t strlcpy(char *dest, const char *src, size_t n);вариант strcpy с контролем границпервоначально OpenBSD, теперь также FreeBSD, Solaris, Mac OS Xchar *strtok_r(char *, const char *, char **);потоко-безопасная реентерабельная версия strtokPOSIXchar *strsignal(int sig);по аналогии с strerror, возвращает строковое представление сигнала sig (не потоко-безопасная)BSDs, Solaris, Linux

Ссылки