Написать функцию, которая возвращает массив символов с элемента N по M из заданной строки - C (СИ)
Формулировка задачи:
Стоит задача написать функцию, которая возвращает массив символов с элемента N по M из заданной строки str.
Пишу так, но ничего не выходит:
И как потом в int main() мне какого-нибудь массиву символов присвоить то, что возвращает функция?
#include <stdio.h> char *func(char a[],int n, int m) { int i,k=0; char b[strlen(a)]; for (i=n; i<=m; i++) { b[k]=a[i]; k++; } return b; }
Решение задачи: «Написать функцию, которая возвращает массив символов с элемента N по M из заданной строки»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <assert.h> char* func(const char a[], size_t n, size_t m) { assert(n <= m); assert(m < strlen(a)); size_t len = m - n + 1; char* b = calloc(1, sizeof(char) * (len + 1)); strncpy(b, a + n, len); return b; } int main() { char* str = func("I Am Student", 2, 3); printf("[%s]", str); free(str); return 0; }
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы со строками и символами.
- Объявление функции с названием
func
, которая принимает три аргумента:const char a[]
- указатель на начало строки,size_t n
- индекс первого символа, который необходимо скопировать,size_t m
- индекс последнего символа, который необходимо скопировать.
- Проверка двух условий:
n <= m
- чтобы не было попытки копирования за пределами строки,m < strlen(a)
- чтобы не было выхода за пределы строки.
- Вычисление длины подстроки
len
как разностиm - n + 1
. - Выделение памяти под массив символов
b
с помощью функцииcalloc
. - Копирование подстроки из исходной строки в выделенный массив символов
b
с помощью функцииstrncpy
. - Возврат указателя на начало выделенного массива символов
b
. - Вывод результата работы функции
func
в консоль. - Освобождение памяти, выделенной под массив символов
str
, с помощью функцииfree
. - Завершение работы программы с возвратом значения 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д