Стандартная библиотека C -<string.h>
Введение
string .hЗаголовочный файл определяет тип переменной, макрос и различные функции для работы с массивами символов.
<string.h>Является заголовочным файлом в стандартной библиотеке C, предоставляющим набор функций для обработки строк и блоков памяти. Эти функции охватывают копирование строк, конкатенацию, сравнение, поиск и операции с памятью и т. д.
Переменные библиотеки
Ниже представлен тип переменной, определённый в заголовочном файле string.h:
| Порядковый номер | Переменные и описание |
|---|---|
| 1 | size_t Это беззнаковый целочисленный тип, который являетсяsizeofрезультатом ключевого слова. |
Библиотечные макросы
Ниже представлены макросы, определённые в заголовочном файле string.h:
| Порядковый номер | Макросы и описание |
|---|---|
| 1 | NULL Этот макрос является значением константы нулевого указателя. |
Библиотечные функции
Ниже представлены функции, определённые в заголовочном файле string.h:
| Порядковый номер | Функции и описание |
|---|---|
| 1 | void *memchr(const void *str, int c, size_t n) В параметреstrИщет первое вхождение символа c (беззнакового символа) в первых n байтах строки, на которую указывает. |
| 2 | int memcmp(const void *str1, const void *str2, size_t n) содержатstr1иstr2Сравнивает первые n байтов. |
| 3 | void *memcpy(void *dest, const void *src, size_t n) Копирует n символов из src вdest。 |
| 4 | void *memmove(void *dest, const void *src, size_t n) другой, используемый для копирования изsrcкопирует n символов вdestфункции. |
| 5 | void *memset(void *str, int c, size_t n) Копирует указанное значение c в первые n байтов области памяти, на которую указывает str. |
| 6 | char *strcat(char *dest, const char *src) содержитsrcДобавляет строку, на которую указываетdestВ конец строки, на которую указывает |
| 7 | char *strncat(char *dest, const char *src, size_t n) Добавляет строку, на которую указываетsrc, в конец строки, на которую указываетdest, до n символов. |
| 8 | char *strchr(const char *str, int c) В параметреstrищет первое вхождение символа c (беззнакового символа) в строке, на которую он указывает. |
| 9 | int strcmp(const char *str1, const char *str2) Сравнивает строку, на которую указываетstr1, со строкой, на которую указываетstr2. |
| 10 | int strncmp(const char *str1, const char *str2, size_t n) Сравниваетstr1иstr2, сравнивая не более первых n байтов. |
| 11 | int strcoll(const char *str1, const char *str2) Сравниваетstr1иstr2, причём результат зависит от настройки локали LC_COLLATE. |
| 12 | char *strcpy(char *dest, const char *src) Копирует строку, на которую указываетsrc, вdest。 |
| 13 | char *strncpy(char *dest, const char *src, size_t n) holdsrcстрока, на которую указывает, копируется вdest, копируя не более n символов. |
| 14 | size_t strcspn(const char *str1, const char *str2) Считает, сколько последовательных символов в начале строки str1 не содержат ни одного из символов строки str2. |
| 15 | char *strerror(int errnum) Ищет во внутреннем массиве номер ошибки errnum и возвращает указатель на строку сообщения об ошибке. |
| 16 | size_t strlen(const char *str) Вычисляет длину строки str, не включая завершающий нулевой символ. |
| 17 | char *strpbrk(const char *str1, const char *str2) Ищет в строкеstr1первое вхождение вstr2символа из символов, не включая завершающий нулевой символ. То есть она проверяет символы строки str1 один за другим; когда проверяемый символ также находится в строке str2, она останавливается и возвращает позицию этого символа. |
| 18 | char *strrchr(const char *str, int c) В параметреstrищет последнее вхождение символа c (беззнакового символа) в строке, на которую указывает. |
| 19 | size_t strspn(const char *str1, const char *str2) Строка поискаstr1Первый символ в ..., которого нет в строкеstr2Индекс символа, встречающегося в |
| 20 | char *strstr(const char *haystack, const char *needle) В строкеhaystackНаходит первое вхождение строкиneedle(не включая завершающий нулевой символ). |
| 21 | char *strtok(char *str, const char *delim) Разбивает строкуstrна набор строк,delimв качестве разделителя. |
| 22 | size_t strxfrm(char *dest, const char *src, size_t n) Преобразует строку в соответствии с категорией LC_COLLATE текущей локали программы.srcпервыеnсимволы и помещает их в строкуdestВ. |
Пример
Далее используется<string.h>Примеры некоторых функций в
Копирование строк:
Пример
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
strcpy(dest, src);
printf("Copied string: %s\n", dest);
return 0;
}
Конкатенация строк:
Пример
#include <string.h>
int main() {
char str1[50] = "Привет";
char str2[] = ", мир!";
strcat(str1, str2);
printf("Объединённая строка: %s\n", str1);
return 0;
}
Сравнение строк:
Пример
#include <string.h>
int main() {
char str1[] = "Привет";
char str2[] = "Мир";
int result = strcmp(str1, str2);
if (result == 0) {
printf("Строки равны\n");
} else {
printf("Строки не равны\n");
}
return 0;
}
Находит первое вхождение символа в строке:
Пример
#include <string.h>
int main() {
char str[] = "Hello, World!";
char *ptr = strchr(str, 'o');
if (ptr != NULL) {
printf("Первое вхождение 'o' найдено на позиции: %ld\n", ptr - str);
} else {
printf("Character not found"\n");
}
return 0;
}
Копирование блоков памяти:
Пример
#include <string.h>
int main() {
char src[] = "Hello, World!";
char dest[50];
memcpy(dest, src, strlen(src) + 1);
printf("Copied memory: %s\n", dest);
return 0;
}
Примечания
- При использовании строковых функций убедитесь, что буфер назначения имеет достаточно места для хранения результата, чтобы избежать переполнения буфера.
strncpyиstrncatМожно указать максимальное количество символов для копирования или конкатенации, что помогает предотвратить переполнение буфера.strtokФункция не является потокобезопасной, так как внутри использует статические переменные для сохранения контекста. При использовании в многопоточной среде необходимо использоватьstrtok_rфункцию.- Использование
memcpyкогда ... области исходной и целевой памяти не должны перекрываться. Если перекрытие может произойти, следует использоватьmemmove。
Понимая и используя<string.h>Предоставленные функции позволяют удобно выполнять операции со строками и памятью, обеспечивая более эффективные и надёжные программы на C.