Написать функцию, которая возвращает массив символов с элемента 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.