string.h

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

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

Більшість функцій string.h не роблять ніякого виділення пам'яті і контролю меж; цей обов'язок цілком лягає на плечі програміста.

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

[ред. | ред. код]
Ім'я Примітки
NULL розширюється в нульовий вказівник; тобто, значення, яке гарантовано не є валідною адресою об'єкту в пам'яті.
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 void *s, char c, size_t n); Повертає вказівник на перше входження з в перших n байтах s, або NULL, якщо не знайдено
int memcmp(const void *s1, const void *s2, size_t n); порівнює перші n символів в областях пам'яті
void *memset(void *, int z, size_t); заповнює область пам'яті одним байтом z
char *strcat(char *dest, const char *src); дописує рядок src в кінець dest
char *strncat(char *dest, const char *, size_t); дописує не більше n початкових символів рядка src (або всю src, якщо її довжина менше) у кінець dest
char *strchr(const char *, int); шукає символ у рядку, починаючи з голови і повертає його адресу, або NULL якщо не знайдений
char *strrchr(const char *, int); шукає символ у рядку, починаючи з хвоста і повертає його адресу, або NULL якщо не знайдений
int strcmp(const char *, const char *); лексикографічне порівняння рядків
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

Посилання

[ред. | ред. код]