>> سرور 1: دعونا كتابة البرنامج الذي يحصل على سلسلة من المستخدم دون
باستخدام مكتبة CS50 عام تعمل GetString.
للقيام بذلك، ونحن سوف نمضي قدما واستخدام scanf، وظيفة أن GetString
وظيفة يستخدم في الواقع تحت غطاء محرك السيارة.
ولكن انا ذاهب للقيام بذلك عمدا بطريقة عربات التي تجرها الدواب.
انا ذاهب الى القيام به في هذه الطريقة التي أعتقد سوف يكون على حق، ولكن اتضح أن
يجري افتراض جهدي ل يكون تماما، معيبة جدا.
في واقع الأمر، وخطرة جدا.
لأن الخلل مثل واحد أنا على وشك أن جعل يمكن استغلالها من قبل الخصوم
مثل هذا الجهاز أو البرنامج يمكن أن تؤخذ على مدى يحتمل.
>> دعونا نبدأ على النحو التالي.
دعونا أولا تعلن سلسلة لدينا، والمعروف الآن باسم نجم شار،
والذي يطلق عليه ق.
يتيح للمستخدم مطالبة المقبل للسلسلة، كما هو الحال مع "سلسلة من فضلك." و
دعونا الآن الحصول على سلسلة من المستخدم باستخدام scanf، بين قوسي الإقتباس، "٪ S". في
بعبارة أخرى، دعونا إبلاغ scanf أننا في الواقع لا تتوقع الحصول على سلسلة
من المستخدم.
>> ولكن الآن نحن بحاجة لاقول scanf الشيء الآخر -
أين يضع السلسلة التي يوفر للمستخدم.
حسنا، أنا ذاهب لبدء بكل بساطة مع فاصلة ثانية، موضحا أن أود
scanf لوضع السلسلة هناك.
انا ذاهب المقبل لطباعة شيء مثل printf "شكرا لل٪ ق
مائل ن فاصلة "، وكما هو الحال دائما، وأنا سوف تمر في سلسلة، ق.
الآن دعونا حفظ وتجميع وتشغيل هذا البرنامج، ونرى اذا كنا لا يمكن أن تحدث
توقعت المشكلة.
>> جعل scanf-1.
./scanf-1.
سلسلة من فضلك.
دعونا توفير شيء من هذا القبيل، "مرحبا." "شكرا لاغية". هم، وهذا ليس
ما كنت أتوقع.
فما الذي يحدث هنا؟
>> كذلك، اتضح لأعلنا ق كنجم شار لكننا لم
المخزنة في الواقع عنوان ليالي جزء من الذاكرة الفعلية، لم يكن scanf
لديهم أي مكان لوضع السلسلة أن المستخدم كتابتها في.
في الواقع، إذا كان المستخدم لكتابة الآن في سلسلة أطول بكثير من "مرحبا"
على سبيل المثال عدة أسطر من النص أو عدة فقرات من النص، هو الى حد بعيد
ممكن أننا قد تحفز على ما يسمى خطأ تجزئة.
>> لأن scanf لن نعلم أن أنا لم تضع في الواقع عنوان
داخل ق.
بدلا من ذلك، انها سوف نرى بعض القيمة في ليالي، بت بعض نمط من أنه يجوز
يكون جيدا قيمة القمامة، هناك فقط عن طريق الصدفة.
و scanf لا يزال مستمرا في محاولة لإرسال سلسلة مستخدم لهذا العنوان،
حتى لو كان هو قيمة القمامة، والتي في الواقع يمكن أن تؤدي إلى وقوع الحادث.
>> فكيف نحن ذاهبون لإصلاح هذا؟