תו הסיום null
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C של Coddy. שיעור 13 מתוך 63.
למדת שמחרוזות ב-C הן מערכי תווים, אבל יש פרט חיוני שמאפשר להן לפעול כראוי: כל מחרוזת ב-C חייבת להסתיים בתו מיוחד שנקרא תו סיום null, ונכתב כך: \0.
תו הסיום null הוא תו שערך ה-ASCII שלו הוא אפס, והוא מסמן את סוף המחרוזת. בלעדיו, פונקציות כמו printf לא היו יודעות היכן המחרוזת שלך מסתיימת, והיו ממשיכות לקרוא מהזיכרון עד שהיו נתקלות במקרה בבייט שערכו אפס, ולעיתים קרובות מפיקות פלט זבל.
char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// ה־\0 אומר ל־C: "The string ends here"כשאתה מאתחל מחרוזת באמצעות ערך מילולי כמו "Hello", C מוסיפה עבורך אוטומטית את התו המסיים null. אבל כשאתה בונה מחרוזת ידנית, תו אחר תו, עליך לזכור להוסיף \0 בסוף.
תו הסיום null הוא הסיבה לכך שמילה בת 5 תווים כמו "Hello" זקוקה למערך תווים בן 6 איברים — מקום נוסף אחד עבור \0. הבנת המושג הזה חיונית, משום שהוא הבסיס לאופן שבו כל פונקציות המחרוזות של C קובעות היכן מחרוזות מתחילות ומסתיימות.
אתגר
קלכתוב תוכנית ב־C שמדגימה יצירה ועבודה עם מחרוזות באמצעות אתחול ידני תו אחר תו, עם סיום תקין בתו null. התוכנית שלך צריכה:
- להצהיר על מערך תווים בשם
nameהמכיל בדיוק 5 איברים - לאתחל ידנית את המערך
nameתו אחר תו כך שיאיית "John", עם סיום תקין בתו null:- האיבר הראשון: 'J'
- האיבר השני: 'o'
- האיבר השלישי: 'h'
- האיבר הרביעי: 'n'
- האיבר החמישי:
'\0'(תו סיום null)
- להצהיר על מערך תווים שני בשם
cityהמכיל בדיוק 7 איברים - לאתחל ידנית את המערך
cityתו אחר תו כך שיאיית "Boston", עם סיום תקין בתו null:- להשתמש בהשמות תווים נפרדות עבור 'B', 'o', 's', 't', 'o', 'n' ו־
'\0'
- להשתמש בהשמות תווים נפרדות עבור 'B', 'o', 's', 't', 'o', 'n' ו־
- להדפיס את שתי המחרוזות באמצעות
printfעם מציין הפורמט%s - להדגים מה קורה ללא סיום בתו null על ידי יצירת מערך תווים שלישי בשם
testהמכיל 4 איברים - לאתחל את
testעם התווים 'A', 'B', 'C', 'D' בלבד (ללא תו סיום null) - להדפיס את המערך
testבאמצעות%sכדי להציג פלט בלתי צפוי
הפלט שלך צריך להציג את התוצאות בפורמט הבא:
Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]האתגר הזה בודק את ההבנה שלך בבנייה ידנית של מחרוזות, בחשיבות הקריטית של תו הסיום '\0' במחרוזות C, ובאופן שבו printf עם %s מסתמך על מציאת תו הסיום כדי לדעת היכן המחרוזת מסתיימת.
נסו בעצמכם
#include <stdio.h>
int main() {
// TODO: כתבו כאן את הקוד שלכם
// הכריזו על מערכי התווים ואתחלו אותם כפי שצוין
// הדפיסו את התוצאות
return 0;
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1יסודות המצביעים
מהו מצביע?הכרזה על מצביעיםאופרטור לקיחת הכתובת (&)אופרטור ביטול ההפניה (*)מצביעי NULLסיכום: יסודות המצביעים2מצביעים ומערכים
שמות מערכים כמצביעיםאיברי מערך ומצביעיםאריתמטיקה של מצביעיםהשוואת מצביעיםסיכום: מעבר על מערך באמצעות מצביעים5מצביעים ופונקציות
העברה לפי ערךהעברת מצביעים לפונקציותשינוי משתנים באמצעות מצביעיםדוגמה קלאסית: החלפההעברת מערכים לפונקציותחזרה: ארגומנטים של מצביעי פונקציה3מערכי תווים ומחרוזות
מחרוזות כמערכי charתו הסיום nullקלט מחרוזת באמצעות scanfשימוש ב־strlen()שימוש ב־strcpy()שימוש ב־strcat()שימוש ב־strcmp()סיכום: פונקציות מחרוזת בסיסיותתרגלו בעצמכם: קומפיילר C אונליין