Menu
Coddy logo textTech

תו הסיום 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 קובעות היכן מחרוזות מתחילות ומסתיימות.

challenge icon

אתגר

קל

כתוב תוכנית ב־C שמדגימה יצירה ועבודה עם מחרוזות באמצעות אתחול ידני תו אחר תו, עם סיום תקין בתו null. התוכנית שלך צריכה:

  1. להצהיר על מערך תווים בשם name המכיל בדיוק 5 איברים
  2. לאתחל ידנית את המערך name תו אחר תו כך שיאיית "John", עם סיום תקין בתו null:
    • האיבר הראשון: 'J'
    • האיבר השני: 'o'
    • האיבר השלישי: 'h'
    • האיבר הרביעי: 'n'
    • האיבר החמישי: '\0' (תו סיום null)
  3. להצהיר על מערך תווים שני בשם city המכיל בדיוק 7 איברים
  4. לאתחל ידנית את המערך city תו אחר תו כך שיאיית "Boston", עם סיום תקין בתו null:
    • להשתמש בהשמות תווים נפרדות עבור 'B', 'o', 's', 't', 'o', 'n' ו־'\0'
  5. להדפיס את שתי המחרוזות באמצעות printf עם מציין הפורמט %s
  6. להדגים מה קורה ללא סיום בתו null על ידי יצירת מערך תווים שלישי בשם test המכיל 4 איברים
  7. לאתחל את test עם התווים 'A', 'B', 'C', 'D' בלבד (ללא תו סיום null)
  8. להדפיס את המערך 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;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

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