Récapitulatif : String Wrapper
Fait partie de la section Object Oriented Programming du Journey C de Coddy — leçon 16 sur 61.
Défi
FacileConstruisons 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 structureStringObjectavec un seul membre :char *text(un pointeur vers une chaîne allouée dynamiquement). Déclarez également trois fonctions :create_string— prend une entréeconst char *et retourne un pointeur vers un StringObject nouvellement allouéprint_string— prend unconst StringObject *et affiche le texte stockéfree_string— prend unStringObject *et libère toute la mémoire allouée
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 passtrlenplus un pour le terminateur nul), et copier la chaîne d'entrée. Votre destructeur doit libérer dans l'ordre inverse — le tampon internetextd'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 :
FreedPar exemple, avec l'entrée Hello World, la sortie serait :
Text: Hello World
FreedEssayez 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
1Bases de la programmation modulaire
Fichiers d'en-têteGardes d'inclusionFichiers sourcesFonctions statiquesRécapitulatif : Calculatrice modulaire4Encapsulation
Concept des pointeurs opaquesDéfinir des structures opaquesGetters et settersValidation dans les settersRécapitulatif : La boîte secrète2Objets et méthodes
Structs comme objetsLe pointeur 'Self'Rigueur du mot-clé constPointeur vs ValeurMéthodes utilitairesRécapitulatif : Point Manager5Projet : Compte bancaire simple
Configuration du projetImplémentation du compte8Polymorphisme
Pointeurs de fonctions dans les structuresSimulation de méthodesLe concept d'interfaceImplémentation d'interfacesItération polymorphiqueRécapitulatif : Greeter11Patrons de conception en C
Patron SingletonPatron FabriquePatron ItérateurRécapitulatif : Logger Factory3Cycle de vie des objets
Pattern de constructeurPattern de destructeurInitialisation sur la pileCopie profondeRécapitulatif : String Wrapper6Héritage par composition
Imbrication de structLa règle du premier membreAccès aux membres parentsUpcastingRécapitulatif : Hiérarchie des formes9Projet : Dessinateur de formes
Aperçu du projetImplémentation du cercle