Menu
Coddy logo textTech

Récapitulatif : String Wrapper

Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 16 sur 61.

challenge icon

Défi

Facile

Construisons un module StringObject qui enveloppe un tableau de caractères alloué dynamiquement. Ce défi récapitulatif rassemble le cycle de vie complet d'un objet — constructeur, méthode en lecture seule et destructeur — travaillant tous ensemble pour gérer la mémoire en toute sécurité.

Vous allez créer trois fichiers :

  • stringobj.h : Déclarez une structure StringObject avec un seul membre : char *text (un pointeur vers une chaîne allouée dynamiquement). Déclarez également trois fonctions :
    • create_string — prend une entrée const char * et retourne un pointeur vers un StringObject nouvellement alloué
    • print_string — prend un const StringObject * et affiche le texte stocké
    • free_string — prend un StringObject * et libère toute la mémoire allouée
    Utilisez des gardes d'inclusion avec le symbole STRINGOBJ_H.
  • stringobj.c : Implémentez les trois fonctions. Votre constructeur doit allouer de la mémoire pour la structure, puis allouer de la mémoire pour le texte (n'oubliez pas strlen plus un pour le terminateur nul), et copier la chaîne d'entrée. Votre destructeur doit libérer dans l'ordre inverse — le tampon interne text d'abord, puis la structure elle-même. Incluez une vérification NULL dans votre destructeur par sécurité.
  • main.c : Utilisez votre module pour créer un objet chaîne, afficher son contenu, puis nettoyer correctement.

Vous recevrez une entrée : une chaîne de texte à stocker dans votre StringObject.

Dans votre fichier principal, créez un StringObject avec le texte fourni, imprimez son contenu, libérez la mémoire, puis imprimez un message de confirmation.

La fonction print_string doit produire une sortie dans ce format :

Text: {text}

Après la libération, imprimez :

Freed

Par exemple, avec l'entrée Hello World, la sortie serait :

Text: Hello World
Freed

Essayez vous-même

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Supprimer le saut de ligne s'il est présent
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Créer un StringObject avec le texte d'entrée
    
    // TODO: Afficher la chaîne en utilisant print_string
    
    // TODO: Libérer le StringObject en utilisant free_string
    
    // TODO: Afficher "Freed" pour confirmer le nettoyage
    
    return 0;
}

Toutes les leçons de Object Oriented Programming