فهم الفرق في تهيئة السلاسل النصية
في لغة C: مع وبدون المحارف النهائية
عند العمل مع السلاسل النصية في برمجة C، من الضروري فهم كيفية عمل التهيئة. سؤال شائع يبرز بين المطورين هو الفرق بين تهيئة مصفوفة من الأحرف باستخدام رمز نهائي صريح مقابل سلسلة فارغة.
في هذه المدونة، سنقوم بتفكيك طريقتين محددتين لتهيئة السلاسل النصية في C:
char str1[32] = "\0";
و
char str2[32] = "";
لنحلّل ما يعنيه كل منهما وكيف يقارنان ببعضهما البعض.
شرح تهيئة السلاسل النصية
التصريحات
كلا هذين التصريحين ينشئان مصفوفة من الأحرف بحجم 32. ومع ذلك، فإنهما يشملان قيمًا ابتدائية مختلفة.
-
char str1[32] = "\0";
- هنا، تقوم بتهيئة العنصر الأول من المصفوفة إلى حرف فارغ (
\0
). وهذا يجعل السلسلة فارغة لكن يترك بقية عناصر المصفوفة غير مهيأة (مما يعني أنها قد تحتوي على قيم عشوائية).
- هنا، تقوم بتهيئة العنصر الأول من المصفوفة إلى حرف فارغ (
-
char str2[32] = "";
- هذه تهيئ العنصر الأول أيضًا إلى حرف فارغ (
\0
) ولكنها أيضًا تُهيئ بشكل ضمني بقية عناصر المصفوفة إلى\0
لأنك تعلن عنها باستخدام سلسلة فارغة.
- هذه تهيئ العنصر الأول أيضًا إلى حرف فارغ (
مثال عملي
قد تظن أن هذين التصريحين متساويان بسبب أحجامهما، ولكن هناك اختلافات مهمة عندما لا يتم تحديد الأحجام.
فكر في الكود التالي:
char a[] = "a\0";
char b[] = "a";
printf("%i %i\n", sizeof(a), sizeof(b));
الناتج:
3 2
تفسير الناتج
-
السلسلة
a
:- هذه السلسلة تتضمن صراحةً المحرف النهائي، مما يجعل حجمها
3
. تحتوي على:- الحرف
'a'
(1 بايت) - المحرف النهائي الصريح (
\0
) (1 بايت) - المحرف النهائي الضمني في النهاية (1 بايت)
- الحرف
- هذه السلسلة تتضمن صراحةً المحرف النهائي، مما يجعل حجمها
-
السلسلة
b
:- في هذه الحالة، تحتوي السلسلة فقط على الحرف
'a'
والمحرف النهائي الضمني، مما يعطيها حجم2
.
- في هذه الحالة، تحتوي السلسلة فقط على الحرف
النقاط الرئيسية
-
تهيئة مع محارف نهائية:
عند تضمين محرف نهائي\0
صراحة، فإنك تزيد من حجم السلسلة ببايت واحد. يضيف معيار C تلقائيًا محرف\0
آخر في النهاية، مما يؤدي إلى وجود محرفين نهائيين إجمالاً. -
الذاكرة والتخصيص:
فهم كيفية تعامل C مع الذاكرة للسلاسل النصية يمكن أن يمنع الأخطاء والأعطال. الوعي بكيفية تهيئة السلاسل النصية يمكن أن يؤثر بشكل كبير على كيفية تخصيص الذاكرة والوصول إليها في تطبيقاتك. -
أفضل الممارسات:
قم دائمًا بتهيئة سلاسك النصية بعناية، مع الأخذ في الاعتبار عدد الأحرف والمصطلحات التي ترغب في تضمينها.
مع هذه المعرفة، يجب أن تشعر براحة أكبر أثناء التنقل بين تعقيدات تهيئة السلاسل النصية في C. بالتوفيق في البرمجة!