**https://repl.it/@IlyaSiganov/strdup#main.c**
Напишите функцию, которая копирует константную нуль терминальную строку в новую выделенную на куче память. Функция должна вернуть указатель на начало этой новой нультерминальной строки, которая лежит в куче.
Используйте функцию str_length
из задачи Длина строки, чтобы вычислить, сколько памяти вам надо выделить для нового куска памяти.
Используйте функцию str_copy
из задачи Копирование строк, чтобы скопировать константную строку в новый кусок памяти.
Эту функцию вам нужно будет использовать в следующих задачах, где потребуется изменять саму строку: Пример: Задом наперёд (в теорию)
#include <stdlib.h>
#include "test.h"
/**
* Копирует нультерминальную константную строку в новую аллоцированную на куче
* память. Используется, чтобы сконвертировать константный объект в изменяемй
* объект на куче. Обычно используется в алгоритмах, которые меняют саму строку.
*
* Выделеный сегмент памяти необходмо удалить вручную функцией free.
*
* Если строка string не нультерминальная, то поведение не определено.
*
* @param string нультерминальная строка, которая будет скопирована.
* @return указатель на новую строку, равную string, но которая лежит в куче.
*/
char* str_dup(const char* string) {
// TODO: напиши меня!
// используйте функцию str_copy из предыдущей практики
return string; // исправь меня!
}
void test(void) {
// Это тесты. НЕ УДАЛЯЙТЕ ИХ!
// Преподаватель будет грустить, если вы удалите тесты T_T.
// Тесты проверяют, что ваш код работает правильно.
// Если задача решена неправильно,
// то в консоли вы увидите ошибку и пояснение.
// Сдавайте лабу, когда устраните все ошибки в тестах.
// Если возникли трудности, то попросите преподавателя вам помочь ^_^.
{
char* str = str_dup("Hello world");
ASSERT_STR_EQUAL(str, "Hello world");
free(str);
}
}
int main(void) {
test();
return 0;
}