Содержание

string.h

strlen

Возвращает количество символов строки (без учета концевого нулевого байта).

sizet_t strlen (const char* str);

strcmp

Функция принимает две строки и посимвольно сравнивает их. Результатом функции является целое число:

int strcmp (const char* str1, const char* str2);

strcat

Функция strcat объединяет две строки в одну. Она имеет следующий прототип:

char *strcat(char *destination_str, const char *source_str);''

Функция копирует символы из строки source_str в destination_str. При этом первая строка должна иметь достаточную длину, чтобы вместить вторую.

#include <stdio.h>
#include <string.h>
 
int main(void) {
  char destination[20];
  char source[20] = "Hello world";
  strcpy(destination, source);
  printf("%s\n", destination); // Hello world
  return 0;
}

strncpy

Стоит отметить, что эта функция копирует символы из source в destination, пока не встретит нулевой байт \0. Теоретически это может приводить к переполнению буфера. И для избежания этой проблемы есть другая функция - strncpy, которая в качестве третьего параметра принимает количество копируемых символов:

#include <stdio.h>
#include <string.h>
 
int main(void) {
  char destination[20];
  char source[20] = "Hello METANIT.COM!!";
  int n = 20; // количество копируемых символов
  strncpy(destination, source, 20);
  destination[n-1] = '\0';
  printf("%s\n", destination); // Hello METANIT.COM
  return 0;
}

Однако функция strncpy имеет другую проблему - скопированная строка НЕ заканчивается нулевым байтом, что опять же в будущем может привести к переполению буфера. Поэтому после копирования следует вручную устанавливать нулевой байт

strncpy_s

errno_t strncpy_s(char * destination, size_t destmax, const char * source, size_t srcmax);
<code>
 
Эта функция принимает дополнительные параметры - destmax - максимальное количество копируемых символов в буфер destination и srcmax - максимальное количество копируемых символов из строки source. В качестве результата функция возвращает информацию об ошибке:
 
<code c>
#include <stdio.h>
#include <string.h>
 
int main(void) {
  char destination[20];
  char source[] = "Hello METANIT.COM!";
  int n = 20; // количество копируемых символов
  strncpy_s(destination, n, source, n); 
  printf("%s\n", destination); // Hello METANIT.COM
  return 0;
}

strstr

Функция strstr ищет в строке определенную подстроку. Она имеет следующий прототип:

char *strstr(const char* string, const char* substring);

Функция ищет подстроку substring в строке string и возвращает указатель на символ первого вхождения подстроки, то есть по сути адрес подстроки. Если от адреса первого символа строки вычесть адрес первого входжения подстроки, то мы получим индекс подстроки в строке:

#include <stdio.h>
#include <string.h>
 
int main(void) {
  char text[20] = "Hello METANIT.COM!";
  char substring[14] = "METANIT.COM";
  char *substring_ptr = strstr(text, substring);
  // если подстрока найдена
  if(substring_ptr) {
    // вычисляем позицию подстроки в строке
    long position = substring_ptr - text;
    printf("Substring index: %ld\n", position);     // Substring index: 6
  } else { // если подстрока не найдена
    printf("Substring not found\n");
  }
  return 0;
}