Menu
Coddy logo textTech

Resumen: String Wrapper

Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 16 de 61.

challenge icon

Desafío

Fácil

Vamos a construir un módulo StringObject que envuelve un array de caracteres asignado dinámicamente. Este desafío de repaso reúne el ciclo de vida completo de un objeto (constructor, método de solo lectura y destructor) trabajando juntos para gestionar la memoria de forma segura.

Crearás tres archivos:

  • stringobj.h: Declara una estructura StringObject con un único miembro: char *text (un puntero a una cadena asignada dinámicamente). También declara tres funciones:
    • create_string — toma un const char * de entrada y devuelve un puntero a un StringObject recién asignado.
    • print_string — toma un const StringObject * y muestra el texto almacenado.
    • free_string — toma un StringObject * y libera toda la memoria asignada.
    Usa guardas de inclusión con el símbolo STRINGOBJ_H.
  • stringobj.c: Implementa las tres funciones. Tu constructor debe asignar memoria para la estructura, luego asignar memoria para el texto (recuerda strlen más uno para el terminador nulo) y copiar la cadena de entrada. Tu destructor debe liberar en orden inverso: primero el búfer interno text y luego la estructura misma. Incluye una comprobación de NULL en tu destructor por seguridad.
  • main.c: Usa tu módulo para crear un objeto de cadena, mostrar su contenido y luego realizar la limpieza adecuadamente.

Recibirás una entrada: una cadena de texto para almacenar en tu StringObject.

En tu archivo principal, crea un StringObject con el texto proporcionado, imprime su contenido, libera la memoria y luego imprime un mensaje de confirmación.

La función print_string debe mostrar la salida en este formato:

Text: {text}

Después de liberar, imprime:

Freed

Por ejemplo, con la entrada Hello World, la salida sería:

Text: Hello World
Freed

Pruébalo tú mismo

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Eliminar el salto de línea si está presente
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Crear un StringObject con el texto de entrada
    
    // TODO: Imprimir la cadena usando print_string
    
    // TODO: Liberar el StringObject usando free_string
    
    // TODO: Imprimir "Freed" para confirmar la limpieza
    
    return 0;
}

Todas las lecciones de Object Oriented Programming