Стандартная библиотека C -<string.h>

Введение

string .hЗаголовочный файл определяет тип переменной, макрос и различные функции для работы с массивами символов.

<string.h>Является заголовочным файлом в стандартной библиотеке C, предоставляющим набор функций для обработки строк и блоков памяти. Эти функции охватывают копирование строк, конкатенацию, сравнение, поиск и операции с памятью и т. д.

Переменные библиотеки

Ниже представлен тип переменной, определённый в заголовочном файле string.h:

Порядковый номерПеременные и описание
1size_t
Это беззнаковый целочисленный тип, который являетсяsizeofрезультатом ключевого слова.

Библиотечные макросы

Ниже представлены макросы, определённые в заголовочном файле string.h:

Порядковый номерМакросы и описание
1NULL
Этот макрос является значением константы нулевого указателя.

Библиотечные функции

Ниже представлены функции, определённые в заголовочном файле string.h:

Порядковый номерФункции и описание
1void *memchr(const void *str, int c, size_t n)
В параметреstrИщет первое вхождение символа c (беззнакового символа) в первых n байтах строки, на которую указывает.
2int memcmp(const void *str1, const void *str2, size_t n)
содержатstr1иstr2Сравнивает первые n байтов.
3void *memcpy(void *dest, const void *src, size_t n)
Копирует n символов из src вdest。
4void *memmove(void *dest, const void *src, size_t n)
другой, используемый для копирования изsrcкопирует n символов вdestфункции.
5void *memset(void *str, int c, size_t n)
Копирует указанное значение c в первые n байтов области памяти, на которую указывает str.
6char *strcat(char *dest, const char *src)
содержитsrcДобавляет строку, на которую указываетdestВ конец строки, на которую указывает
7char *strncat(char *dest, const char *src, size_t n)
Добавляет строку, на которую указываетsrc, в конец строки, на которую указываетdest, до n символов.
8char *strchr(const char *str, int c)
В параметреstrищет первое вхождение символа c (беззнакового символа) в строке, на которую он указывает.
9int strcmp(const char *str1, const char *str2)
Сравнивает строку, на которую указываетstr1, со строкой, на которую указываетstr2.
10int strncmp(const char *str1, const char *str2, size_t n)
Сравниваетstr1иstr2, сравнивая не более первых n байтов.
11int strcoll(const char *str1, const char *str2)
Сравниваетstr1иstr2, причём результат зависит от настройки локали LC_COLLATE.
12char *strcpy(char *dest, const char *src)
Копирует строку, на которую указываетsrc, вdest。
13char *strncpy(char *dest, const char *src, size_t n)
holdsrcстрока, на которую указывает, копируется вdest, копируя не более n символов.
14size_t strcspn(const char *str1, const char *str2)
Считает, сколько последовательных символов в начале строки str1 не содержат ни одного из символов строки str2.
15char *strerror(int errnum)
Ищет во внутреннем массиве номер ошибки errnum и возвращает указатель на строку сообщения об ошибке.
16size_t strlen(const char *str)
Вычисляет длину строки str, не включая завершающий нулевой символ.
17char *strpbrk(const char *str1, const char *str2)
Ищет в строкеstr1первое вхождение вstr2символа из символов, не включая завершающий нулевой символ. То есть она проверяет символы строки str1 один за другим; когда проверяемый символ также находится в строке str2, она останавливается и возвращает позицию этого символа.
18char *strrchr(const char *str, int c)
В параметреstrищет последнее вхождение символа c (беззнакового символа) в строке, на которую указывает.
19size_t strspn(const char *str1, const char *str2)
Строка поискаstr1Первый символ в ..., которого нет в строкеstr2Индекс символа, встречающегося в
20char *strstr(const char *haystack, const char *needle)
В строкеhaystackНаходит первое вхождение строкиneedle(не включая завершающий нулевой символ).
21char *strtok(char *str, const char *delim)
Разбивает строкуstrна набор строк,delimв качестве разделителя.
22size_t strxfrm(char *dest, const char *src, size_t n)
Преобразует строку в соответствии с категорией LC_COLLATE текущей локали программы.srcпервыеnсимволы и помещает их в строкуdestВ.

Пример

Далее используется<string.h>Примеры некоторых функций в

Копирование строк:

Пример

#include <stdio.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 <stdio.h>
#include <string.h>

int main() {
    char str1[50] = "Привет";
    char str2[] = ", мир!";

    strcat(str1, str2);
    printf("Объединённая строка: %s\n", str1);

    return 0;
}

Сравнение строк:

Пример

#include <stdio.h>
#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 <stdio.h>
#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 <stdio.h>
#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.

Другие расширения