Resumen: String Wrapper
Parte de la sección Object Oriented Programming del Journey de C de Coddy — lección 16 de 61.
Desafío
FácilVamos 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 estructuraStringObjectcon un único miembro:char *text(un puntero a una cadena asignada dinámicamente). También declara tres funciones:create_string— toma unconst char *de entrada y devuelve un puntero a un StringObject recién asignado.print_string— toma unconst StringObject *y muestra el texto almacenado.free_string— toma unStringObject *y libera toda la memoria asignada.
STRINGOBJ_H.stringobj.c: Implementa las tres funciones. Tu constructor debe asignar memoria para la estructura, luego asignar memoria para el texto (recuerdastrlenmás uno para el terminador nulo) y copiar la cadena de entrada. Tu destructor debe liberar en orden inverso: primero el búfer internotexty 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:
FreedPor ejemplo, con la entrada Hello World, la salida sería:
Text: Hello World
FreedPrué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
1Fundamentos de programación modular
Archivos de cabeceraGuardas de inclusiónArchivos fuenteFunciones estáticasRepaso: Calculadora modular4Encapsulamiento
Concepto de punteros opacosDefinición de structs opacosGetters y SettersValidación en settersResumen: Caja secreta7Punteros a funciones
Declaración de punteros a funcionesLlamada a punteros a funcionesTypedef para punteros a funcionesPasar funciones como argumentosRepaso: Dispatch de calculadora10Contenedores genéricos
Repaso de punteros voidWrapper genéricoSwap genéricoComparación genéricaRepaso: Array genérico2Objetos y métodos
Structs como objetosEl puntero 'Self'Const CorrectnessPuntero vs. ValorMétodos auxiliaresResumen: Point Manager5Proyecto: Cuenta bancaria simple
Configuración del proyectoImplementación de la cuenta3Ciclo de vida de los objetos
Patrón ConstructorPatrón DestructorInicialización en StackCopia profundaResumen: String Wrapper6Herencia mediante composición
Incrustación de StructsLa regla del primer miembroAcceso a miembros padreUpcastingResumen: Jerarquía de formas9Proyecto: Dibujador de figuras
Descripción general del proyectoImplementación del círculo