Menu
Coddy logo textTech

Повторение: String Wrapper

Часть раздела Объектно-ориентированное программирование путешествия по C на Coddy. Урок 16 из 61.

challenge icon

Задание

Легко

Давайте создадим модуль StringObject, который оборачивает динамически выделенный массив символов. Эта итоговая задача объединяет полный жизненный цикл объекта, конструктор, метод только для чтения и деструктор, которые вместе обеспечивают безопасное управление memory.

Вам нужно создать три файла:

  • stringobj.h: объявите структуру StringObject с единственным member: char *text (указатель на динамически выделенную строку). Также объявите три function:
    • create_string: принимает значение const char * и возвращает указатель на newly allocated StringObject
    • print_string: принимает значение const StringObject * и отображает сохранённый текст
    • free_string: принимает значение StringObject * и освобождает всю выделенную memory
    Используйте защиту от повторного включения с символом STRINGOBJ_H.
  • stringobj.c: Implement все три function. Ваш конструктор должен выделить memory для структуры, затем выделить memory для текста (помните о strlen плюс единице для null-терминатора) и скопировать входную строку. Деструктор должен освобождать memory в обратном порядке: сначала внутренний буфер text, затем саму структуру. Для safety добавьте проверку NULL в деструктор.
  • main.c: используйте свой модуль, чтобы создать объект строки, отобразить его содержимое, а затем корректно выполнить очистку.

На вход будет получено одно значение: текстовая string, которую нужно сохранить в вашем StringObject.

В основном файле создайте StringObject с предоставленным текстом, выведите его содержимое, освободите memory, а затем выведите сообщение подтверждения.

Функция print_string должна выводить данные в следующем формате:

Text: {text}

После освобождения выведите:

Freed

Например, при вводе Hello World результатом будет:

Text: Hello World
Freed
REQUIRED OUTPUT FORMAT: [Your translated content here]

Попробуйте сами

#include <stdio.h>
#include "stringobj.h"

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Удалить символ новой строки, если он присутствует
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Create a StringObject with the input text
    
    // TODO: Вывести строку с помощью print_string
    
    // TODO: Free the StringObject using free_string
    
    // TODO: Вывести "Freed" для подтверждения очистки
    
    return 0;
}

Все уроки раздела Объектно-ориентированное программирование

Потренируйтесь самостоятельно: Онлайн-компилятор C