סיכום: מעטפת למחרוזת
חלק מהיחידה תכנות מונחה עצמים במסלול ה-C של Coddy. שיעור 16 מתוך 61.
אתגר
קלבואו נבנה מודול 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;
}
כל השיעורים ביחידה תכנות מונחה עצמים
4כימוס
המושג של מצביעים אטומיםהגדרת מבנים אטומיםפונקציות Get ו-Setאימות ב-Settersסיכום: הקופסה הסודית2אובייקטים ומתודות
מבנים כאובייקטיםמצביע 'Self'נכונות constמצביע לעומת ערךמתודות עזרחזרה: מנהל נקודות5פרויקט: חשבון בנק פשוט
הגדרת הפרויקטמימוש החשבוןתרגלו בעצמכם: קומפיילר C אונליין