String.h

Стандартная библиотека
языка программирования С

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); заполняет область памяти одним байтом value
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 *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 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 *str); возвращает длину строки
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 *dest, const char *src); преобразует строку в последовательность токенов. Не потоко-безопасная, не реентерабельная.
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

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.