Menu
Coddy logo textTech

סיכום: מעטפת למחרוזת

חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 16 מתוך 61.

challenge icon

אתגר

קל

בואו נבנה מודול StringObject שעוטף מערך תווים שהוקצה באופן דינמי. אתגר החזרה הזה משלב את מחזור החיים המלא של האובייקט, בנאי, מתודה לקריאה בלבד והורס, שכולם פועלים יחד כדי לנהל זיכרון בבטחה.

תיצרו שלושה קבצים:

  • stringobj.h: הצהירו על מבנה StringObject עם איבר יחיד: char *text (מצביע למחרוזת שהוקצתה באופן דינמי). כמו כן, הצהירו על שלוש פונקציות:
    • create_string: מקבלת קלט מסוג const char * ומחזירה מצביע ל-StringObject חדש שהוקצה בזיכרון
    • print_string: מקבלת const StringObject * ומציגה את הטקסט השמור
    • free_string: מקבלת StringObject * ומשחררת את כל הזיכרון שהוקצה
    השתמשו בשומרי הכללה עם הסמל STRINGOBJ_H.
  • stringobj.c: ממשו את כל שלוש הפונקציות. הבנאי שלכם צריך להקצות זיכרון למבנה, ואז להקצות זיכרון לטקסט (זכרו: strlen ועוד אחד עבור מסיים המחרוזת), ולהעתיק את מחרוזת הקלט. ההורס שלכם חייב לשחרר בסדר הפוך: תחילה את מאגר text הפנימי, ואז את המבנה עצמו. כללו בדיקת NULL בהורס שלכם, ליתר ביטחון.
  • main.c: השתמשו במודול שלכם כדי ליצור אובייקט מחרוזת, להציג את התוכן שלו, ואז לבצע ניקוי כראוי.

תקבלו קלט אחד: מחרוזת טקסט שיש לשמור ב-StringObject שלכם.

בקובץ הראשי שלכם, צרו StringObject עם הטקסט שסופק, הדפיסו את התוכן שלו, שחררו את הזיכרון, ואז הדפיסו הודעת אישור.

הפונקציה print_string צריכה להציג את הפלט בפורמט הזה:

Text: {text}

לאחר השחרור, הדפיסו:

Freed

לדוגמה, עבור הקלט Hello World, הפלט יהיה:

Text: Hello World
Freed

נסו בעצמכם

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

int main() {
    char input[256];
    fgets(input, sizeof(input), stdin);
    
    // הסר את תו ירידת השורה אם הוא קיים
    int len = 0;
    while (input[len] != '\0') len++;
    if (len > 0 && input[len - 1] == '\n') {
        input[len - 1] = '\0';
    }
    
    // TODO: צור StringObject עם טקסט הקלט
    
    // TODO: הדפס את המחרוזת באמצעות print_string
    
    // TODO: שחרר את StringObject באמצעות free_string
    
    // TODO: הדפס "Freed" כדי לאשר שהניקוי הושלם
    
    return 0;
}

כל השיעורים ביחידה תכנות מונחה עצמים

תרגלו בעצמכם: קומפיילר C אונליין