البرمجة

تهيئة المصفوفات في C و C++

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

ومع ذلك، في C++، هذا السلوك غير مسموح به، وسيؤدي تجاوز حجم المصفوفة المعرفة ثابتًا لرمي خطأ في تركيب المصفوفة.

بالنسبة لسؤالك المحدد:

  1. هل الكود المعروض صالح في جميع معايير لغة C؟
    نعم، الكود صالح في جميع معايير لغة C. يُسمح بتجاهل حرف النهاية في حالة تهيئة مصفوفة ذات حجم ثابت.

  2. هل الكود غير صالح في جميع معايير لغة C++؟
    نعم، الكود غير صالح في جميع معايير لغة C++. يُطلب من المبرمج تحديد حجم المصفوفة بدقة دون تجاهل حرف النهاية.

  3. هل هناك سبب لصحة هذا السلوك في إحدى اللغتين ولكن لا في الأخرى؟
    نعم، السبب يعود إلى تصميم اللغتين واختلافاتهما في التصرف المحدد للتهيئة والحفاظ على الأمان. في C، يُعتبر تجاهل حرف النهاية في هذه الحالة سلوكًا مقبولًا ومُحددًا، بينما في C++، تُفضل اللغة تفادي هذا السلوك لضمان سلامة المصفوفات.

المزيد من المعلومات

التصرف الذي تم توضيحه في سيناريو السؤال يعتبر صحيحًا في معيار اللغة C89 وفيما بعده، ولكنه غير صحيح في C++ وفي C89 (C89، المعروف أيضًا بـ ANSI C، هو الإصدار الأصلي لمعيار C الذي تمت الموافقة عليه في عام 1989).

في لغة C، يُسمح بتهيئة مصفوفة من نوع char بحجم ثابت بقيمة سلسلة نصية تحتوي على عدد من الحروف يكون أقل بواحد من حجم المصفوفة. يتم تجاهل حرف النهاية في هذه الحالة. على سبيل المثال:

c
char str[3] = "abc";

في هذا المثال، يتم تهيئة المصفوفة str بحجم 3 وتعبئتها بالقيم "abc"، مع تجاهل حرف النهاية '\0'.

أما في C++، فإن هذا السلوك غير مسموح به. يجب أن يكون حجم المصفوفة في C++ كافيًا لتضمين جميع الأحرف بما في ذلك حرف النهاية '\0'. وبالتالي، يجب تعريف المصفوفة str بحجم أكبر بواحد لتتضمن جميع الحروف وحرف النهاية، مثل:

cpp
char str[4] = "abc";

إذا حاولت تنفيذ الكود الأصلي في C++، ستتلقى رسالة خطأ تشبه الرسالة التي تم ذكرها في السؤال، حيث يعتبر القيمة المعطاة للمصفوفة طويلة بمعنى أنها تحتوي على أكثر من 3 حرفًا.

مقالات ذات صلة

زر الذهاب إلى الأعلى

هذا المحتوى محمي من النسخ لمشاركته يرجى استعمال أزرار المشاركة السريعة أو تسخ الرابط !!