Menu
CoddyTech

Revisão: wrapper de String

Parte da seção Programação Orientada a Objetos do Journey de C da Coddy. Lição 16 de 61.

challenge icon

Desafio

Fácil

Vamos criar um módulo StringObject que encapsula um array de caracteres alocado dinamicamente. Este desafio de revisão reúne todo o ciclo de vida do objeto — construtor, método somente para leitura e destrutor — trabalhando em conjunto para gerenciar a memória com segurança.

Você criará três arquivos:

  • stringobj.h: Declare uma struct StringObject com um único membro: char *text (um ponteiro para uma string alocada dinamicamente). Declare também três funções:
    • create_string: recebe uma entrada const char * e retorna um ponteiro para um novo StringObject alocado
    • print_string: recebe um const StringObject * e exibe o texto armazenado
    • free_string: recebe um StringObject * e libera toda a memória alocada
    Use guardas de inclusão com o símbolo STRINGOBJ_H.
  • stringobj.c: Implemente as três funções. Seu construtor deve alocar memória para a struct e, em seguida, alocar memória para o texto (lembre-se de usar strlen mais um para o terminador nulo) e copiar a string de entrada. Seu destrutor deve liberar na ordem inversa: primeiro o buffer interno text e, depois, a própria struct. Inclua uma verificação de NULL no destrutor por segurança.
  • main.c: Use seu módulo para criar um objeto de string, exibir seu conteúdo e, em seguida, fazer a limpeza corretamente.

Você receberá uma entrada: uma string de texto para armazenar no seu StringObject.

No arquivo principal, crie um StringObject com o texto fornecido, exiba seu conteúdo, libere a memória e, em seguida, imprima uma mensagem de confirmação.

A função print_string deve produzir a saída neste formato:

Text: {text}

Depois de liberar a memória, imprima:

Freed

Por exemplo, com a entrada Hello World, a saída seria:

Text: Hello World
Freed

Experimente você mesmo

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Remova a quebra de linha, se houver
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Crie um StringObject com o texto de entrada
    
    // TODO: Imprima a string usando print_string
    
    // TODO: Libere o StringObject usando free_string
    
    // TODO: Imprima "Freed" para confirmar a liberação da memória
    
    return 0;
}

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Compilador de C online