Menu
Coddy logo textTech

Rückblick: String-Wrapper

Teil des Abschnitts Object Oriented Programming der C-Journey von Coddy — Lektion 16 von 61.

challenge icon

Aufgabe

Einfach

Lassen Sie uns ein StringObject-Modul erstellen, das ein dynamisch zugewiesenes Zeichen-Array kapselt. Diese Wiederholungs-Challenge führt den kompletten Objekt-Lebenszyklus zusammen – Konstruktor, schreibgeschützte Methode und Destruktor – die alle zusammenarbeiten, um den Speicher sicher zu verwalten.

Sie werden drei Dateien erstellen:

  • stringobj.h: Deklarieren Sie eine StringObject-Struktur mit einem einzigen Mitglied: char *text (ein Zeiger auf einen dynamisch zugewiesenen String). Deklarieren Sie außerdem drei Funktionen:
    • create_string — nimmt eine const char * Eingabe entgegen und gibt einen Zeiger auf ein neu zugewiesenes StringObject zurück
    • print_string — nimmt ein const StringObject * entgegen und zeigt den gespeicherten Text an
    • free_string — nimmt ein StringObject * entgegen und gibt den gesamten zugewiesenen Speicher frei
    Verwenden Sie Include-Guards mit dem Symbol STRINGOBJ_H.
  • stringobj.c: Implementieren Sie alle drei Funktionen. Ihr Konstruktor sollte Speicher für die Struktur reservieren, dann Speicher für den Text reservieren (denken Sie an strlen plus eins für den Null-Terminator) und den Eingabestring kopieren. Ihr Destruktor muss in umgekehrter Reihenfolge freigeben – zuerst den internen text-Puffer, dann die Struktur selbst. Fügen Sie zur Sicherheit eine NULL-Prüfung in Ihren Destruktor ein.
  • main.c: Verwenden Sie Ihr Modul, um ein String-Objekt zu erstellen, seinen Inhalt anzuzeigen und anschließend ordnungsgemäß aufzuräumen.

Sie erhalten eine Eingabe: einen text string, der in Ihrem StringObject gespeichert werden soll.

Erstellen Sie in Ihrer Hauptdatei ein StringObject mit dem bereitgestellten Text, geben Sie dessen Inhalt aus, geben Sie den Speicher frei und geben Sie dann eine Bestätigungsmeldung aus.

Die Funktion print_string sollte in diesem Format ausgeben:

Text: {text}

Geben Sie nach dem Freigeben Folgendes aus:

Freed

Zum Beispiel wäre bei der Eingabe Hello World die Ausgabe:

Text: Hello World
Freed

Probier es selbst

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // Zeilenumbruch entfernen, falls vorhanden
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: Ein StringObject mit dem eingegebenen Text erstellen
    
    // TODO: Den String mit print_string ausgeben
    
    // TODO: Das StringObject mit free_string freigeben
    
    // TODO: "Freed" ausgeben, um die Bereinigung zu bestätigen
    
    return 0;
}

Alle Lektionen in Object Oriented Programming