Как разбить строку на подстроки и определить их в динамический массив строк с помощью си?

Для разбиения строки на подстроки и определения их в динамический массив строк с использованием языка программирования C можно использовать следующий подход:

1. Включить необходимые библиотеки:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

2. Создать функцию, которая будет разбивать строку на подстроки:

char** splitString(const char* input, const char* delimiter, int* count) {
  char* copy = strdup(input); // Создаем копию входной строки
  char* token = strtok(copy, delimiter); // Получаем первую подстроку

  // Считаем количество подстрок
  int numTokens = 0;
  while (token) {
    token = strtok(NULL, delimiter);
    numTokens++;
  }

  // Выделяем память для массива строк (динамического массива)
  char** substrings = malloc(numTokens * sizeof(char*));

  // Разбиваем исходную строку на подстроки
  int i = 0;
  token = strtok(input, delimiter);
  while (token) {
    substrings[i] = malloc((strlen(token) + 1) * sizeof(char));
    strcpy(substrings[i], token);
    token = strtok(NULL, delimiter);
    i++;
  }

  // Освобождаем копию строки
  free(copy);

  *count = numTokens;
  return substrings;
}

3. Пример использования функции:

int main() {
  const char* input = "раз, два, три, четыре, пять";
  const char* delimiter = ", ";
  int count;

  // Вызываем функцию splitString для разбиения строки
  char** substrings = splitString(input, delimiter, &count);

  // Выводим результаты
  for (int i = 0; i < count; i++) {
    printf("%sn", substrings[i]);
  }

  // Освобождаем память, занимаемую под подстроки
  for (int i = 0; i < count; i++) {
    free(substrings[i]);
  }
  free(substrings);

  return 0;
}

В данном примере строка "раз, два, три, четыре, пять" разбивается на подстроки с разделителем ", ". Результат выводится на экран, а затем выделенная под подстроки динамическая память освобождается.