**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;
}