Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

المُنهي الصفري (Null Terminator)

جزء من قسم Logic & Flow في رحلة C على Coddy — الدرس 13 من 63.

لقد تعلمت أن السلاسل النصية (strings) في لغة C هي مصفوفات من الأحرف، ولكن هناك تفصيل بالغ الأهمية يجعلها تعمل بشكل صحيح: يجب أن تنتهي كل سلسلة نصية في C بحرف خاص يسمى المُنهي الصفري (null terminator)، ويُكتب كـ \0.

المُنهي الصفري (null terminator) هو حرف بقيمة ASCII تبلغ صفراً يحدد نهاية السلسلة النصية. بدونه، لن تعرف دوال مثل printf أين تنتهي السلسلة النصية الخاصة بك، وستستمر في قراءة الذاكرة حتى تصادف عشوائياً بايتاً صفرياً، مما يؤدي غالباً إلى إنتاج مخرجات غير مفهومة.

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// تخبر الـ \0 لغة C: "تنتهي السلسلة النصية هنا"

عندما تقوم بتهيئة سلسلة نصية باستخدام قيمة حرفية مثل "Hello"، تقوم لغة C تلقائياً بإضافة النهاية الصفرية (null terminator) لك. ولكن عندما تقوم ببناء سلسلة نصية يدوياً حرفاً بحرف، يجب أن تتذكر إضافة \0 في النهاية.

هذا الرمز المنهي الفارغ (null terminator) هو السبب في أن كلمة مكونة من 5 أحرف مثل "Hello" تحتاج إلى مصفوفة أحرف مكونة من 6 عناصر - مساحة إضافية واحدة لـ \0. فهم هذا المفهوم ضروري لأنه يمثل الأساس لكيفية تحديد جميع دوال السلاسل النصية في لغة C لمكان بداية ونهاية السلاسل.

challenge icon

التحدي

سهل

اكتب برنامجاً بلغة C يوضح كيفية إنشاء والتعامل مع السلاسل النصية (strings) باستخدام التهيئة اليدوية حرفاً بحرف مع إنهاء السلسلة برمز null بشكل صحيح. يجب أن يقوم برنامجك بما يلي:

  1. الإعلان عن مصفوفة أحرف باسم name تحتوي على 5 عناصر بالضبط
  2. تهيئة مصفوفة name يدوياً حرفاً بحرف لتهجئة "John" مع إنهاء السلسلة برمز null بشكل صحيح:
    • العنصر الأول: 'J'
    • العنصر الثاني: 'o'
    • العنصر الثالث: 'h'
    • العنصر الرابع: 'n'
    • العنصر الخامس: '\0' (null terminator)
  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 terminator)
  8. طباعة مصفوفة test باستخدام %s لإظهار مخرجات غير متوقعة

يجب أن تعرض مخرجاتك النتائج بالتنسيق التالي:

Name: John
City: Boston
Test without null terminator: ABCD[unpredictable characters]

يختبر هذا التحدي فهمك لبناء السلاسل النصية يدوياً، والأهمية البالغة لرمز null terminator '\0' في سلاسل C النصية، وكيف تعتمد printf مع %s على إيجاد رمز null لمعرفة مكان انتهاء السلسلة.

ورقة مرجعية

سلاسل C النصية هي مصفوفات أحرف يجب أن تنتهي بـ منتهي صفري (null terminator) \0 لتمييز نهاية السلسلة.

قيمة ASCII للمنهي الصفري هي صفر ويخبر الدوال مثل printf بمكان انتهاء السلسلة النصية:

char word[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
// تخبر \0 لغة C: "تنتهي السلسلة النصية هنا"

عند استخدام الثوابت النصية مثل "Hello"، تضيف لغة C المنهي الصفري تلقائيًا. وعند بناء السلاسل النصية حرفًا بحرف، يجب عليك إضافة \0 يدويًا.

تحتاج السلسلة النصية إلى عنصر مصفوفة إضافي واحد للمنهي الصفري - "Hello" (5 أحرف) تتطلب مصفوفة مكونة من 6 عناصر.

جرّب بنفسك

#include <stdio.h>

int main() {
    // TODO: اكتب كودك هنا
    // قم بتعريف وتهيئة مصفوفات الأحرف كما هو محدد
    
    // اطبع النتائج
    
    return 0;
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow