[Powered by Google Translate] [WEEK 5]
[ديفيد J. مالان، جامعة هارفارد]
[هذا CS50.] [CS50.TV]
[المرأة] انه الكذب؛ حول ما، وأنا لا أعرف.
[رجل] لذلك ماذا نعرف؟
[المرأة] وهذا في الساعة 9:15، راي Santoya كان في أجهزة الصراف الآلي.
[رجل] لذا فإن السؤال هو، ماذا كان يفعل في 9:16؟
[المرأة] إطلاق النار على عيار 9 مم في شيء.
ورأى أنه ربما القناص.
[رجل] أو كان يعمل معه.
[المرأة] انتظر. العودة احدة.
[رجل] ماذا ترى؟
[♫ ♫ الموسيقى مشوقة]
[المرأة] إحضار وجهه لأعلى. كامل الشاشة.
[رجل] صاحب النظارات. هناك >> التفكير.
[♫ ♫ الموسيقى مشوقة]
[رجل] وهذا الفريق Nuevita في البيسبول. هذا الشعار.
[المرأة] ويتحدث لمن يرتدي سترة أن.
>> [ديفيد مالان] وهكذا، وهذا هو CS50 الأسبوع 5، واليوم نحن الخراب قليلا من التلفزيون والسينما بالنسبة لك.
لذلك كلما كنت أشاهد لعرض مثل هذا واحد هنا،
ويقول رجال الشرطة "يمكنك تنظيف ذلك؟" أو "تعزيز"
لا يوجد أي تعزيز في العالم الحقيقي.
في الواقع، ما تحصل عليه هو حقا شيئا قليلا من هذا القبيل.
لقد سحبت واحدة من الصور موظفين من الصفحة.
هذا هو برنامج يسمى برنامج فوتوشوب. هذا هو 1 من 2 Bowdens،
1 من 3 Bowdens في الواقع، اليوم، لأن لدينا السيدة بودين هنا أيضا، مع روب وبولس.
ولكن هنا هو روب على الشاشة، وإذا كنا في التكبير على أن بريق انه كان دائما انه في عينه،
ما تراه في الواقع هو أن ما تراه هو ما تحصل عليه.
هذا هو "تعزيز"، لذلك "CSI" يكون ذلك قليلا خاطئ.
هناك مقطع واحد آخر، إذا يمكننا اختيار على "CSI" قليلا فقط لفترة أطول.
هذا هو واحد عبارة لطيفة من الآن فصاعدا أن ينطق إذا كنت ترغب في
تقنية سليمة مع أصدقائك عندما، في الحقيقة، كنت تقول شيئا على الإطلاق.
>> [رجل] لأسابيع لقد تم التحقيق في جرائم القتل القاتل سائق سيارة الأجرة
مع سحر المهووسين معينة.
[المرأة رقم 1] وهذا هو في الوقت الحقيقي.
[المرأة رقم 2] سوف إنشاء واجهة GUI باستخدام Visual Basic، معرفة ما إذا كان يمكنني تتبع عنوان IP.
>> [مالان] الصوت لذلك متزامنة جانبا، وخلق واجهة GUI باستخدام Visual Basic
لتتبع عنوان IP هو محض هراء.
في هذه الأيام فإنك لن استخدام Visual Basic،
ليس هناك حاجة لGUI، وعنوان IP هو مصطلح دقيق من الناحية الفنية.
حتى تبقي العين لهؤلاء، واحدة من المفضلة:
هذا واحد من أكثر قليلا غامضة، لأنك بحاجة إلى معرفة لغة مختلفة.
هناك لغة تسمى الهدف-C، الذي هو مجموعة شاملة من C.
وهو ما يعني انها C بالإضافة إلى بعض الميزات الإضافية، من بينها وجوه المنحى البرمجة.
وهذه هي اللغة التي أبل قد شاع للبرمجة دائرة الرقابة الداخلية.
وحتى هنا هو مقطع من عرض مختلف تماما، من "الأرقام"
انه اذا نظرتم عن كثب على الواقع تيفو الخاص بك وقفة في اللحظة المناسبة،
سترى أن ما يبحثون ليست واردة في ما يجري وصفها.
واسمحوا لي أن أحاول موصل الصوت المختلفة هنا ونرى اذا كنا لا نستطيع
الحفاظ على الصوت متزامنا هذه المرة.
أنا أعطيك "الأرقام".
>> [مان # 1] انها عنوان 32 بت عناوين IPv4.
[رجل # 2] IP، وهذا هو الانترنت. >> شبكة الاتصال الخاصة. انها شبكة أنيتا الخاص.
[مالان] حسنا. هذا هو الهدف-C، وانها لبرنامج تلوين بعض طفل،
كما يمكنك استنتاج ربما من اسم المتغير هناك.
بحيث، بعد ذلك، كان "الأرقام". حتى اليوم وهذا الأسبوع ونحن نقدم
قليلا من عالم الطب الشرعي والسياق في ذلك المشاكل.
سوف يكون اليوم محاضرة مختصرة لأنه لا يوجد حدث خاص هنا
بعد ذلك، لذلك سوف نلقي نظرة خاطفة، وندف كل من الطلاب وأولياء الأمور على حد سواء اليوم
مع بعض من الأشياء التي هي في الأفق.
من بينها، وذلك اعتبارا من يوم الاثنين، سيكون لديك المزيد من زملاء الدراسة قليلة.
EDX، هارفارد ومبادرة جديدة على الانترنت ميتس للالتعليمية المفتوحة
وأكثر من ذلك، وتطلق في الحرم الجامعي في جامعة هارفارد يوم الاثنين.
وهو ما يعني الاثنين سيكون لديك تأتي - كما في آخر إحصاء،
و86000 زملاء إضافية يتم بعد طول مع المحاضرات في CS50
والأقسام والمواضيع الإرشادية ومجموعات المشكلة.
وكجزء من هذا، وسوف تصبح أعضاء في الدفعة الأولى من
CS50 وCS50x الآن.
>> وكجزء من هذا، الآن، ندرك أن سيكون هناك بعض الإيجابيات أيضا.
للحصول على استعداد لهذا، لعدد هائل من الطلاب،
ويكفي ان نقول أنه على الرغم من أن لدينا 108 TFS والاكاديمية،
ليس تماما أفضل الطالب / المعلم نسبة بمجرد أن تصل إلى 80000 طلاب آخرين.
لذلك نحن لن الدرجات مشكلة الكثير من مجموعات يدويا.
وقدم لذلك هذا الاسبوع في مجموعة تكون المشكلة CS50 تحقق،
التي ستكون أداة سطر الأوامر داخل الأجهزة
التي سوف تحصل بمجرد تحديثه في وقت لاحق هذا الأسبوع،
وعليك أن تكون قادرا على تشغيل أمر، تحقق 50،
على pset الخاصة بك، وستحصل على بعض ردود الفعل حول ما إذا كان البرنامج الخاص بك هو
صحيحة أو غير صحيحة وفقا لمواصفات التصميم المختلفة التي قدمنا.
أكثر من ذلك على أن والمواصفات ومجموعة مشكلة
فإن زملاء CS50x تستخدم هذا أيضا.
>> حتى مجموعة المشكلة 4 هو كل شيء عن الطب الشرعي.
وكانت مستوحاة من قبل هذه القطعة بعض الاشياء في الحياة الواقعية،
I المعتقلين حيث عندما كنت في المدرسة العليا، لفترة من الوقت مع
مكتب مقاطعة ميدلسكس في منطقة المدعي العام القيام بأعمال الطب الشرعي
مع محقق الطب الشرعي على الرصاص، وما بلغ ذلك
و، وأعتقد أنني ذكرت في الأسبوع الماضي القليلة، هو الشرطة أو غيرهم قداس الدولة
سيأتي في، فإنها تتراجع أشياء مثل محركات الأقراص الصلبة والأقراص المدمجة والأقراص المرنة
وما شابه ذلك، ومن ثم كان الهدف من مكتب الطب الشرعي للتأكد مما إذا
كان هناك أو لم يكن أدلة من نوع ما.
وكان هذا وحدة التحقيقات الخاصة، لذلك كان جريمة ذوي الياقات البيضاء،
كان الأكثر إثارة للقلق نوع من الجرائم،
أي شيء تنطوي على نوع من وسائل الإعلام الرقمية، تبين أن كثير من الناس لا أن
كتابة رسالة بريد إلكتروني قائلا "أنا فعلت هذا."
لذلك في كثير من الأحيان فإن هذه الطب الشرعي البحث لا يحضر كل ما ثمرا كثيرا،
لكن في بعض الأحيان كان الناس مثل كتابة رسائل البريد الإلكتروني.
وحتى في بعض الأحيان مكافأة الجهود.
>> ولكن لتؤدي إلى هذه pset الطب الشرعي، سنكون في إدخال pset 4 أ قليلا من الرسومات.
لذلك كنت على الارجح هذه الأشياء أمرا مفروغا منه، متحركة، وملفات JPEG مثل هذه الأيام،
ولكن إذا كنت تعتقد حقا عن ذلك، صورة، يشبه إلى حد كبير وجه روب،
يمكن غرار كتسلسل من النقاط، أو بكسل.
الآن، في حالة مواجهة روب، وهناك كل أنواع من الألوان،
وبدأنا في رؤية النقاط الفردية، والمعروف otherwide كما بكسل،
وبمجرد أن بدأت لتكبير.
ولكن إذا كنا تبسيط العالم قليلا، وأقول أن هذا هو روب هنا
بالأسود والأبيض، الأسود بشكل جيد لتمثيل، والأبيض فقط يمكننا استخدام ثنائي.
وإذا كنا في طريقنا للاستخدام ثنائي، 1 أو 0، يمكننا التعبير عن هذه الصورة نفسها
من وجه يبتسم مع روب لهذا النمط من البتات: 11000011 يمثل
أبيض، أبيض، أسود، أسود، أسود، أسود، أبيض.
وحتى انها ليست قفزة هائلة، بعد ذلك، أن نبدأ الحديث عن الصور الملونة.
الأشياء التي كنت انظر في الفيسبوك أو اتخاذ مع كاميرا رقمية،
ولكن، بالتأكيد، عندما يتعلق الأمر الألوان، تحتاج إلى أكثر بت.
وشائع جدا في العالم من الصور هو استخدام غير 1 بت لون،
لأن ذلك يوحي، ولكن ألوان 24 بت. حيث تحصل في الواقع الملايين من الألوان
وذلك في حالة عندما كنا أسرع في العين على روب،
هو أن أي عدد من الملايين من الاحتمالات الملونة المختلفة.
>> وهكذا لن نقدم هذه المشكلة في مجموعة ال 4 كما كذلك في معاينة،
والتي ستكون اليوم فى الساعة 3:30 بدلا من 2:30 المعتاد بسبب محاضرة يوم الجمعة هنا.
ولكن سوف يكون الفيديو على الانترنت، كالعادة، غدا.
سوف نقدم لك أيضا لتنسيق ملف آخر.
ذلك هو المقصود عمدا هذا أن ننظر في البداية تخويف،
ولكن هذا هو فقط بعض الوثائق عن البنية C.
تبين أن مايكروسوفت، منذ سنوات، ساعد تعميم هذه الصيغة،
دعا تنسيق ملف الصورة النقطية، BMP، وكان هذا فائقة بسيطة،
تنسيق ملف رسومي الملونة التي استخدمت لبعض الوقت
وأحيانا لا تزال خلفيات على سطح المكتب.
إذا كنت تعتقد مرة أخرى إلى ويندوز XP والتلال والسماء الزرقاء،
كان ذلك عادة BMP، أو صورة نقطية، والصور النقطية
هي متعة بالنسبة لنا لأن لديهم تعقيد أكثر قليلا.
انها ليست بهذه البساطة تماما هذه الشبكة من ل0 و في 1؛
بدلا من ذلك، لديك أشياء مثل رأس في بداية ملف.
لذلك وبعبارة أخرى، داخل ملف BMP. هو في مجمله مجموعة من 0 و ل1،
ولكن هناك بعض إضافية 0 هذا و 1 في هناك.
واتضح أن ما اتخذنا من المسلمات ربما لسنوات،
تنسيقات الملفات مثل. doc أو. XLS أو MP3. أو mp4.،
ما تنسيقات الملفات التي كنت على دراية.
حسنا، ما الذي يعنيه حتى أن يكون تنسيق الملف؟
لأنه في نهاية اليوم، فإن كل هذه الملفات التي نستخدمها يكون مجرد 0 هذا ولل1
وربما تلك 0 هذا وتمثل ل1، ب، ج، من خلال ASCII أو ما شابه ذلك،
ولكن من خلال نهاية اليوم، انها مجرد ل0 و 1.
>> حتى البشر فقط تقرر أحيانا لابتكار شكل ملف جديد
حيث توحيد أنماط من البتات ما يعني في الواقع.
وهنا في هذه الحالة، والناس الذين تصميم تنسيق ملف الصورة النقطية
وقال أنه في البايت الأول جدا في ملف الصورة النقطية، تدل على النحو الذي الإزاحة 0، هناك،
هناك سيكون بعض متغير اسمه بشكل غامض يسمى bfType،
الذي يقف فقط لنوع ملف الصورة النقطية؛ نوع ملف الصورة النقطية هذا.
يمكنك الاستدلال، ربما، من الصف الثاني الذي يقابل 2، عدد البايت 2،
لديه نمط لل0 و 1 والتي تمثل في ماذا؟
حجم شيء، وغني من هناك.
حتى في مجموعة مكونة المشكلة 4، وسوف يكون مشى لكم من خلال بعض من هذه الأمور.
>> نحن لن ينتهي مبالين كل منهم، ولكن لاحظت أنه يبدأ للحصول على اهتمام
أو حول خط بايت 54، rgbtBlue، الأخضر والأحمر.
إذا كنت قد سمعت من أي وقت مضى اختصار RGB، أحمر أخضر أزرق، وهذا هو إشارة إلى ذلك.
لأنه تبين يمكنك طلاء جميع ألوان قوس قزح
مع مزيج من الأحمر والأزرق والأخضر.
و، في الواقع، قد والدي في غرفة نذكر بعض من أقرب العرض.
في هذه الأيام، ترى الضوء الساطع فقط 1 الخروج من العدسة.
ولكن مرة في اليوم، كان عليك العدسة الأحمر، والأزرق عدسة، والعدسة الخضراء
وتهدف معا في شاشة وشكلت صورة ملونة.
وغالبا ما سيكون المدارس المتوسطة والمدارس الثانوية لديهم تلك العدسات
دائما ما منحرف قليلا، لذلك كنت نوع من رؤية الصور ضعفين أو ثلاثة أضعاف،
لكن ذلك كان على هذه الفكرة. هل كان لديك الضوء الأحمر والأخضر والأزرق رسم صورة.
ويستخدم هذا المبدأ نفسه في أجهزة الكمبيوتر.
>> لذلك من بين التحديات، ثم، لأنك في مشكلة حددت 4
ستكون بضعة أشياء، واحد هو في الواقع لتغيير حجم الصورة.
لتأخذ في وجود نمط من ل0 و ل1،
معرفة أي أجزاء من ل0 و 1 لتمثل ما في بنية مثل هذا،
وثم معرفة كيفية تكرار بكسل: ليفربول، والبلوز، والخضر
داخل بحيث عندما صورة يبدو مثل هذا في البداية، قد تبدو هذه بدلا بعد ذلك.
ومن بين التحديات الأخرى أيضا، والى ان يحدث ذلك سوف يتم تسليم لك
صورة من ملف الطب الشرعي الفعلي من كاميرا رقمية
وعلى هذا الكاميرا، ذات مرة، كان في مجمله مجموعة من الصور.
و، المشكلة أننا تمحى بطريق الخطأ أو كان صورة تلف بطريقة ما.
تحدث أمور سيئة مع الكاميرات الرقمية، ونسخ بسرعة حتى نتمكن جميعا من ل0 و 1 في
الخروج من تلك البطاقة لك، حفظ كل منهم في 1 ملف كبير، ومن ثم سنقوم تسليمها لك
المشكلة في مجموعة 4 بحيث يمكنك كتابة برنامج C التي في لاسترداد
كل هذه ملفات JPEG، من الناحية المثالية.
واتضح أن ملفات JPEG، على الرغم من انهم نوعا من تنسيق ملف المعقدة،
انهم أكثر تعقيدا من هذا الوجه المبتسم هنا.
اتضح أن كل JPEG يبدأ من نفس الأنماط في 0 و 1.
ذلك باستخدام حلقة الوقت أو لحلقة أو ما شابه ذلك،
يمكنك تكرار عبر كل من و0 وعلى 1 في هذه الصورة الطب الشرعي
وفي كل مرة تشاهد نمط خاص هذا ما يعرف في مواصفات مجموعة مشكلة من،
يمكنك أن تفترض، "أوه، هنا، مع احتمال كبير جدا،
بداية JPEG، 'وبمجرد العثور على النمط نفسه،
بعض عدد وحدات البايت أو كيلو بايت أو ميغابايت في وقت لاحق،
يمكنك أن تفترض، "أوه! وهنا لJPEG الثانية، الصورة أخذت بعد أول واحد.
اسمحوا لي أن تتوقف عن قراءة هذا الملف أولا، البدء في كتابة هذا واحد جديد ".
وخرج من البرنامج لpset 4 وستكون ما يصل الى 50 ملفات JPEG.
واذا كان ليس 50 صور JPEG، لديك قليلا من حلقة.
إذا كان لديك عدد لا حصر له من صور JPEG، لديك حلقة لا نهائية.
بحيث، أيضا سوف يكون الى حد بعيد حالة شائعة.
هذا ما يدور في الأفق.
>> مسابقة 0، وراءنا. ندرك، في بريدي الإلكتروني، أن هناك دائما الناس
وكلاهما سعيد، نوع من الحياد، وحزين حول مسابقة 0 الوقت.
ونرجو التواصل مع لي، وTFS الرأس، Zamyla، TF الخاصة بك
أو واحد من استراتيجية المساعدة القطرية أن تعرف إذا كنت ترغب في مناقشة كيف سارت الأمور.
>> ذلك لإقناع والدي هنا في الغرفة،
ما هي مكتبة CS50؟ عمل جيد.
ما هي مكتبة CS50؟ نعم؟ [أجوبة الطلاب، غير مفهومة]
حسنا >>، وحسن. لذلك فمن مجموعة مكتوب مسبقا من التعليمات البرمجية التي نحن، الموظفين، كتب،
نحن نقدم لك، لتوفير بعض الوظائف المشتركة.
أشياء مثل تفهموني سلسلة؛ تحصل لي الباحث، وكلها وظائف المسرودة هنا.
بدءا من الآن، ونحن نبدأ في اتخاذ هذه حقا قبالة عجلات التدريب.
لذلك نحن في طريقنا للبدء في اتخاذ بعيدا "السلسلة" من أنت،
الذي كان، نذكر، مجرد مرادف لنوع البيانات الفعلية؟ تشار *.
حتى بالنسبة للآباء، الذي كان على الأرجح - هذا امر جيد، لذلك سنقوم شار * تبدأ في رؤية
على الشاشة مما يزيد من إزالة ونحن "سلسلة" من قاموسنا،
على الأقل عندما يتعلق الأمر في الواقع كتابة التعليمات البرمجية.
وبالمثل، فإننا سوف تتوقف عن استخدام بعض هذه الوظائف بقدر،
لأن برامجنا بصدد الحصول على أكثر تعقيدا
بدلا من مجرد كتابة البرامج التي تجلس هناك مع وامض الأوامر،
انتظار المستخدم لكتابة شيء فيه.
ستحصل على المدخلات الخاصة بك من أي مكان آخر.
على سبيل المثال، سوف تحصل عليها من سلسلة من البتات على القرص الثابت المحلي.
ستحصل بدلا من ذلك في المستقبل من اتصال الشبكة، بعض المواقع في مكان ما.
لذلك دعونا قشر الطبقة مرة أخرى هذه لأول مرة، وسحب ما يصل الجهاز CS50
وهذا ملف يسمى CS50.h، والتي كنت قد تم حادة بما في ذلك لعدة اسابيع.
>> ولكن دعونا نرى ما هو في الواقع داخل هذا.
حتى الجزء العلوي من الملف باللون الأزرق هو فقط في مجمله مجموعة من التعليقات،
معلومات الضمان والترخيص. هذا هو نوع من نموذج المشتركة
في مجال البرمجيات، وذلك لأن الكثير من البرامج في هذه الأيام هو ما يسمى "المصدر المفتوح"
وهو ما يعني أن شخصا ما قد كتابة التعليمات البرمجية
وإتاحتها بحرية، وليس فقط لتشغيل واستخدام ل،
ولكن قراءة الواقع وتغيير والاندماج في عملك الخاص.
بحيث ما كنت تستخدم، البرمجيات مفتوحة المصدر،
وإن كان ذلك في شكل صغير جدا.
إذا كنت انتقل لأسفل الماضية التعليقات، رغم ذلك، سوف نبدأ في رؤية بعض الأشياء أكثر ألفة.
لاحظت ذلك في الجزء العلوي هنا، أن الملف يتضمن CS50.h في مجمله مجموعة من الملفات رأس.
الآن، فإن معظم هذه لم نر من قبل، ولكن هي واحدة
مألوفة؛ أي من هذه شهدنا، ولو لفترة وجيزة، حتى الآن؟
نعم، والمكتبات القياسية. Stdlib.h ديه malloc،
لذلك بدأت مرة واحدة ونحن نتحدث عن تخصيص ذاكرة ديناميكية،
بدأنا ونحن سوف نعود إلى الأسبوع المقبل أيضا، بما في ذلك الملف.
تبين أن BOOL والصواب والخطأ لا وجود لها في الواقع في C، في حد ذاتها،
إلا إذا كنت تضمين هذا الملف هنا.
لذلك لدينا، لأسابيع، بما في ذلك معيار تم bool.h
بحيث يمكنك استخدام فكرة. BOOL، صحيحة أو خاطئة
من دون ذلك، سيكون لديك لفرز من أنها وهمية واستخدام الباحث
وتفترض فقط تعسفا أن 0 و 1 هو زائف هو الصحيح.
>> الآن، إذا كان لنا أن انتقل لأسفل أخرى، هي هنا تعريفنا للسلسلة.
كما تبين، كما قلنا من قبل، أن هذا حيث هو * لا يهم حقا.
هل يمكن أن يكون حتى الفضاء في كل مكان.
لقد تم، في هذا الفصل الدراسي، وتعزيز هذه على أنها لتوضيح أن * له علاقة مع نوع.
ولكن ندرك، مجرد شائعة، إن لم يكن قليلا أكثر شيوعا، هي وضعه هناك
ولكن وظيفيا انها نفس الشيء.
ولكن الآن، إذا قرأنا إلى مزيد من الانخفاض، دعونا نلقي نظرة على القول، GetInt،
لأن استخدمنا ذلك، ربما، قبل أي شيء آخر في هذا الفصل الدراسي.
وهنا GetInt. هذا ما هو؟
هذا هو النموذج. في كثير من الأحيان، وقد وضعنا نماذج على قمم لدينا. ج الملفات،
ولكن يمكنك أيضا وضع نماذج في ملفات الرأس، ملفات ساعة،
هذا مثل واحد هنا، حتى عند كتابة بعض الوظائف
التي تريد الآخرين لتكون قادرة على استخدامها، وهذا بالضبط هو الحال مع مكتبة CS50،
لكم ليس فقط تنفيذ المهام الخاصة بك في شيء من هذا القبيل CS50.c،
كنت وضعت أيضا نماذج لا في الجزء العلوي من هذا الملف، ولكن في الجزء العلوي من ملف الرأس،
ثم أن ملف الرأس هو ما تشمل الأصدقاء والزملاء،
مع حادة تدرج في مدونة خاصة بها.
لذلك كل هذا الوقت كنت قد تم بما في ذلك جميع هذه النماذج
فعال في الجزء العلوي من الملف الخاص بك، ولكن عن طريق هذه الآلية تشمل حادة
أن النسخ أساسا والمعاجين هذا الملف إلى الخاصة بك.
الآن، وهنا بعض وثائق مفصلة إلى حد ما.
>> لدينا الى حد كبير أمرا مفروغا منه أن يحصل على GetInt الباحث،
ولكن تبين أن هناك بعض الحالات الزاوية، أليس كذلك؟
ما إذا كان المستخدم أنواع في عدد هذا الطريق أكبر من اللازم؟
A كوينتيليون، التي لا يمكن أن تناسب داخل لكثافة العمليات؟
ما هو السلوك المتوقع؟ حسنا، من الناحية المثالية، انها يمكن التنبؤ بها.
حتى في هذه الحالة، إذا كنت تقرأ الواقع غرامة المطبوعة،
سترى أن إذا لا يمكن قراءة الخط، وهذا INT_MAX العودة.
لقد تحدثت عن هذا أبدا، ولكن على أساس قيمته السوقية،
ما هو عليه، ربما؟
انها ثابتة، لذلك فمن بعض مستمر خاصة أن أعلن ربما
في واحدة من تلك الملفات رأس متروك أعلى في الملف،
وINT_MAX وربما شيء من هذا القبيل، ما يقرب من (2) مليار دولار.
ذهب الفكرة هي أن لأننا في حاجة للدلالة على نحو ما أن شيئا ما خطأ،
ونحن، نعم، لقد 4000000000 أرقام المتوفرة لدينا،
سلبي 2 مليار جنيه على لتصل إلى 2 مليار دولار، يعطي أو يأخذ.
حسنا، ما هو مشترك في مجال البرمجة هو أنت فقط سرقة واحدة من تلك الأرقام.
ربما 0، 2 مليار ربما، وربما السلبية 2 مليار دولار.
لذلك أنت تنفق واحدة من القيم الخاصة بك ممكن حتى تتمكن من الالتزام العالم
أنه إذا ما سارت الأمور بشكل خاطئ، وسأعود هذه القيمة الفائقة كبيرة.
ولكنك لا تريد أن يقوم المستخدم بكتابة شيء خفي مثل "3، 2، 4 ..."
من عدد كبير حقا، حيث يمكنك بدلا من ذلك التعميم ثابت.
ذلك حقا، إذا كنت يجري الشرج الأسابيع القليلة الماضية،
استدعاء في أي وقت GetInt، كان ينبغي لك التحقق مع حالة إذا.
فعل نوع المستخدم في INT_MAX، أو بشكل أكثر تحديدا،
لم GetInt INT_MAX العودة؟ لأنه إذا فعل ذلك،
وهذا يعني في الواقع أنهم لم اكتبه؛ حدث خطأ ما في هذه القضية.
لذلك هذا هو ما يعرف عموما كقيمة "الحارس"، الأمر الذي يعني فقط خاصة.
>> حسنا، دعونا ننتقل الآن إلى الملفات ج.
وقد وجدت الملف C في الجهاز لبعض الوقت،
و، في الواقع، والأجهزة فقد المترجمة مسبقا لك
في هذا الشيء يسمى نحن "رمز الكائن،"
ولكن فقط لا يهم أين لك فذلك لأن النظام يعرف،
في هذه الحالة، حيث أنه، والأجهزة.
ولكن دعونا الآن انتقل لأسفل إلى GetInt، ونرى كيف GetInt تعمل كل هذا الوقت.
حتى هنا لدينا بتصريحات مماثلة من قبل.
اسمحوا لي أن التكبير في جزء فقط قانون،
وما لدينا لGetInt هو ما يلي.
وهو لا يأخذ المدخلات وتقوم بإرجاع عدد صحيح، في حين أن (صحيح)، لذلك لدينا حلقة لانهائية المتعمد
ولكن، من المفترض، سنقوم الخروج من هذا بطريقة أو بأخرى، أو العودة من خلال ذلك.
لذلك دعونا نرى كيف يعمل هذا. حسنا، يبدو أننا باستخدام GetString
في هذا السطر الأول داخل الحلقة، 166.
هذا هو الآن بسبب الممارسات الجيدة تحت أي ظروف
يمكن إرجاع هذا GetString خاصة الكلمات الرئيسية، NULL؟
إذا حدث خطأ ما. ما الذي يمكن أن تذهب الخطأ عند استدعاء شيء من هذا القبيل GetString؟
نعم؟ [الجواب طالبة، غير مفهومة] >> نعم. لذلك ربما malloc فشل.
في مكان ما تحت غطاء محرك السيارة GetString تدعو malloc،
الذي يخصص الذاكرة، والتي تتيح مخزن الكمبيوتر
جميع الشخصيات التي يقوم المستخدم بكتابة إلى لوحة المفاتيح.
وافترض أن المستخدم لديه الكثير من وقت الفراغ
وكتبت أكثر من ذلك، على سبيل المثال، من 2 مليار حرفا.
المزيد من الحروف من الكمبيوتر حتى RAM.
حسنا، GetString أن تكون قادرة على أن دلالة لك،
حتى لو كان هذا هو سوبر سوبر حالة الزاوية المألوف.
يجب أن يكون بطريقة أو بأخرى قادرة على التعامل مع هذا الأمر، وذلك GetString،
إذا كان لنا أن نعود ونقرأ الوثائق الخاصة به، لا، في الواقع، والعودة NULL.
إذا فشل GetString الآن من خلال العودة NULL، GetInt سوف تفشل
من خلال العودة INT_MAX، تماما كما الحارس.
هذه هي الاتفاقيات فقط الإنسان. الطريق الوحيد الذي يمكن ان نعرف هذا هو الحال
هو من خلال قراءة الوثائق.
لذلك دعونا انتقل لأسفل إلى حيث كثافة العمليات هو في الواقع GotInt.
>> حتى لو كنت انتقل لأسفل قليلا كذلك، في خط لدينا 170 تعليقا فوق هذه الخطوط.
لذلك فإننا نعلن، في 172، وكثافة العمليات ن ج وشار، ثم هذه الدالة الجديدة
التي قد تعثرت عبر بعض منكم من قبل، ولكن sscanf.
هذا و لتقف على المسح سلسلة.
وبعبارة أخرى، أعطني سلسلة وسوف مسحها ضوئيا عن قطعة من المعلومات التي تهم.
فماذا يعني ذلك؟ حسنا، لنفترض أنني اكتب في، حرفيا، 1 2 3 على لوحة المفاتيح،
وضرب ثم أدخل. ما هو نوع البيانات من 3 2 1 عندما عاد من GetString؟
من الواضح أن سلسلة، أليس كذلك؟ حصلت على سلسلة، لذلك 1 2 3 هو حقا "1 2 3"
مع 0 \ في نهاية ذلك. هذا ليس صحيح.
هذا ليس عددا. يبدو عددا ولكنها ليست في الواقع.
فماذا يجب أن نفعل GetInt؟ عليها أن تفحص هذه السلسلة من اليسار إلى اليمين،
1 2 3 \ 0، وعلى نحو ما تحويله إلى عدد صحيح الفعلية.
الآن، هل يمكن معرفة كيفية القيام بذلك.
إذا كنت تعتقد مرة أخرى إلى pset 2، يفترض أنك حصلت قليلا مريحة
مع قيصر أو vigenere حتى تتمكن من تكرار عبر سلسلة،
يمكنك تحويل حرف إلى رجات مع الاختيار. وهذا هو الكثير من العمل.
لماذا لا استدعاء دالة مثل sscanf أن يفعل ذلك بالنسبة لك؟
لذلك تتوقع sscanf حجة، في هذه الحالة يسمى الخط، الذي هو سلسلة.
ثم قمت بتحديد، تهمك، مشابهة جدا إلى printf،
ماذا تتوقع أن نرى في هذه السلسلة؟
ما أقوله هنا هو، أتوقع أن نرى رقم عشري وربما حرف.
وسنرى لماذا هذا هو الحال في لحظة واحدة.
وتبين أن هذا التدوين الآن تذكر الاشياء
بدأنا نتحدث عن ما يزيد قليلا على اسبوع.
>> ما هو & N & C والقيام بالنسبة لنا هنا؟ [أجوبة الطلاب، غير مفهومة]
نعم >>. انها إعطائي عنوان وعنوان ن ج.
الآن، لماذا هو مهم؟ حسنا، أنت تعرف أن لها وظائف في C
يمكنك دائما العودة قيمة أو قيمة على الإطلاق.
يمكنك العودة إلى الباحث، وسلسلة، طوف، وشار، أيا كان.
أو يمكنك العودة باطلة، ولكن يمكنك العودة شيء سوى 1 الحد الأقصى.
ولكن هنا نريد sscanf للعودة إلى الباحث لي ربما، رقم عشري،
وأيضا. شار، وساوضح لماذا في لحظة شار
لذلك كنت ترغب في العودة بشكل فعال و 2 الأشياء، وهذا هو فقط غير ممكن في C.
لذلك يمكنك أن تغلب على ذلك بتمرير عناوين في 2،
لأن بمجرد تسليم وظيفة 2 يتصدى ل، ماذا يمكن أن تفعل وظيفة معهم؟
يمكن أن تكتب إلى تلك العناوين. يمكنك استخدام العملية * و"الذهاب إلى هناك" إلى كل من هذه العناوين.
انها نوع من هذه الآلية مستتر، ولكن شائع جدا لتغيير قيم المتغيرات
في أكثر من مجرد 1 مكان، في هذه الحالة 2.
الآن، لاحظ أنا التحقق من وجود == to1، ومن ثم العودة ن إذا كان ذلك لا، في الواقع، تقييم إلى true.
فما الذي يحدث؟ حسنا، من الناحية الفنية، كل ما نريده حقا أن يحدث في GetInt هو هذا.
نريد تحليل، إذا جاز التعبير، ونحن نريد لقراءة السلسلة
"1 2 3" وإذا كان يبدو أن هناك عددا هناك،
ما نحن نقول sscanf القيام به هو وضع هذا الرقم، 1 2 3، في هذا المتغير ن بالنسبة لي.
لماذا، إذن، وقد فعلت ذلك أيضا؟
ما هو دور أيضا قائلا، sscanf، قد تحصل أيضا على حرف هنا.
[تحدث الطالب، غير مفهومة] >> غير - نقطة العشرية يمكن أن تعمل.
دعونا نرى أن يعتقد للحظة واحدة. وماذا ايضا؟
[طالبة، غير مفهومة] >> لذا، فكر جيدا، يمكن أن يكون الحرف NULL.
انها في الواقع ليست، في هذه الحالة. نعم؟ [طالبة، غير مفهومة]
>> ASCII >>. أو، اسمحوا لي أن التعميم إلى أبعد من ذلك.
ج هناك فقط٪ لتدقيق الأخطاء.
نحن لا نريد أن يكون هناك حرف بعد الرقم،
ولكن ما هذا يتيح لي القيام به هو ما يلي:
تبين أن sscanf، إلى جانب تخزين القيم في ن ج و، في هذا المثال هنا،
ما هو أيضا لا تقوم بإرجاع عدد من المتغيرات وضعه القيم فيها.
حتى إذا كنت اكتب فقط في 3 2 1، عندها فقط سوف د٪ لمطابقة
وفقط يحصل على تخزين N بقيمة مثل 3 2 1 ويحصل على وضع شيء في ج؛
ج تبقى قيمة القمامة، إذا جاز التعبير.
القمامة لأنه لم يكن يوما تهيئة لأن بعض القيمة.
حتى في هذه الحالة، sscanf بإرجاع 1، لأنني بالسكان واحدة من تلك المؤشرات،
وفي هذه الحالة، عظيم. لدي الباحث، ولذا فإنني تحرير خط لتحرير الذاكرة
أن GetString المخصصة في الواقع، ومن ثم أعود ن.
آخر، إذا لك أن تساءلت حيث أن إعادة المحاولة البيان يأتي من يأتي من هنا.
إذا، على النقيض من ذلك، اكتب I فى 1 2 3 فو،
فقط بعض تسلسل عشوائي من النص، sscanf سوف نرى،
أوه، العدد، أوه، العدد، أوه، العدد، أوه - و.
وانه سيكون لوضع 1 2 3 في ن.
انه سيكون لوضع و في ج، ومن ثم العودة 2.
لذلك لدينا، فقط باستخدام التعريف الأساسي للسلوك scanf ل،
طريقة بسيطة جدا - حسنا، معقدة للوهلة الأولى، ولكن في نهاية اليوم،
آلية بسيطة نسبيا من القول، هل هناك كثافة العمليات، وإذا كان الأمر كذلك هو أن الشيء الوحيد الذي وجدت؟
والمساحة البيضاء هنا هو متعمد. إذا كنت تقرأ وثائق sscanf،
فإنه يقول لك أنه إذا قمت بتضمين قطعة من المساحة البيضاء في بداية أو نهاية،
sscanf سيسمح أيضا للمستخدم، لأي سبب كان، لتصل المسافة 1 2 3، والتي من شأنها أن تكون مشروعة.
لن يصيح في المستخدم فقط لأنهم ضرب المسافة في بداية أو نهاية،
وهو أكثر قليلا سهل الاستعمال.
>> أي أسئلة، ثم على GetInts؟ نعم؟
[سؤال الطالب، غير مفهومة]
سؤال جيد >>. ماذا لو قمت بكتابته في شار، مثل ضرب و و، أدخل
دون كتابة أي وقت مضى 1 2 3؛ ما رأيك في سلوك هذا الخط من التعليمات البرمجية سيكون بعد ذلك؟
لذلك يمكن أن تغطي sscanf ذلك أيضا، لأنه في هذه الحالة،
انها ليست الذهاب الى ملء ن أو جيم؛ انه سيكون العودة بدلا من ذلك 0.
في هذه الحالة، وأنا أيضا اصطياد هذا السيناريو، لأن القيمة المتوقعة ما أريده هو 1.
أريد فقط 1، والمراد شغلها شيء سوى 1. سؤال جيد. الآخرين؟
>> كل الحق، لذلك دعونا لا تذهب من خلال جميع وظائف هنا،
لكن الذي يبدو أن، ربما، من الفائدة المتبقية
وGetString لأنه تبين أن GetFloat، GetInt،
GetDouble، GetLongLong جميع بونت الكثير من وظائفها لGetString.
لذلك دعونا نلقي نظرة على كيفية تنفيذ انه هنا.
هذا واحد يبدو معقدة بعض الشيء ولكنه يستخدم نفس الأسس
اننا بدأنا نتحدث عن الأسبوع الماضي. حتى في GetString،
الذي لا يأخذ حجة باطلة وفقا لتصل هنا،
وتقوم بإرجاع سلسلة، لذا أنا معلنا سلسلة تسمى العازلة.
لا أعرف حقا ما الذي يحدث لاستخدامها في ذلك، لكن سننتظر لنرى.
تبدو مثل القدرات، بشكل افتراضي، 0؛ سنا متأكدين تماما حيث هذا هو ذاهب.
غير متأكد ما يحدث ن لاستخدامها في حتى الان.
ولكن الآن هو الحصول على أكثر من ذلك بقليل للاهتمام، وذلك في خط 243،
نعلن لج كثافة العمليات، وهذا هو نوع من الغباء التفاصيل.
A حرف هو 8 بت، ويمكن تخزين 8 بت عدد القيم المختلفة؟
256. المشكلة هي، إذا كنت تريد أن يكون 256 حرفا ASCII مختلفة،
التي توجد فيها، إذا كنت تعتقد الظهر، وهذا ليس شيئا لتسجيل.
ولكن إذا كنت تعتقد مرة أخرى إلى المخطط الذي ASCII كبيرة كان لدينا منذ أسابيع،
كانت هناك، في هذه الحالة، 128 أو 256 حرفا ASCII.
استخدمنا جميع أنماط من 0 و 1 متروك.
هذا مشكلة إذا كنت تريد أن تكون قادرة على الكشف عن وجود خطأ.
لأنه إذا كنت تستخدم بالفعل 256 قيمة لشخصياتك،
هل حقا لا نخطط إلى الأمام، لأنه الآن لا يوجد لديك طريقة للقول،
"هذه ليست ذات طابع شرعي، وهذا هو بعض رسالة خاطئة."
وذلك ما يفعله هو العالم، فإنها تستخدم أكبر قيمة المقبل،
شيء يشبه الباحث بحيث يكون لديك عدد من البتات مجنون،
32 لمدة 4 مليار القيم الممكنة، بحيث يمكنك ببساطة وضع حد باستخدام،
أساسا، 257 منهم (1)، التي لديها بعض معنى خاص وخطأ.
>> لذلك دعونا نرى كيف يعمل هذا. في خط 246، لدي هذه الحلقة في حين كبيرة
التي يتم استدعاء fgetc؛ و ملف معنى، getc، ثم ستدين.
تبين هذه هو مجرد وسيلة أكثر دقة من قوله "قراءة المدخلات من لوحة المفاتيح."
لوحة المفاتيح القياسية وسائل المدخلات والمخرجات القياسية يعني الشاشة،
والخطأ المعياري، والذي سنرى في pset 4، يعني الشاشة،
ولكن جزء خاص من الشاشة بحيث أنه ليس الخلط
مع الانتاج الفعلي الذي تريده لطباعة، ولكن أكثر على ذلك في المستقبل.
ذلك يعني فقط قراءة fgetc حرف واحد من لوحة المفاتيح، وتخزينها أين؟
تخزينها في ج، ومن ثم تحقق، لذلك أنا فقط باستخدام بعض العطف منطقية هنا،
تأكد من أنه لا يساوي \ ن، وبالتالي فإن المستخدم قد تصل إلى تدخل.
نريد التوقف عند هذه النقطة في نهاية الحلقة، ونحن نريد أيضا أن تحقق
لثابت خاصة، EOF، الذي إذا كنت تعرف أو تخمين - ماذا يقف؟
نهاية الملف. لذلك هذا هو نوع من معنى، لأنه إذا أنا كتابة على لوحة المفاتيح،
هناك حقا أي ملف المشاركة في ذلك،
ولكن هذا هو نوع فقط من مصطلح عام يستخدم ليعني
أن أي شيء آخر يأتي من أصابع الانسان. EOF. نهاية الملف.
بوصفها جانبا، إذا كنت قد ضربت من أي وقت مضى التحكم في لوحة المفاتيح د،
لا أن يكون لديك حتى الآن؛ كنت قد بلغت التحكم ج.
لكن السيطرة د يرسل هذا ثابت EOF خاصة تسمى.
>> حتى الآن لدينا سوى بعض تخصيص الذاكرة الديناميكية.
إذا كان الأمر كذلك N + 1> القدرة، والآن سوف أشرح ن.
وكيف أن العديد من بايت ن حاليا في المخزن المؤقت،
السلسلة التي كنت تقوم حاليا ببناء من المستخدم.
إذا كان لديك أكثر من الأحرف في المخزن المؤقت الخاص مما لديك القدرة في المخزن المؤقت،
حدسي، ما يتعين علينا القيام به ثم يتم تخصيص المزيد من القدرات.
انا ذاهب الى المقشود على بعض العمليات الحسابية هنا
والتركيز فقط على هذه الوظيفة هنا.
كنت تعرف ما هو malloc، أو على الأقل على دراية بصفة عامة.
اتخاذ تخمين ما realloc لا. [الجواب طالبة، غير مفهومة]
نعم >>. واضاف انها ليست تماما الذاكرة، بل اعادة توطين الذاكرة على النحو التالي:
إذا كان هناك ما زال غرفة في نهاية السلسلة لتعطيك أكثر من تلك الذاكرة
مما يعطي أصلا لك، ثم عليك أن تحصل على ذاكرة إضافية.
حتى تتمكن من مجرد وضع الأحرف سلاسل العودة إلى الوراء إلى العودة إلى الوراء.
ولكن اذا كان هذا ليس هو الحال، لأن كنت انتظر وقتا طويلا
وحصلت على شيء عشوائي ساقط في الذاكرة هناك، ولكن هناك إضافية
الذاكرة إلى هنا، هذا ما يرام. Realloc سوف تفعل كل رفع الأحمال الثقيلة بالنسبة لك،
نقل سلسلة كنت قد قرأت حتى الآن في من هنا،
ضعها هناك، ومن ثم يعطيك بعض أكثر المدرج في تلك المرحلة.
حتى مع موجة من ناحية، واسمحوا لي أن أقول إن ما تقوم به GetString
ولقد بدا مع منطقة عازلة صغيرة، ربما 1 حرف واحد،
وإذا كان المستخدم أنواع الأحرف في 2، GetString ينتهي
تدعو realloc ويقول: "أوه، كان 1 حرف لا يكفي.
أعطني 2 حرف. " إذا ثم قراءة لكم من خلال منطق الحلقة،
انها سوف يقول، "أوه، المستعمل في طباعة 3 أحرف.
أعطني الآن 2 ولكن لا 4 أحرف، ثم إعطاء لي 8، ثم تعطيني 16 و 32 ".
حقيقة أنني مضاعفة قدرة كل مرة
يعني أن المخزن المؤقت لن تنمو ببطء.
انها سوف تنمو بسرعة فائقة، وما قد يكون ميزة ذلك؟
لماذا أنا مضاعفة حجم المخزن المؤقت، على الرغم من أن المستخدم
قد تحتاج 1 فقط الزائدة من لوحة المفاتيح؟
[الجواب طالبة، غير مفهومة]. >> ما هذا؟
بالضبط. لم يكن لديك لتنمو في كثير من الأحيان باسم.
وهذا هو مجرد نوع من أ - أنت الآن على التحوط الرهانات الخاصة بك هنا.
وكانت الفكرة هي أنك لا تريد الاتصال realloc كثيرا، لأنه يميل إلى أن يكون بطيئا.
أي وقت أن تطلب من نظام التشغيل للذاكرة، كما سترى قريبا
في مجموعة مشكلة في المستقبل، فإنها تميل إلى يستغرق بعض الوقت.
لذلك التقليل من هذا المبلغ من الزمن، حتى لو كنت إضاعة بعض المساحة، يميل إلى أن يكون شيء جيد.
>> ولكن إذا قرأنا من خلال الجزء الأخير من GetString هنا،
ومرة أخرى، فهم كل سطر واحد هنا ليست في غاية الأهمية اليوم.
ولكن لاحظ أنه في نهاية المطاف تدعو malloc مرة أخرى، وذلك بتخصيص
تماما كما بايت يصل الى انها تحتاج لسلسلة
ويلقي بعيدا ثم عن طريق الاتصال مجانا، المخزن المؤقت كبيرة للغاية،
إذا كان بالفعل حصلت تضاعف عدة مرات أيضا.
وباختصار، هذه هي الطريقة التي تعمل GetString كل هذا الوقت.
تتم قراءة كل ما يفعله حرف واحد في وقت واحد مرة أخرى ومرة ​​أخرى ومرة ​​أخرى
وفي كل مرة يحتاج بعض ذاكرة إضافية، فإنه يسألك نظام التشغيل لذلك من خلال الدعوة realloc.
أي أسئلة؟ حسنا.
>> هجوم. الآن نحن نفهم أن مؤشرات، أو على الأقل
معتادا بشكل متزايد مع مؤشرات،
دعونا النظر في كيفية العالم كله يبدأ في الانهيار
إذا لم يكن لدفاع ضد المستخدمين الخصومة تماما،
الناس الذين يحاولون اختراق النظام الخاص بك.
الناس الذين يحاولون سرقة البرمجيات الخاصة بك عن طريق التحايل بعض رمز التسجيل
قد لديهم وإلا لكتابة فيه.
نلقي نظرة على هذا المثال هنا، الذي هو مجرد رمز C
يحتوي على المهمة الرئيسية في الجزء السفلي، الذي يستدعي الدالة فو،
وما صدوره لفو؟ [طالب] وهناك حجة واحدة.
حجة واحدة >>. حتى argv [1]، مما يعني أن الكلمة الأولى للمستخدم كتابة
في سطر الأوامر بعد a.out أو أيا كان يسمى البرنامج.
حتى فو، في الأعلى، يأخذ في حرف * ولكن * حرف هو فقط ما؟
السلسلة. لا يوجد شيء جديد هنا، وبشكل تعسفي أن يتم استدعاء سلسلة بار.
في هذا الخط هنا، شار ج [12]، في نوع من شبه التقنية العربية، ما هو هذا الخط تفعل؟
مجموعة من -؟ حرفا. تعطيني مجموعة من 12 حرفا.
لذلك يمكن ان نسميه هذا المخزن مؤقت. انه دعا تقنيا فإنه ج، ولكن منطقة عازلة في البرمجة
يعني مجرد حفنة من المساحة التي يمكنك وضع بعض الاشياء فيه.
>> وأخيرا ثم، memcpy، لقد لا تستخدم من قبل.
ولكن يمكنك تخمين ربما ما تقوم به. نسخه الذاكرة.
ماذا يفعل؟ حسنا، انها على ما يبدو بنسخ بار، مدخلاته، في ج،
لكن إلى طول شريط.
ولكن هناك خلل هنا.
حسنا، لذلك من الناحية الفنية ينبغي أن نفعله حقا التوابع strlen (بار) X sizeof (تشار)، وهذا الصحيح.
ولكن في أسوأ الحالات هنا، دعونا نفترض أن that's - لذلك، حسنا.
ثم هناك في 2 البق. حتى sizeof (تشار)، كل الحق، دعونا جعل هذا قليلا على نطاق أوسع.
حتى الآن لا يزال هناك علة، وهذا ما؟
[الجواب طالبة، غير مفهومة] تحقق >> لماذا؟ حسنا، لذلك يجب علينا أن فحص
لNULL، لأن أشياء سيئة يحدث عندما الخاص بك هو مؤشر NULL،
لأنه قد ينتهي بك الأمر الذهاب إلى هناك، ويجب أن لا يكون أي وقت مضى الذهاب إلى NULL
يعتبر إلغاء مرجعية من قبل مع المشغل *.
بحيث الجيد، وماذا يفعلون نحن؟ منطقيا هناك عيب هنا أيضا.
[الجواب طالبة، غير مفهومة]
حتى إذا تحقق >> argc ≥ 2؟
حسنا، لذلك هناك 3 الخلل في هذا البرنامج هنا.
نحن لا التحقق إذا كان المستخدم كتابتها في الواقع أي شيء في argv [1]، وحسن.
إذن ما هو علة ثالثة؟ نعم؟
[الجواب طالبة، غير مفهومة] >> جيد.
لذلك نحن فحص سيناريو واحد. بحثنا ضمنا لا تنسخ أكثر من الذاكرة
وتتجاوز من طول شريط.
إذا كان الأمر كذلك السلسلة المستعمل في طباعة هو 10 حرفا،
هذا وقال: "نسخ فقط 10 حرفا."
وهذا ما يرام، ولكن ما إذا كان المستخدم كتابتها في كلمة واحدة في موجه
مثل كلمة حرف 20؛ هذا هو، قائلا نسخة من شريط 20 حرفا في ماذا؟
ج، والمعروف باسم عازلة لدينا، مما يعني أنك كتبت للتو البيانات
إلى مواقع بايت 8 أن كنت لا تملك،
وكنت لا تملك لهم، بمعنى أن كنت أبدا المخصصة لهم.
لذلك هذا هو ما يعرف عموما بأنه هجوم تجاوز المخزن المؤقت،
أو هجوم تجاوز سعة المخزن المؤقت، والهجوم انها بمعنى أنه إذا كان المستخدم
أو البرنامج الذي المتصل وظيفة تقوم به هذه ضار،
ما يحدث في الواقع القادمة يمكن أن تكون سيئة جدا.
>> دعونا نلقي نظرة على هذه الصورة هنا.
هذه الصورة تمثل الكدسة من الذاكرة.
وأذكر أنه في كل مرة كنت استدعاء دالة،
لك هذا الإطار يذكر على المكدس وثم آخر ثم آخر ثم آخر.
وحتى الآن قمنا مجرد نوع من هذه المستخرجة بعيدا كما المستطيلات
إما هناك على لوحة أو على الشاشة هنا.
ولكن إذا كان لنا أن التكبير في واحدة من تلك المستطيلات،
عند استدعاء الدالة فو، تبين أن هناك أكثر على المكدس
داخل هذا الإطار المستطيل والتي
من X و y فقط وألف وباء، وكأننا لم نتحدث عن المبادلة.
اتضح أن هناك بعض التفاصيل ذات مستوى أقل،
من بينها العودة عنوان.
لذلك عندما تبين الرئيسي يدعو فو، الرئيسي وإبلاغ فو
ما هو عنوان الرئيسي في ذاكرة الكمبيوتر.
لأن خلاف ذلك، في أقرب وقت يتم تنفيذ فو، كما في هذه الحالة هنا،
بمجرد وصولك الى هذا قوس إغلاق مجعد في نهاية فو،
كيف هيك لا أعرف فو حيث يفترض السيطرة على البرنامج أن تذهب؟
اتضح أن الإجابة على هذا السؤال هو في هذا المستطيل الأحمر هنا.
هذا يمثل المؤشر، والامر متروك لتخزين الكمبيوتر، بشكل مؤقت،
على المكدس يسمى تتم عنوان رئيسي لذلك أنه بمجرد تنفيذ فو،
الكمبيوتر وما يعرف أين الخط الرئيسي في العودة إلى.
حفظ مؤشر الإطار تتعلق بالمثل على ذلك.
* شريط شار هنا يمثل ما؟
حسنا، الآن هذا الجزء الأزرق هو الإطار فو هنا، ما هو شريط؟
حسنا، ذلك هو مجرد شريط الوسيطة إلى وظيفة فو.
>> حتى الآن نعود إلى الصورة مألوفة.
هناك المزيد والمزيد من الاشياء الانحرافات التي تظهر على الشاشة
ولكن هذا الجزء الضوء الأزرق هو ما كنا الرسم على السبورة لشيء من هذا القبيل المبادلة.
هذا هو الإطار لفو والشيء الوحيد فيه الآن هو بار،
وهو هذه المعلمة.
ولكن يجب أن يكون آخر ما في المكدس، وفقا لهذا الرمز هنا؟
ج شار [12]. لذلك يجب أن نرى أيضا 12 الساحات من الذاكرة،
المخصصة للمتغير يسمى C.
والواقع أننا لا يكون هذا على الشاشة.
أعلى جدا هناك ج [0]، ومن ثم صاحب هذا الرسم البياني
لم أكن عناء رسم كل من المربعات ولكن هناك في الواقع 12 هناك
لأنه إذا نظرتم في أسفل اليمين، ج [11]، إذا كنت تعول من 0، 12 بايت هو من هذا القبيل.
ولكن هنا تكمن المشكلة: في أي اتجاه متزايد هو C؟
نوع من أعلى إلى أسفل، أليس كذلك؟ إذا كان يبدأ في أعلى وينمو إلى أسفل،
لا تبدو تركنا أنفسنا المدرج الكثير هنا على الإطلاق.
لدينا نوع من رسمت أنفسنا في مأزق،
وأن ج [11] هو الحق حتى ضد نقابة المحامين، والذي هو الحق حتى ضد مؤشر الإطار مكدس،
الذي هو الحق حتى ضد عنوان المرسل؛ هناك غرفة لا أكثر.
إذن ما هو ضمنا، ثم، إذا كنت المسمار،
وحاولت قراءة 20 بايت إلى بايت العازلة 12-؟
حيث هي تلك التي تسير 8 بايت إضافية أن تذهب؟
داخل كل شيء آخر، ومنها ما هو السوبر الهامة.
والشيء الأكثر أهمية، من المحتمل، هو مربع أحمر هناك، عنوان المرسل.
لأن نفترض أنك إما بطريق الخطأ أو adversarially
الكتابة فوق تلك بايت 4، أن عنوان المؤشر،
ليس فقط مع القمامة، ولكن مع الرقم الذي يحدث لتمثيل العنوان الفعلي في الذاكرة؟
ما هو implicaiton، منطقيا؟
[أجوبة الطلاب، غير مفهومة] >> بالضبط. عندما يعود فو
والزيارات التي متعرج، والبرنامج سنشرع عدم العودة الى الأصل،
انه سيكون من العودة إلى أي عنوان في هذا المربع الأحمر.
>> الآن، في حالة تسجيل البرنامج التحايل،
ما هو العنوان الذي يجري عاد إلى هي وظيفة
الذي يحصل عادة بعد أن كنت قد دعا دفعت لهذا البرنامج وإدخالها التعليمات البرمجية التسجيل؟
هل يمكن أن ترتب من خدعة الكمبيوتر في لن هنا، ولكن بدلا من ذلك، لتصل هنا.
أو، إذا كنت حقا ذكي، ويمكن في الواقع عدو اكتب في في لوحة المفاتيح،
على سبيل المثال، وليس كلمة الفعلية، لا الأحرف 20، ولكن لنفترض انه أو انها
أنواع الأحرف في بعض التي تمثل رمز؟
وانها لن تكون C رمز، فإنه سيكون من الأحرف
التي تمثل رموز الجهاز ثنائي، ل0 و 1.
ولكن لنفترض انهم ذكي بما فيه الكفاية للقيام بذلك، للصق على نحو ما في موجه GetString
وهو ما يتم ترجمة التعليمات البرمجية بشكل أساسي،
وآخر 4 بايت الكتابة أن عنوان المرسل، وعنوان ما لا نفعل ذلك الإدخال؟
فإنه يخزن في هذا المستطيل الأحمر عنوان البايت الأول من المخزن المؤقت.
ولذلك عليك أن تكون ذكية حقا، وهذا هو الكثير من التجربة والخطأ
للناس سيئة هناك، ولكن، إذا كان يمكنك معرفة كيفية كبيرة هذا المخزن المؤقت
بحيث بايت القليلة الماضية في الإدخال التي تقدم إلى البرنامج
يحدث ليكون معادلا لعنوان بداية العازلة الخاص بك،
يمكنك القيام بذلك. اذا قلنا، عادة، مرحبا، و\ 0، وهذا ما ينتهي في المخزن المؤقت.
ولكن إذا نحن أكثر ذكاء، ونحن ملء ذلك مع ما العازلة سنتصل بشكل عام شفرة الهجوم،
A، A، A، A: هجوم، هجوم، هجوم، هجوم، حيث هذا هو مجرد شيء لا شيء سيئ.
حسنا، ماذا يحدث إذا كنت حقا ذكي، قد تفعل هذا:
في المربع الأحمر هنا هو سلسلة من الأرقام: 80، CO، 35، 08.
تلاحظ أن يطابق الرقم الذي يعود هنا.
انها في ترتيب عكسي، ولكن أكثر في الوقت المحدد بعض هذا الآخر.
تلاحظ أنه تم تغيير هذا عنوان المرسل عمدا
على قدم المساواة عنوان هنا، وليس عنوان الرئيسي.
إذا كان الأمر كذلك الرجل السيئ هو السوبر ذكية، وقال انه أو انها سوف تدرج في أن شفرة الهجوم
شيء من هذا القبيل، 'حذف جميع الملفات الخاصة بالمستخدم. "
أو "نسخ كلمات المرور" أو "إنشاء حساب المستخدم الذي يمكنني تسجيل الدخول إلى. '
أي شيء على الإطلاق، وهذا هو الخطر على حد سواء وقوة C.
لأنه لديك إمكانية الوصول إلى الذاكرة من خلال مؤشرات
وبالتالي يمكنك كتابة أي شيء تريده في ذاكرة الكمبيوتر.
يمكنك جعل جهاز كمبيوتر تفعل كل ما تريد ببساطة عن طريق
بعد ذلك القفز نحو داخل مجالها الذاكرة الخاصة.
وهكذا، حتى يومنا هذا، لذلك العديد من البرامج والعديد من المواقع بحيث يتم خطر
تختزل إلى الناس الاستفادة من هذا.
وهذا قد يبدو وكأنه هجوم متطورة فائقة،
لكنه لا يبدأ دائما على هذا النحو.
>> الحقيقة هي أن الناس ما تفعل عادة سيئة وسوف هو،
سواء كان ذلك في برنامج في سطر الأوامر أو برنامج أو موقع على شبكة الإنترنت واجهة المستخدم الرسومية،
وكنت مجرد بداية تقديم هراء.
اكتب لكم في كلمة كبيرة حقا في حقل البحث وتصل إلى تدخل،
وعليك الانتظار لمعرفة ما اذا تعطل الموقع.
أو يمكنك الانتظار لمعرفة ما إذا كان برنامج يظهر بعض رسالة خطأ.
لأنه إذا كنت محظوظا، والرجل سيئة،
وأنت مجنون توفير بعض المدخلات التي تعطل البرنامج،
وهذا يعني مبرمج لم تتوقع سلوكك سيئة
مما يعني يمكنك على الأرجح، مع ما يكفي من الجهد،
محاكمة يكفي والخطأ، ومعرفة كيفية شن هجوم أكثر دقة.
لذلك بقدر ما هو جزء من الأمن لا مجرد تجنب هذه الهجمات تماما، ولكن كشفها
وفعلا تبحث في سجلات ورؤية ما لديك المدخلات مجنون الناس كتابتها في موقع الويب الخاص بك.
ما شروط البحث والناس كتابتها في موقع الويب الخاص بك على أمل تفيض بعض العازلة؟
وهذا كله يتلخص في أساسيات بسيطة من ما هو صفيف،
وماذا يعني ذلك لتخصيص واستخدام الذاكرة؟
وتتعلق هذا أيضا، هو هذا.
>> لذلك دعونا فقط نظرة من داخل القرص الصلب مرة أخرى.
لذلك كنت أذكر من أسبوع أو أسبوعين قبل أن عند سحب الملفات
لسلة المحذوفات سلة المهملات أو، ماذا يحدث؟
[طالب] لا شيء. نعم >>، لا شيء على الإطلاق. إذا في نهاية المطاف تشغيل منخفضة
على مساحة القرص، ويندوز أو ماك OS بدء حذف الملفات بالنسبة لك.
ولكن إذا قمت بسحب شيء في هناك، ثم انها ليست آمنة على الإطلاق.
كل ما تبذلونه من الحجرة، صديق أو أحد أفراد العائلة القيام به هو النقر المزدوج، وفويلا.
هناك سطحية كافة الملفات التي حاولت حذفها.
لذلك معظمنا على الأقل أعرف أن لديك لانقر بزر الماوس الأيمن فوق أو السيطرة
وإفراغ سلة المهملات، أو شيء من هذا القبيل.
لكن حتى ذلك الحين، وهذا لا تفعل تماما خدعة.
لأن ما يحدث عندما يكون لديك ملف على القرص الثابت
الذي يمثل بعض مستند Word أو JPEG بعض؟
وهذا يمثل القرص الثابت، ودعونا نقول هذه القطعة هنا يمثل هذا الملف،
وانها تتكون من مجموعة كاملة من ل0 و 1.
ماذا يحدث عندما لا اسحب فقط هذا الملف إلى المهملات أو سلة المهملات،
لكنها فارغة أيضا؟
نوع من لا شيء. انها ليست شيئا على الإطلاق الآن.
الآن انها مجرد شيء، لأن شيئا قليلا يحدث في شكل هذا الجدول.
ولذلك لا يوجد نوع من قاعدة البيانات أو جدول داخل ذاكرة جهاز الكمبيوتر
يحتوي أساسا العمود 1 لأسماء الملفات،
والعمود 1 لموقع الملف، حيث قد يكون هذا الموقع 123، مجرد رقم عشوائي.
لذلك قد يكون لدينا شيء من هذا القبيل x.jpg، والموقع 123.
وماذا يحدث بعد ذلك، عندما تقوم بإفراغ سلة المهملات الخاصة بك؟
أن يذهب بعيدا. ولكن ما لا يذهب بعيدا هو ل0 و 1.
>> ذلك ما، ثم، اتصال لpset 4؟
حسنا، مع pset 4، لمجرد أننا قد تمحى بطريق الخطأ
بطاقة فلاش المدمجة التي كان كل من هذه الصور،
أو فقط لأنه من سوء الحظ أصبح معطوبا،
لا يعني أن ال 0 و1 هي ليست لا تزال هناك.
ربما يتم فقدان عدد قليل منها بسبب فساد شيء
بمعنى أن بعض وأصبح 0 1 و 1 في اصبحت 0 هذا.
يمكن تحدث أمور سيئة بسبب برنامج عربات التي تجرها الدواب أو الأجهزة المعيبة.
ولكن العديد من هذه البتات، وربما حتى 100٪ منهم لا يزال هناك،
انها مجرد أن الكمبيوتر أو الكاميرا لا تعرف من أين بدأت JPEG 1
وحيث JPEG 2 بدأت، ولكن إذا كنت، مبرمج،
أعرف، مع شيء من الدهاء، حيث تلك هي ملفات JPEG أو كيف تبدو،
يمكنك تحليل ل0 و 1 و ليقول: "أوه. JPEG. أوه، JPEG ".
يمكنك كتابة برنامج مع فقط أساسا للأو أثناء حلقة
أن يسترد كل واحد من هذه الملفات.
ذلك الدرس ثم، ومن المقرر أن يبدأ "آمن" محو الملفات
إذا كنت ترغب في تجنب هذا تماما. نعم؟
[سؤال الطالب، غير مفهومة]
هل >> ذاكرة أكثر من فعلت من قبل -
أوه! سؤال جيد. فلماذا، إذن، بعد إفراغ سلة المهملات،
لا جهاز الكمبيوتر الخاص بك أقول لك أن لديك مساحة حرة أكبر مما كنت فعلت من قبل؟
باختصار، لأنه يكذب. أكثر من الناحية الفنية، لديك مساحة أكبر.
لأنه الآن قلته، يمكنك وضع الأشياء الأخرى حيث كان هذا الملف مرة واحدة،
ولكن هذا لا يعني أن تسير بعيدا بت،
وهذا لا يعني يجري تغيير البتات كافة 0، على سبيل المثال، من أجل حمايتك.
على النقيض من ذلك، إذا كنت الملفات "آمن" محو، أو جسديا تدمير الجهاز،
هذا هو حقا السبيل الوحيد، في بعض الأحيان، حول ذلك.
فلماذا لا نترك تلك المذكرة على شبه مخيفة، وسوف نرى لك يوم الاثنين.
CS50.TV