string.h
string.h — заголовочный файл стандартной библиотеки языка Си, содержащий функции для работы со строками, оканчивающимися на 0, и различными функциями работы с памятью.
Функции, объявленные в string.h
, широко используются, так как являясь частью стандартной библиотеки, они гарантированно работают на всех платформах, поддерживающих Си. Кроме этого, строковые функции работают только с набором символов ASCII или его совместимыми расширениями, такими как ISO-8859-1; многобайтовые кодировки такие как 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 *, int z, size_t);
|
заполняет область памяти одним байтом z |
char *strcat(char *dest, const char *src);
|
дописывает строку src в конец dest |
char *strncat(char *dest, const char *src, size_t n);
|
дописывает не более n начальных символов строки src (или всю src, если её длина меньше) в конец dest |
char *strchr(const char *s, int c);
|
возвращает адрес символа c в строке s, начиная с головы, или NULL, если строка s не содержит символ c |
char *strrchr(const char *s, int c);
|
возвращает адрес символа c в строке s, начиная с хвоста, или NULL, если строка s не содержит символ c |
int strcmp(const char *, const char *);
|
лексикографическое сравнение строк (возвращает "0", если строки одинаковые, положительное, если первая строка больше, и отрицательное, если меньше) |
int strncmp(const char *, const char *, size_t);
|
лексикографическое сравнение первых n байтов строк |
int strcoll(const char *, const char *);
|
лексикографическое сравнение строк с учетом локали collating order |
char *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 *);
|
возвращает длину строки |
size_t strspn(const char *s, const char *accept);
|
определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, перечисленных в accept |
size_t strcspn(const char *s, const char *reject);
|
определяет максимальную длину начальной подстроки, состоящей исключительно из байтов, не перечисленных в reject |
char *strpbrk(const char *s, const char *accept);
|
находит первое вхождение любого символа, перечисленного в accept |
char *strstr(const char *haystack, const char *needle);
|
находит первое вхождение строки needle в haystack |
char *strtok(char *, const char *);
|
преобразует строку в последовательность токенов. Не потоко-безопасная, не реентерабельная. |
size_t strxfrm(char *dest, const char *src, size_t n);
|
создает оттранслированную копию строки, такую, что дословное сравнение её (strcmp) будет эквивалентно сравнению с коллатором. |
Расширения к ISO CПравить
Имя | Примечания | Определена в |
---|---|---|
char *strdup(const char *);
|
создает копию строки и возвращает указатель на неё | POSIX; первоначально расширение в BSD |
errno_t strcpy_s(char *restrict s1, rsize_t s1max, const char *restrict s2);
|
вариант strcpy с контролем границ
|
ISO/IEC WDTR 24731 |
void *mempcpy(void *dest, const void *src, size_t n);
|
вариант memcpy с возвратом байта, следующего за последним записанным
|
GNU |
void *memccpy(void *dest, const void *src, int c, size_t n);
|
копирует до n байт из одной области памяти в другую (не должны пересекаться), останавливаясь при встрече символа c | UNIX 98? |
int *strerror_r(int, char *, size_t);
|
возвращает строкое представление кода ошибки errno (потоко-безопасная; небольшая разница в семантике между GNU и XSI/POSIX) | GNU, POSIX |
size_t strlcpy(char *dest, const char *src, size_t n);
|
вариант strcpy с контролем границ
|
первоначально OpenBSD, теперь также FreeBSD, Solaris, Mac OS X |
char *strtok_r(char *, const char *, char **);
|
потоко-безопасная реентерабельная версия strtok | POSIX |
char *strsignal(int sig);
|
по аналогии с strerror , возвращает строковое представление сигнала sig (не потоко-безопасная)
|
BSDs, Solaris, Linux |
СсылкиПравить
string.h
— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)