سؤال عن استخدام '0\' في لغة السي

  • hazem94

لقد قرأت في أحد مراجع لغة السي أنه عند استخدام '0\' في السلاسل للدلالة على نهاية السلسلة, فعندها سيكون باستطاعتنا استخدام فقط 9 محارف!!! و لقد قمت بتجربة الكود التالي و عمل بدون أي خطأ أو تحذير من المفسر (compiler) :

           #include<stdio.h>
           int main()
             {
           char a[50] = "This laptop made in China by Asus\0";
           puts(a);
           return 0;
            }

؟؟؟؟؟؟؟؟؟؟

يرجى الدخول لحسابك أو تسجيل حساب لتستطيع إضافة تعليق
حساب جديد دخول

التعليقات

اعتقد ان المرجع يتحدث عن سلسلة طولها 10 وليس 50

هذا هو نص المرجع:

Since we must use one character to indicate where the string ends, it means that we can only use 9 character for storing the text. It's the price we pay for the convenience.  '\0'

اتوقع قبل هذه الجمله هناك مثال لمصفوفة ذات عشرة خانات وبني النص على المثال. ففي لغة السيء نعرف ان string عبارة عن مصفوفة دايناميكية من نوع char. ومن المعروف أن المصفوفات العادية في لغة C يجب تحديد عدد خاناتها ليحتجزها من الذاكرة. وقد يحصل في بعض الاحيان تحجز للمصفوفة مثلا خمسونة خانة بينما المستخدم ثماني خانات فقط. لتسريع عمل بعض الوضائف (Functions) في لغة C تمت اضافة رمز (\0) في آخر محتوى أي مصفوفة. فلنفترض لدينا مصفوفة من نوع char لها عشرة خانات. وقمنا بتخزين كلمة Hello بها. فهنا أستخدمنا فقط خمسة خانات اذا اعبرنا ان كل حرف خانة. ولكن لغة C تضيف تلقائيا في الخانة السادسة إذا بدأنا العد من واحد الرمز (\0) الذي يشير الى NULL. فتكون المصفوفة بالشكل التالي:

    H | e | l | l | o | \0 | . | . | . | . |

مافائدة '\0' ؟

هي أصل NULL في لغات البرمجة. فهذا الرمز عندما تصل أليه دالة الطباعة مثلاً او أي دالة تمرر لها هذه المصفوفة، تقف عن عملها. أولاً لتسريع العمل، ثانياً إذا لم تقف الدالة عن عملها سيقوم النظام بملئ الخانات ببيانات اخرى استخدمت في الذاكرة مسبقاً لن يكون لها معنى يطلق عليها garbage values. فمثلاً لو لم تكن لدينا هذا الرمز '\0' اللذي هو اصل NULL واستخدمنا امر الطباعة على مثالنا السابق سوف يكون شيئاُ اشبه بذلك

    H | e | l | l | o | ♔ | π | & | ❤ | ☆ |

لذلك NULL (\0) هي رمز تقف عنده الوظائف.

بينما في النص الذي قمت بأقتباسه اتوقع انه يحكي عن مثال مطروح قبل النص فالمقصد على ما أظن لو كانت لدينا مصفوفة من نوع char لها عشرة خانات، لانستطيع ملئ الا تسعتاً منها. حيث الخانة العاشرة محجوزة للترميز \0 الذي تقف عنده الوظائف.

جزاكم الله خيراً, اتّضح كل شيئ ................