1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [الأسبوع 5] 2 00:00:02,860 --> 00:00:04,860 [ديفيد J. مالان - جامعة هارفارد] 3 00:00:04,860 --> 00:00:07,260 [هذا CS50. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> هذا هو CS50، الأسبوع 5. 5 00:00:09,740 --> 00:00:12,900 اليوم وهذا الأسبوع، ونحن نقدم قليلا من عالم الطب الشرعي 6 00:00:12,900 --> 00:00:14,850 في سياق مشكلة تعيين 4. 7 00:00:14,850 --> 00:00:18,480 سوف يكون اليوم محاضرة مختصرة لأنه لا يوجد حدث خاص هنا بعد ذلك. 8 00:00:18,480 --> 00:00:21,940 ولذا فإننا سوف نلقي نظرة خاطفة وندف كل من الطلاب وأولياء الأمور على حد سواء اليوم 9 00:00:21,940 --> 00:00:24,600 مع بعض من الأشياء التي هي في الأفق. 10 00:00:24,600 --> 00:00:29,050 >> من بينها، وذلك اعتبارا من يوم الاثنين، سيكون لديك المزيد من زملاء الدراسة قليلة. 11 00:00:29,050 --> 00:00:32,980 EDX، هارفارد ومعهد ماساتشوستس للتكنولوجيا المبادرة الجديد على الإنترنت لكورس وير و أكثر من ذلك، 12 00:00:32,980 --> 00:00:36,730 وتطلق في الحرم الجامعي في جامعة هارفارد يوم الاثنين، وهو ما يعني تأتي الاثنين 13 00:00:36,730 --> 00:00:40,930 سيكون لديك، وذلك اعتبارا من آخر إحصاء، 86000 زملاء إضافية 14 00:00:40,930 --> 00:00:43,680 والذين سيتم بعد طول مع المحاضرات وأقسام CS50 15 00:00:43,680 --> 00:00:45,890 وكثروو ومجموعات المشكلة. 16 00:00:45,890 --> 00:00:51,870 وكجزء من هذا، وسوف تصبح أعضاء في الدفعة الأولى من CS50 وCS50x الآن. 17 00:00:51,870 --> 00:00:56,150 وكجزء من هذا الآن، ندرك أن سيكون هناك بعض الإيجابيات أيضا. 18 00:00:56,150 --> 00:01:00,620 للحصول على استعداد لهذا، لعدد هائل من الطلاب، 19 00:01:00,620 --> 00:01:03,820 ويكفي ان نقول أنه على الرغم من أن لدينا 108 TFS والاكاديمية، 20 00:01:03,820 --> 00:01:07,560 انها ليست تماما أفضل نسبة الطالب والمعلم وبمجرد أن تصل إلى 80000 للطلاب. 21 00:01:07,560 --> 00:01:09,830 نحن لن الدرجات مشكلة الكثير من مجموعات يدويا، 22 00:01:09,830 --> 00:01:13,050 وقدم لذلك هذا الاسبوع في مجموعة تكون المشكلة CS50 تحقق، 23 00:01:13,050 --> 00:01:15,410 التي ستكون أداة مساعدة سطر الأوامر داخل الأجهزة 24 00:01:15,410 --> 00:01:17,880 عليك أن تحصل مرة واحدة قمت بتحديث في وقت لاحق هذا الاسبوع. 25 00:01:17,880 --> 00:01:21,030 عليك أن تكون قادرا على تشغيل أمر، check50، على pset الخاصة بك، 26 00:01:21,030 --> 00:01:24,770 وستحصل على ردود الفعل الفورية بشأن ما إذا كان البرنامج الخاص بك هو الصحيح أو غير صحيحة 27 00:01:24,770 --> 00:01:27,980 وفقا لمواصفات التصميم المختلفة التي قدمنا. 28 00:01:27,980 --> 00:01:30,310 المزيد عن هذا في مشكلة مواصفات الموضوعة. 29 00:01:30,310 --> 00:01:34,220 فإن زملاء CS50x تستخدم هذا أيضا. 30 00:01:34,220 --> 00:01:36,170 >> تعيين المشكلة 4 هو كل شيء عن الطب الشرعي، 31 00:01:36,170 --> 00:01:38,630 وكانت مستوحاة من قبل حقا هذا pset بعض الاشياء من واقع الحياة 32 00:01:38,630 --> 00:01:41,210 حيث عندما كنت في كلية الدراسات العليا داخليا لفترة من الوقت 33 00:01:41,210 --> 00:01:45,270 مع مكتب مقاطعة ميدلسكس النائب العام في القيام بأعمال الطب الشرعي 34 00:01:45,270 --> 00:01:47,660 مع محقق الطب الشرعي من الرصاص. 35 00:01:47,660 --> 00:01:50,280 ما يرقى إلى هذا، كما أعتقد أنني ذكرت في الأسابيع القليلة الماضية، 36 00:01:50,280 --> 00:01:52,720 وسوف شرطة ولاية كتلة او غيرها تأتي في، 37 00:01:52,720 --> 00:01:56,150 فإنها تتراجع أشياء مثل محركات الأقراص الصلبة والأقراص المدمجة والأقراص المرنة، وما شابه ذلك، 38 00:01:56,150 --> 00:01:58,770 وكان في ذلك الحين هدف مكتب الطب الشرعي للتأكد من 39 00:01:58,770 --> 00:02:01,470 إذا كان هناك أو لم يكن أدلة من نوع ما. 40 00:02:01,470 --> 00:02:04,730 وكان هذا وحدة التحقيقات الخاصة، لذلك كان جريمة ذوي الياقات البيضاء. 41 00:02:04,730 --> 00:02:10,949 كان الأكثر إثارة للقلق نوع من الجرائم، التي تنطوي على أي شيء نوعا من الوسائط الرقمية. 42 00:02:10,949 --> 00:02:16,450 وتبين أن الكثير من الناس لا أن كتابة رسالة بريد إلكتروني قائلا: "أنا فعلت هذا." 43 00:02:16,450 --> 00:02:20,490 لذلك في كثير من الأحيان، فإن هذه الشرعي لا البحث يحضر جميع تلك الفاكهة من ذلك بكثير، 44 00:02:20,490 --> 00:02:22,820 لكن في بعض الأحيان كان الناس مثل كتابة رسائل البريد الإلكتروني. 45 00:02:22,820 --> 00:02:25,240 حتى في بعض الأحيان، ومكافأة الجهود. 46 00:02:25,240 --> 00:02:31,210 >> ولكن لتؤدي إلى هذه pset الطب الشرعي، سنكون في إدخال pset4 قليلا من الرسومات. 47 00:02:31,210 --> 00:02:35,410 ربما كنت تأخذ هذه الأشياء أمرا مفروغا منه - صور JPEG، صور GIF، وما شابه ذلك - في هذه الأيام. 48 00:02:35,410 --> 00:02:38,320 ولكن إذا كنت تعتقد حقا عن ذلك، صورة، يشبه إلى حد كبير وجه روب، 49 00:02:38,320 --> 00:02:41,270 يمكن غرار كتسلسل من النقاط أو البكسل. 50 00:02:41,270 --> 00:02:43,380 في حالة مواجهة روب، وهناك كل أنواع من الألوان، 51 00:02:43,380 --> 00:02:46,760 وبدأنا في رؤية النقاط الفردية، والمعروف باسم بكسل، 52 00:02:46,760 --> 00:02:48,610 وبمجرد أن بدأت لتكبير. 53 00:02:48,610 --> 00:02:54,660 ولكن إذا كنا تبسيط العالم قليلا وأقول هنا أن هذا هو روب بالأسود والأبيض، 54 00:02:54,660 --> 00:02:57,490 لتمثيل الأبيض والأسود، ويمكننا فقط استخدام ثنائي. 55 00:02:57,490 --> 00:03:01,660 وإذا كنا في طريقنا للاستخدام ثنائي، 1 أو 0، يمكننا التعبير عن هذه الصورة نفسها 56 00:03:01,660 --> 00:03:06,140 من وجه يبتسم مع روب لهذا النمط من البتات. 57 00:03:06,140 --> 00:03:12,100 11000011 يمثل أبيض، أبيض، أسود، أسود، أسود، أسود، أبيض، أبيض. 58 00:03:12,100 --> 00:03:16,150 وحتى انها ليست قفزة هائلة ثم أن نبدأ الحديث عن الصور الملونة، 59 00:03:16,150 --> 00:03:18,600 الأشياء التي كنت انظر في الفيسبوك أو اتخاذ مع كاميرا رقمية. 60 00:03:18,600 --> 00:03:21,410 ولكن بالتأكيد عندما يتعلق الأمر الألوان، تحتاج إلى أكثر بت. 61 00:03:21,410 --> 00:03:25,690 وشائع جدا في العالم من الصور هو استخدام غير 1 بت لون، 62 00:03:25,690 --> 00:03:29,560 لأن ذلك يوحي، ولكن ألوان 24 بت. حيث تحصل في الواقع الملايين من الألوان 63 00:03:29,560 --> 00:03:32,250 وذلك في حالة عندما كنا أسرع في العين على روب، 64 00:03:32,250 --> 00:03:36,370 هو أن أي عدد من الملايين من الاحتمالات الملونة المختلفة. 65 00:03:36,370 --> 00:03:39,040 وهكذا لن نقدم هذه المجموعة في المشكلة 4 وكذلك في معاينة، 66 00:03:39,040 --> 00:03:43,370 والتي ستكون اليوم فى الساعة 3:30 بدلا من 2:30 المعتاد بسبب محاضرة يوم الجمعة هنا. 67 00:03:43,370 --> 00:03:46,620 ولكن سوف يكون الفيديو على الانترنت وغدا المعتادة. 68 00:03:46,620 --> 00:03:48,820 >> سوف نقدم لك أيضا لتنسيق ملف آخر. 69 00:03:48,820 --> 00:03:51,270 وهذا مقصود للبحث تخويف في البداية، 70 00:03:51,270 --> 00:03:55,670 ولكن هذا هو فقط بعض الوثائق عن البنية C. 71 00:03:55,670 --> 00:03:58,940 تبين أن مايكروسوفت ساعدت منذ سنوات تعميم هذا الشكل 72 00:03:58,940 --> 00:04:05,150 دعا تنسيق ملف الصورة النقطية، BMP، وكان هذا عظمى، ملونة بسيطة تنسيق ملف رسومي 73 00:04:05,150 --> 00:04:10,150 وقد استخدم ذلك لبعض الوقت، ومازال بعض الأحيان لخلفيات على سطح المكتب. 74 00:04:10,150 --> 00:04:14,760 إذا كنت تعتقد مرة أخرى إلى ويندوز XP والتلال والسماء الزرقاء، 75 00:04:14,760 --> 00:04:17,170 كان ذلك عادة صورة BMP أو نقطية. 76 00:04:17,170 --> 00:04:19,959 الصور النقطية هي متعة بالنسبة لنا لأن لديهم تعقيد أكثر قليلا. 77 00:04:19,959 --> 00:04:22,610 انها ليست بهذه البساطة هذه الشبكة و 0s 1s. 78 00:04:22,610 --> 00:04:27,510 بدلا من ذلك، لديك أشياء مثل رأس في بداية ملف. 79 00:04:27,510 --> 00:04:31,990 لذلك وبعبارة أخرى، من داخل ملف BMP. هو في مجمله مجموعة من 0S و1S، 80 00:04:31,990 --> 00:04:34,910 ولكن هناك بعض 0S إضافية و1S في هناك. 81 00:04:34,910 --> 00:04:38,220 واتضح أن ما اتخذنا من المسلمات ربما لسنوات - 82 00:04:38,220 --> 00:04:45,170 تنسيقات الملفات مثل. doc أو. XLS أو MP3،. mp4، مهما كانت صيغ الملفات 83 00:04:45,170 --> 00:04:48,480 أن كنت على دراية - ما الذي يعنيه حتى أن يكون تنسيق الملف، 84 00:04:48,480 --> 00:04:52,480 لأنه في نهاية اليوم كل من هذه الملفات التي نستخدمها لديها 0S عادل و1S. 85 00:04:52,480 --> 00:04:56,810 وربما تلك 0S و1S تمثل ABC عن طريق ASCII أو ما شابه ذلك، 86 00:04:56,810 --> 00:04:58,820 ولكن في نهاية اليوم، ما زال 0S عادل و1S. 87 00:04:58,820 --> 00:05:02,100 حتى البشر فقط تقرر أحيانا لابتكار شكل ملف جديد 88 00:05:02,100 --> 00:05:06,420 حيث توحيد أنماط من البتات ما يعني في الواقع. 89 00:05:06,420 --> 00:05:09,220 وهنا في هذه الحالة، والناس الذين تصميم تنسيق ملف الصورة النقطية 90 00:05:09,220 --> 00:05:15,620 وقال أنه في البايت الأول جدا في ملف الصورة النقطية، كما تدل من 0 تعويض هناك، 91 00:05:15,620 --> 00:05:18,940 هناك سيكون بعض متغير اسمه بشكل غامض يسمى bfType، 92 00:05:18,940 --> 00:05:23,080 الذي يقف فقط لنوع ملف الصورة النقطية، ما هو نوع من ملف الصورة النقطية هو هذا. 93 00:05:23,080 --> 00:05:27,700 يمكنك استنتاج ربما من الصف الثاني الذي يقابل 2، عدد البايت 2، 94 00:05:27,700 --> 00:05:33,740 لديه نمط و 0s 1s تمثل ما؟ حجم شيء. 95 00:05:33,740 --> 00:05:35,310 وغني من هناك. 96 00:05:35,310 --> 00:05:37,410 حتى في تعيين مشكلة 4، وسوف يكون مشى لكم من خلال بعض من هذه الأمور. 97 00:05:37,410 --> 00:05:39,520 فإننا لن ينتهي مبالين كل منهم. 98 00:05:39,520 --> 00:05:47,510 ولكن لاحظت أن تبدأ في الحصول على مثيرة للاهتمام حول البايت 54: rgbtBlue، الأخضر والأحمر. 99 00:05:47,510 --> 00:05:52,110 إذا كنت قد سمعت من أي وقت مضى اختصار RGB - الأحمر والأخضر والأزرق - وهذا هو إشارة إلى أن 100 00:05:52,110 --> 00:05:54,610 لأنه تبين يمكنك طلاء جميع ألوان قوس قزح 101 00:05:54,610 --> 00:05:58,180 مع مزيج من الأحمر والأزرق والأخضر. 102 00:05:58,180 --> 00:06:03,320 في واقع الأمر، قد الآباء في غرفة نذكر بعض من أقرب العرض. 103 00:06:03,320 --> 00:06:05,890 في هذه الأيام، ترى واحد فقط الضوء الساطع القادم من عدسة، 104 00:06:05,890 --> 00:06:09,800 ولكن مرة أخرى في يوم كان لديك عدسة الأحمر، والأزرق عدسة، والعدسة الخضراء، 105 00:06:09,800 --> 00:06:13,380 وتهدف معا في شاشة وشكلت صورة ملونة. 106 00:06:13,380 --> 00:06:16,270 وكثير من الأحيان، والمدارس المتوسطة والمدارس الثانوية لديهم تلك العدسات 107 00:06:16,270 --> 00:06:19,720 من أي وقت مضى حتى قليلا منحرف، لذلك كنت نوع من رؤية الصور ضعفين أو ثلاثة أضعاف. 108 00:06:19,720 --> 00:06:24,100 لكن ذلك كان على هذه الفكرة. هل كان لديك الضوء الأحمر والأخضر والأزرق رسم صورة. 109 00:06:24,100 --> 00:06:26,590 ويستخدم هذا المبدأ نفسه في أجهزة الكمبيوتر. 110 00:06:26,590 --> 00:06:30,230 >> لذلك من بين التحديات ثم لك في مشكلة حددت 4 ستكون بعض الأشياء. 111 00:06:30,230 --> 00:06:34,800 واحد هو في الواقع لتغيير حجم صورة، لتأخذ في وجود نمط من 0S و1S، 112 00:06:34,800 --> 00:06:40,200 معرفة أي أجزاء من 0S و1S تمثل ما في بنية مثل هذا، 113 00:06:40,200 --> 00:06:43,630 وثم معرفة كيفية تكرار بكسل - ليفربول، والبلوز، والخضر - 114 00:06:43,630 --> 00:06:46,660 داخل بحيث عندما صورة يبدو مثل هذا في البداية، 115 00:06:46,660 --> 00:06:49,210 قد تبدو هذه بدلا بعد ذلك. 116 00:06:49,210 --> 00:06:53,640 ومن بين التحديات الأخرى أيضا سيكون التي سوف يتم تسليم لك صورة الطب الشرعي 117 00:06:53,640 --> 00:06:56,030 من ملف الفعلي من كاميرا رقمية. 118 00:06:56,030 --> 00:06:58,960 وعلى هذا الكاميرا، ذات مرة، كان في مجمله مجموعة من الصور. 119 00:06:58,960 --> 00:07:03,760 ونحن المشكلة تمحى بطريق الخطأ أو كان صورة تلف بطريقة ما. 120 00:07:03,760 --> 00:07:05,750 تحدث أمور سيئة مع الكاميرات الرقمية. 121 00:07:05,750 --> 00:07:09,150 ولذا فإننا نسخ بسرعة كل من 0S و1S من أن بطاقة لك، 122 00:07:09,150 --> 00:07:13,610 حفظ كل منهم في ملف واحد كبير، ومن ثم سنقوم تسليمها لك في مشكلة مجموعة 4 123 00:07:13,610 --> 00:07:19,320 بحيث يمكنك كتابة برنامج C التي في لاسترداد كل هذه ملفات JPEG، من الناحية المثالية. 124 00:07:19,320 --> 00:07:23,330 واتضح أن ملفات JPEG، على الرغم من انهم نوعا من تنسيق الملف معقدة - 125 00:07:23,330 --> 00:07:26,360 انهم أكثر تعقيدا من هذا الوجه المبتسم هنا - 126 00:07:26,360 --> 00:07:31,160 اتضح أن كل JPEG يبدأ من نفس الأنماط و 0s 1s. 127 00:07:31,160 --> 00:07:35,630 وذلك باستخدام، في نهاية المطاف، في حين حلقة أو حلقة أو ما شابه ذلك ل، 128 00:07:35,630 --> 00:07:38,880 يمكنك تكرار عبر 0S جميع و1S في هذه الصورة الطب الشرعي، 129 00:07:38,880 --> 00:07:43,150 وفي كل مرة تشاهد نمط خاص هذا ما يعرف في مشكلة مواصفات مجموعة، 130 00:07:43,150 --> 00:07:47,880 يمكنك أن تفترض هنا هو، مع احتمال كبير جدا، بداية JPEG. 131 00:07:47,880 --> 00:07:51,230 وبمجرد العثور على النمط نفسه بعض عدد وحدات البايت 132 00:07:51,230 --> 00:07:55,430 أو كيلو بايت أو ميغابايت في وقت لاحق، يمكنك تحمل هنا هو JPEG الثاني، 133 00:07:55,430 --> 00:07:57,380 الصورة أخذت بعد أول واحد. 134 00:07:57,380 --> 00:08:01,370 اسمحوا لي أن تتوقف عن قراءة هذا الملف أولا، البدء في كتابة هذا واحد جديد، 135 00:08:01,370 --> 00:08:06,310 وخرج من البرنامج لpset4 ستكون ما يصل الى 50 ملفات JPEG. 136 00:08:06,310 --> 00:08:09,270 واذا كان ليس 50 صور JPEG، لديك قليلا من حلقة. 137 00:08:09,270 --> 00:08:12,490 إذا كان لديك عدد لا حصر له من صور JPEG، لديك حلقة لا نهائية. 138 00:08:12,490 --> 00:08:14,910 بحيث سيكون جدا جدا قضية مشتركة. 139 00:08:14,910 --> 00:08:16,600 بحيث ما يدور في الأفق. 140 00:08:16,600 --> 00:08:21,310 >> 0 مسابقة وراء ظهورنا، وتحقيق في البريد الإلكتروني الخاص بي أن هناك دائما من الناس الذين هم على حد سواء سعيدة، 141 00:08:21,310 --> 00:08:23,640 نوع من مرة 0 متعادلة، وحزين حول المسابقة. 142 00:08:23,640 --> 00:08:26,800 ونرجو التواصل مع لي، رئيس TF Zamyla، TF الخاصة بك، 143 00:08:26,800 --> 00:08:31,180 أو واحد من استراتيجية المساعدة القطرية أن تعرف إذا كنت ترغب في مناقشة كيف سارت الأمور. 144 00:08:31,180 --> 00:08:35,539 >> ذلك لإقناع والدي هنا في الغرفة، ما هي مكتبة CS50؟ 145 00:08:36,429 --> 00:08:40,390 [ضحك] بعمل جيد. 146 00:08:40,390 --> 00:08:48,340 ما هي مكتبة CS50؟ نعم. >> [طالب] انها مجموعة خطية مسبقة من التعليمات البرمجية (غير مسموع) 147 00:08:48,340 --> 00:08:49,750 حسنا، جيد. 148 00:08:49,750 --> 00:08:53,240 انها مجموعة خطية مسبقة من التعليمات البرمجية التي نحن الموظفين كتب، ونحن نقدم لك، 149 00:08:53,240 --> 00:08:55,030 توفر بعض الوظائف المشتركة، 150 00:08:55,030 --> 00:08:59,020 أشياء مثل الحصول على البيانات سلسلة، والحصول على كثافة العمليات لي - كل وظائف المسرودة هنا. 151 00:08:59,020 --> 00:09:02,260 >> بدءا من الآن، ونحن نبدأ في اتخاذ هذه حقا قبالة عجلات التدريب. 152 00:09:02,260 --> 00:09:05,050 ونحن في طريقنا للبدء في اتخاذ سلسلة بعيدا منك، 153 00:09:05,050 --> 00:09:08,870 الذي كان استدعاء فقط مرادفا للنوع البيانات الفعلية؟ >> [طلاب متعددة] * شار. 154 00:09:08,870 --> 00:09:12,730 تشار *. للآباء، على الأرجح هو أن [صوت الرنين يجعل]. هذا امر جيد. 155 00:09:12,730 --> 00:09:17,550 * شار سوف نبدأ في رؤية على الشاشة مما يزيد من إزالة السلسلة ونحن من قاموسنا، 156 00:09:17,550 --> 00:09:19,730 على الأقل عندما يتعلق الأمر في الواقع كتابة التعليمات البرمجية. 157 00:09:19,730 --> 00:09:22,840 وبالمثل، فإننا سوف تتوقف عن استخدام بعض هذه الوظائف بقدر 158 00:09:22,840 --> 00:09:25,280 لأن برامجنا بصدد الحصول على أكثر تعقيدا. 159 00:09:25,280 --> 00:09:28,480 بدلا من مجرد كتابة البرامج التي تجلس هناك مع وامض الأوامر، 160 00:09:28,480 --> 00:09:31,870 انتظار المستخدم لكتابة شيء في، وستحصل على المدخلات الخاصة بك من أي مكان آخر. 161 00:09:31,870 --> 00:09:35,490 على سبيل المثال، سوف تحصل عليها من سلسلة من البتات على القرص الثابت المحلي. 162 00:09:35,490 --> 00:09:38,580 ستحصل بدلا من ذلك في المستقبل من اتصال الشبكة، 163 00:09:38,580 --> 00:09:40,230 بعض المواقع في مكان ما. 164 00:09:40,230 --> 00:09:44,110 >> لذلك دعونا قشر طبقة هذا مرة أخرى لأول مرة وسحب ما يصل الجهاز CS50 165 00:09:44,110 --> 00:09:49,010 وهذا ملف يسمى cs50.h، والتي كنت قد تم بما في ذلك # لأسابيع، 166 00:09:49,010 --> 00:09:51,140 ولكن دعونا نرى ما هو في الواقع داخل هذا. 167 00:09:51,140 --> 00:09:54,430 الجزء العلوي من الملف في الزرقاء هو مجرد مجمله مجموعة من التعليقات: 168 00:09:54,430 --> 00:09:57,050 معلومات الضمان والترخيص. 169 00:09:57,050 --> 00:09:59,050 هذا هو نوع من نموذج المشتركة في مجال البرمجيات 170 00:09:59,050 --> 00:10:01,580 لأن الكثير من البرامج في هذه الأيام هو ما يسمى مفتوح المصدر، 171 00:10:01,580 --> 00:10:05,220 وهو ما يعني أن شخصا ما قد كتابة التعليمات البرمجية وإتاحتها بحرية 172 00:10:05,220 --> 00:10:10,470 ليس فقط لتشغيل واستخدام ولكن لقراءة الواقع وتغيير والاندماج في عملك الخاص. 173 00:10:10,470 --> 00:10:14,660 وهذا ما كنت قد تم استخدام، البرمجيات مفتوحة المصدر، وإن كان ذلك في شكل صغير جدا. 174 00:10:14,660 --> 00:10:18,560 إذا كنت انتقل لأسفل الماضية التعليقات، رغم ذلك، سوف نبدأ في رؤية بعض الأشياء أكثر ألفة. 175 00:10:18,560 --> 00:10:25,010 إشعار في أعلى هنا أن الملف يتضمن cs50.h في مجمله مجموعة من الملفات رأس. 176 00:10:25,010 --> 00:10:28,560 معظم هؤلاء، لم نر من قبل، ولكن واحدة هو مألوف. 177 00:10:28,560 --> 00:10:32,270 أي من هذه شهدنا، ولو لفترة وجيزة، حتى الآن؟ >> [طالب] مكتبة قياسي. 178 00:10:32,270 --> 00:10:35,810 نعم، مكتبة القياسية. stdlib.h ديه malloc. 179 00:10:35,810 --> 00:10:38,320 بدأت مرة واحدة ونحن نتحدث عن تخصيص ذاكرة ديناميكية، 180 00:10:38,320 --> 00:10:41,650 بدأنا ونحن سوف نعود إلى الأسبوع المقبل أيضا، بما في ذلك الملف. 181 00:10:41,650 --> 00:10:46,640 تبين أن BOOL والصواب والخطأ لا وجود لها في الواقع في C في حد ذاته 182 00:10:46,640 --> 00:10:49,440 إلا إذا كنت تضمين هذا الملف هنا. 183 00:10:49,440 --> 00:10:52,710 لقد تم منذ اسابيع بما في ذلك stdbool.h 184 00:10:52,710 --> 00:10:55,620 بحيث يمكنك استخدام فكرة. BOOL، صحيحة أو خاطئة 185 00:10:55,620 --> 00:10:58,620 من دون ذلك، سيكون لديك لفرز من أنها وهمية واستخدام الباحث 186 00:10:58,620 --> 00:11:02,610 وتفترض فقط تعسفا أن 0 و 1 هو زائف هو الصحيح. 187 00:11:02,610 --> 00:11:07,150 إذا كان لنا أن انتقل لأسفل أخرى، هي هنا تعريفنا للسلسلة. 188 00:11:07,150 --> 00:11:11,390 كما تبين، كما قلنا من قبل، أن هذا النجم هو حيث لا يهم حقا. 189 00:11:11,390 --> 00:11:13,720 هل يمكن أن يكون حتى الفضاء في كل مكان. 190 00:11:13,720 --> 00:11:16,740 لقد تم في هذا الفصل الدراسي الترويج لها وهذا لتوضيح 191 00:11:16,740 --> 00:11:18,620 أن النجم له علاقة مع نوع، 192 00:11:18,620 --> 00:11:21,700 ولكن ندرك مجرد شائعة، إن لم يكن أكثر من ذلك بقليل المشتركة، 193 00:11:21,700 --> 00:11:24,430 هو وضعها هناك، ولكن وظيفيا انها نفس الشيء. 194 00:11:24,430 --> 00:11:27,720 ولكن الآن إذا قرأنا إلى مزيد من الانخفاض، دعونا نلقي نظرة على GetInt 195 00:11:27,720 --> 00:11:32,190 لاننا كنا نستخدم ربما أن أول قبل أي شيء آخر في هذا الفصل الدراسي. 196 00:11:32,190 --> 00:11:37,440 هنا GetInt. هذا ما هو؟ >> [طالب] نموذج أولي. >> هذا مجرد نموذج أولي. 197 00:11:37,440 --> 00:11:41,410 في كثير من الأحيان، وقد وضعنا نماذج على قمم لدينا. ج الملفات، 198 00:11:41,410 --> 00:11:46,690 ولكن يمكنك أيضا وضع نماذج في ملفات الرأس، ملفات ساعة، وهذا مثل واحد هنا 199 00:11:46,690 --> 00:11:50,840 بحيث عند كتابة بعض الوظائف التي تريد الآخرين لتكون قادرة على استخدامها، 200 00:11:50,840 --> 00:11:53,550 وهذا بالضبط هو الحال مع مكتبة CS50، 201 00:11:53,550 --> 00:11:57,040 لكم ليس فقط تنفيذ المهام الخاصة بك في شيء من هذا القبيل cs50.c، 202 00:11:57,040 --> 00:12:02,790 كنت وضعت أيضا نماذج لا في الجزء العلوي من هذا الملف ولكن في الجزء العلوي من ملف الرأس. 203 00:12:02,790 --> 00:12:07,170 ثم أن ملف الرأس هو ما تشمل الأصدقاء والزملاء 204 00:12:07,170 --> 00:12:09,760 مع تضمين # في التعليمات البرمجية الخاصة بهم. 205 00:12:09,760 --> 00:12:12,210 لذلك كل هذا الوقت، كنت قد تم بما في ذلك كل هذه النماذج، 206 00:12:12,210 --> 00:12:16,580 فعال في الجزء العلوي من الملف الخاص بك ولكن عن طريق هذه الآلية تشمل #، 207 00:12:16,580 --> 00:12:20,070 أساسا، والتي نسخ هذا الملف إلى المعاجين الخاصة بك. 208 00:12:20,070 --> 00:12:23,070 وهنا بعض وثائق مفصلة إلى حد ما. 209 00:12:23,070 --> 00:12:25,640 لدينا الى حد كبير أمرا مفروغا منه أن يحصل على GetInt الباحث، 210 00:12:25,640 --> 00:12:27,640 ولكن تبين أن هناك بعض الحالات الزاوية. 211 00:12:27,640 --> 00:12:31,810 ما إذا كان المستخدم أنواع في عدد هذا الطريق كبيرة جدا، وكوينتيليون، 212 00:12:31,810 --> 00:12:35,490 أن فقط لا يمكن احتواؤه من كثافة العمليات؟ ما هو السلوك المتوقع؟ 213 00:12:35,490 --> 00:12:38,020 من الناحية المثالية، انها يمكن التنبؤ بها. 214 00:12:38,020 --> 00:12:40,280 حتى في هذه الحالة، إذا كنت تقرأ الواقع غرامة المطبوعة، 215 00:12:40,280 --> 00:12:44,500 سوف نرى في الواقع أن إذا لا يمكن قراءة الخط، وهذا INT_MAX العودة. 216 00:12:44,500 --> 00:12:48,320 لقد تحدثت عن هذا أبدا، ولكن على أساس قيمتها السوقية، ما هو الأرجح؟ 217 00:12:48,320 --> 00:12:50,640 [طالب] ثابت. انها >> ثابت. 218 00:12:50,640 --> 00:12:54,770 انها بعض مستمر خاصة أن أعلن ربما في واحدة من تلك الملفات رأس 219 00:12:54,770 --> 00:13:00,090 وهذا ما يصل أعلى في الملف، وربما INT_MAX شيء من هذا القبيل تقريبا 2 مليار دولار، 220 00:13:00,090 --> 00:13:04,990 ذهب الفكرة هي أن لأننا في حاجة للدلالة على نحو ما أن شيئا ما خطأ، 221 00:13:04,990 --> 00:13:10,700 ونحن، نعم، لقد 4000000000 أرقام المتوفرة لدينا: على ما يصل إلى 2 مليار -2000000000، يعطي أو يأخذ. 222 00:13:10,700 --> 00:13:14,710 حسنا، ما هو مشترك في مجال البرمجة هو أنت فقط سرقة واحدة من تلك الأرقام، 223 00:13:14,710 --> 00:13:18,920 ربما 0، 2 مليار ربما، وربما -2000000000، 224 00:13:18,920 --> 00:13:23,280 لذلك أنت تنفق واحدة من القيم الخاصة بك ممكن حتى تتمكن من الالتزام العالم 225 00:13:23,280 --> 00:13:26,820 أنه إذا ما سارت الأمور بشكل خاطئ، وسأعود هذه القيمة الكبيرة فائقة. 226 00:13:26,820 --> 00:13:31,030 ولكنك لا تريد أن يقوم المستخدم بكتابة شيء خفي مثل 234 ...، عدد كبير حقا. 227 00:13:31,030 --> 00:13:34,060 كنت التعميم بدلا من ذلك وثابت. 228 00:13:34,060 --> 00:13:38,060 ذلك حقا، إذا كنت يجري الشرج الأسابيع القليلة الماضية، في أي وقت دعاكم GetInt، 229 00:13:38,060 --> 00:13:42,900 يجب أن تم التحقق مع حالة إذا فعلت نوع المستخدم في INT_MAX، 230 00:13:42,900 --> 00:13:46,590 أو، على نحو أكثر تحديدا، لم GetInt INT_MAX العودة، لأنه إذا كان الأمر كذلك، 231 00:13:46,590 --> 00:13:51,830 وهذا يعني في الواقع أنهم لم اكتبه. لقد حصل خطأ في هذه الحالة. 232 00:13:51,830 --> 00:13:56,080 لذلك هذا هو ما يعرف عموما كقيمة الحارس، وهو ما يعني فقط خاصة. 233 00:13:56,080 --> 00:13:58,120 >> دعونا الآن تتحول إلى الملف C. 234 00:13:58,120 --> 00:14:01,340 وقد وجدت الملف C في الجهاز لبعض الوقت. 235 00:14:01,340 --> 00:14:06,840 في واقع الأمر، والأجهزة فقد جمعت قبل لك في هذا الشيء كنا نسميها رمز الكائن، 236 00:14:06,840 --> 00:14:09,540 ولكن فقط لا يهم أين لك فذلك لأن النظام يعلم 237 00:14:09,540 --> 00:14:11,730 في هذه الحالة حيث هو: الجهاز. 238 00:14:11,730 --> 00:14:17,400 دعونا الآن انتقل لأسفل إلى GetInt ونرى كيف GetInt تعمل كل هذا الوقت. 239 00:14:17,400 --> 00:14:19,460 هنا لدينا بتصريحات مماثلة من قبل. 240 00:14:19,460 --> 00:14:21,660 اسمحوا لي أن التكبير في جزء فقط قانون. 241 00:14:21,660 --> 00:14:23,900 وما لدينا لGetInt هو ما يلي. 242 00:14:23,900 --> 00:14:25,700 وهو لا يأخذ المدخلات. 243 00:14:25,700 --> 00:14:29,510 تقوم بإرجاع عدد صحيح، في حين أن (صحيح)، لذلك لدينا حلقة المتعمد لانهائي، 244 00:14:29,510 --> 00:14:33,180 لكن من المفترض سنقوم الخروج من هذا بطريقة ما أو العودة من داخل هذا. 245 00:14:33,180 --> 00:14:34,870 >> دعونا نرى كيف يعمل هذا. 246 00:14:34,870 --> 00:14:39,240 يبدو أننا في هذا GetString باستخدام السطر الأول داخل الحلقة، 166. 247 00:14:39,240 --> 00:14:43,780 هذا هو الآن بسبب الممارسات الجيدة تحت أي ظروف يمكن العودة GetString 248 00:14:43,780 --> 00:14:47,660 وNULL الكلمة خاصة؟ >> [طالب] إذا سارت الامور بشكل خاطئ. 249 00:14:47,660 --> 00:14:51,630 إذا حدث خطأ ما. وما يمكن ان تذهب الخطأ عند استدعاء شيء من هذا القبيل GetString؟ 250 00:14:54,960 --> 00:14:57,640 نعم. >> [طالب] Malloc فشل لإعطائه رجات. 251 00:14:57,640 --> 00:14:59,150 نعم. ربما malloc فشل. 252 00:14:59,150 --> 00:15:03,190 في مكان ما تحت غطاء محرك السيارة، وتدعو GetString malloc، الذي يخصص الذاكرة، 253 00:15:03,190 --> 00:15:06,020 الذي يتيح مخزن الكمبيوتر جميع الشخصيات 254 00:15:06,020 --> 00:15:07,750 أن المستخدم في أنواع لوحة المفاتيح. 255 00:15:07,750 --> 00:15:11,590 وافترض أن المستخدم لديه الكثير من وقت الفراغ وكتابة أكثر من ذلك، على سبيل المثال، 256 00:15:11,590 --> 00:15:16,160 من 2 بليون حرف في أكثر من الأحرف حتى لدى الكمبيوتر ذاكرة الوصول العشوائي. 257 00:15:16,160 --> 00:15:19,250 GetString يجب أن يكون قادرا على أن دلالة لك. 258 00:15:19,250 --> 00:15:22,560 حتى لو كان هذا هو سوبر سوبر حالة الزاوية المألوف، 259 00:15:22,560 --> 00:15:24,340 يجب أن يكون بطريقة أو بأخرى قادرة على التعامل مع هذا، 260 00:15:24,340 --> 00:15:28,750 وGetString لذا، إذا عدنا وقراءة الوثائق الخاصة به، هل في الحقيقة عودة NULL. 261 00:15:28,750 --> 00:15:34,460 حتى إذا فشل GetString الآن من خلال العودة NULL، GetInt سوف تفشل من خلال العودة INT_MAX 262 00:15:34,460 --> 00:15:37,690 كما الحارس. هذه هي الاتفاقيات فقط الإنسان. 263 00:15:37,690 --> 00:15:41,450 الطريق الوحيد الذي يمكن ان نعرف هذه هي الحالة هو من خلال قراءة الوثائق. 264 00:15:41,450 --> 00:15:45,040 >> دعونا انتقل لأسفل إلى حيث حصلت فعلا الباحث. 265 00:15:45,040 --> 00:15:51,160 إذا كنت انتقل لأسفل قليلا كذلك، في خط 170، لدينا تعليق فوق هذه الخطوط. 266 00:15:51,160 --> 00:15:55,100 نعلن في 172 وكثافة العمليات، ن، وشار A، C، ومن ثم هذه الوظيفة الجديدة، 267 00:15:55,100 --> 00:15:58,930 التي قد تعثرت عبر بعض منكم من قبل، sscanf. 268 00:15:58,930 --> 00:16:00,870 هذه لتقف على scanf السلسلة. 269 00:16:00,870 --> 00:16:05,700 وبعبارة أخرى، أعطني سلسلة وسوف مسحها ضوئيا عن قطعة من المعلومات التي تهم. 270 00:16:05,700 --> 00:16:07,360 ماذا يعني ذلك؟ 271 00:16:07,360 --> 00:16:11,800 لنفترض أنني اكتب في، حرفيا، 123 في لوحة المفاتيح ثم اضغط Enter. 272 00:16:11,800 --> 00:16:16,470 ما هو نوع البيانات من 123 عندما عاد من GetString؟ >> [طالب] سلسلة. 273 00:16:16,470 --> 00:16:18,380 من الواضح أن سلسلة، أليس كذلك؟ حصلت على السلسلة. 274 00:16:18,380 --> 00:16:23,220 123 غير ذلك حقا، واقتبس، نهاية الاقتباس، 123 مع 0 \ في نهاية ذلك. 275 00:16:23,220 --> 00:16:27,110 هذا ليس صحيح. هذا ليس عددا. يبدو عددا ولكنها ليست في الواقع. 276 00:16:27,110 --> 00:16:29,080 فماذا يجب أن نفعل GetInt؟ 277 00:16:29,080 --> 00:16:35,750 عليها أن تفحص هذه السلسلة من اليسار إلى اليمين - 123 \ 0 - بطريقة أو بأخرى وتحويل إلى عدد صحيح الفعلية. 278 00:16:35,750 --> 00:16:37,850 هل يمكن معرفة كيفية القيام بذلك. 279 00:16:37,850 --> 00:16:41,450 إذا كنت تعتقد مرة أخرى إلى pset2، حصلت يفترض مريح قليلا مع قيصر 280 00:16:41,450 --> 00:16:44,820 أو Vigenere، حتى تتمكن من تكرار عبر سلسلة، يمكنك تحويل حرف إلى رجات. 281 00:16:44,820 --> 00:16:46,710 لكن هيك، انها مجموعة كبيرة من العمل. 282 00:16:46,710 --> 00:16:49,860 لماذا لا استدعاء دالة مثل sscanf أن يفعل ذلك بالنسبة لك؟ 283 00:16:49,860 --> 00:16:54,230 لذلك تتوقع sscanf حجة - في هذه الحالة يسمى الخط، الذي هو سلسلة. 284 00:16:54,230 --> 00:17:01,840 ثم قمت بتحديد تهمك، مشابهة جدا إلى printf، ما كنت تتوقع أن نرى في هذه السلسلة. 285 00:17:01,840 --> 00:17:09,000 وما أقوله هنا هو أتوقع أن نرى رقم عشري وربما حرف. 286 00:17:09,000 --> 00:17:12,000 وسنرى لماذا هذا هو الحال في لحظة واحدة. 287 00:17:12,000 --> 00:17:15,869 واتضح أن هذا التدوين الآن تذكر الاشياء التي نتحدث عنها 288 00:17:15,869 --> 00:17:17,619 ما يزيد قليلا على اسبوع. 289 00:17:17,619 --> 00:17:21,740 ما هو & N & C والقيام بالنسبة لنا هنا؟ >> [طالب] عنوان وعنوان ن ج. 290 00:17:21,740 --> 00:17:25,400 نعم. انها إعطائي عنوان وعنوان ن ج. لماذا هو مهم؟ 291 00:17:25,400 --> 00:17:30,220 هل تعلم أن وظائف في C، يمكنك دائما العودة قيمة أو قيمة على الإطلاق. 292 00:17:30,220 --> 00:17:34,530 يمكنك العودة إلى الباحث، وسلسلة، طوف، وشار، أيا كان، أو يمكنك العودة باطلة، 293 00:17:34,530 --> 00:17:38,030 ولكن يمكنك العودة شيء واحد فقط الحد الأقصى. 294 00:17:38,030 --> 00:17:42,760 ولكن هنا نريد sscanf للعودة إلى الباحث لي ربما، رقم عشري، 295 00:17:42,760 --> 00:17:46,220 وأيضا. شار، وساوضح لماذا في لحظة شار 296 00:17:46,220 --> 00:17:51,460 تريد العودة بفعالية sscanf شيئين، ولكن هذا غير ممكن تماما في C. 297 00:17:51,460 --> 00:17:55,200 يمكنك العمل حول ذلك بواسطة التمرير في عنوانين 298 00:17:55,200 --> 00:17:57,370 لأن بمجرد تسليم وظيفة عنواني، 299 00:17:57,370 --> 00:18:00,470 ماذا يمكن أن تفعل هذه المهمة معهم؟ >> [طالب] الكتابة إلى تلك العناوين. 300 00:18:00,470 --> 00:18:02,010 يمكن أن تكتب إلى تلك العناوين. 301 00:18:02,010 --> 00:18:05,770 يمكنك استخدام عملية نجوم والذهاب إلى هناك، إلى كل من هذه العناوين. 302 00:18:05,770 --> 00:18:11,260 انها نوع من هذه الآلية من باب خلفي لكنها شائعة جدا لتغيير قيم المتغيرات 303 00:18:11,260 --> 00:18:14,870 أكثر من مجرد مكان واحد - في هذه الحالة، وهما. 304 00:18:14,870 --> 00:18:21,340 تلاحظ الآن أنا التحقق من وجود == 1 ثم العودة ن إذا كان ذلك لا، في الواقع، تقييم إلى true. 305 00:18:21,340 --> 00:18:26,170 فما الذي يحدث؟ من الناحية الفنية، كل ما نريده حقا أن يحدث في GetInt هو هذا. 306 00:18:26,170 --> 00:18:30,740 نريد تحليل، إذا جاز التعبير، ونحن نريد لقراءة سلسلة - نهاية الاقتباس اقتباس-123 - 307 00:18:30,740 --> 00:18:34,560 وإذا كان يبدو أن هناك عددا هناك، ما كنا نقول للقيام sscanf 308 00:18:34,560 --> 00:18:38,190 يتم وضع هذا العدد - 123 - في هذا المتغير ن بالنسبة لي. 309 00:18:38,190 --> 00:18:42,090 لذلك فلماذا أنا فعلا هذا أيضا؟ 310 00:18:42,090 --> 00:18:48,220 ما هو دور sscanf قائلا قد تحصل أيضا على حرف هنا؟ 311 00:18:48,220 --> 00:18:53,470 [رد الطالب غير مسموع] >> A الفاصلة العشرية يمكن أن تعمل فعلا. 312 00:18:53,470 --> 00:18:56,330 دعونا نرى أن يعتقد للحظة واحدة. وماذا ايضا؟ 313 00:18:56,330 --> 00:18:59,270 [طالب] ويمكن أن يكون NULL. الفكر >> جيد. يمكن أن يكون الحرف فارغة. 314 00:18:59,270 --> 00:19:01,660 انها في الواقع لا في هذه الحالة. نعم. >> [طالب] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. اسمحوا لي أن التعميم أو أبعد من ذلك. 316 00:19:04,340 --> 00:19:06,640 ج هناك فقط٪ لتدقيق الأخطاء. 317 00:19:06,640 --> 00:19:09,300 نحن لا نريد أن يكون هناك حرف بعد الرقم، 318 00:19:09,300 --> 00:19:11,870 ولكن ما هذا يتيح لي القيام به هو ما يلي. 319 00:19:11,870 --> 00:19:18,210 تبين أن sscanf، إلى جانب تخزين القيم في ن ج وهنا في هذا المثال، 320 00:19:18,210 --> 00:19:24,890 ما هو أيضا لا تقوم بإرجاع عدد من المتغيرات وضعه القيم فيها. 321 00:19:24,890 --> 00:19:30,260 حتى إذا كنت اكتب فقط في 123، وعندئذ فقط سوف د٪ لمطابقة، 322 00:19:30,260 --> 00:19:33,880 وفقط يحصل على تخزين ن مع قيمة مثل 123، 323 00:19:33,880 --> 00:19:35,640 ويحصل على وضع شيء في ج. 324 00:19:35,640 --> 00:19:37,620 C لا يزال يمثل قيمة القمامة، إذا جاز التعبير - 325 00:19:37,620 --> 00:19:40,730 القمامة لأنه لم يكن يوما تهيئة إلى بعض القيمة. 326 00:19:40,730 --> 00:19:45,520 حتى في هذه الحالة، sscanf بإرجاع 1 لأنني ملؤها 1 من هذه المؤشرات، 327 00:19:45,520 --> 00:19:50,190 في هذه الحالة كبيرة، لدي الباحث لذلك أنا سراح خط لتحرير الذاكرة 328 00:19:50,190 --> 00:19:54,000 أن GetString المخصصة في الواقع، ومن ثم أعود ن، 329 00:19:54,000 --> 00:19:58,500 والا اذا كنت تساءلت يوما حيث أن إعادة المحاولة بيان مصدره، أنها تأتي من هنا. 330 00:19:58,500 --> 00:20:04,390 إذا كان الأمر كذلك، على النقيض من ذلك، اكتب في 123foo I - سوى بعض تسلسل عشوائي من النص - 331 00:20:04,390 --> 00:20:08,490 sscanf يجري لمعرفة عدد، عدد، عدد، و، 332 00:20:08,490 --> 00:20:16,410 وانه سيكون لوضع 123 في ن؛ انه سيكون لوضع و ج في وثم العودة 2. 333 00:20:16,410 --> 00:20:20,640 لذلك لدينا، فقط باستخدام التعريف الأساسي للسلوك sscanf، وهي طريقة بسيطة جدا - 334 00:20:20,640 --> 00:20:23,900 حسنا، معقدة للوهلة الأولى ولكن في نهاية اليوم آلية بسيطة إلى حد ما - 335 00:20:23,900 --> 00:20:28,320 للقول هل هناك كثافة وإذا كان الأمر كذلك هو أن الشيء الوحيد الذي وجدت؟ 336 00:20:28,320 --> 00:20:29,860 وبيضاء هنا هو متعمد. 337 00:20:29,860 --> 00:20:34,000 إذا كنت تقرأ وثائق sscanf، فإنه يخبرك أنه إذا قمت بتضمين قطعة من بيضاء 338 00:20:34,000 --> 00:20:38,810 في بداية أو نهاية، sscanf سيسمح أيضا للمستخدم، لأي سبب كان، 339 00:20:38,810 --> 00:20:41,860 لتصل إلى 123 بار الفضاء والتي من شأنها أن تكون مشروعة. 340 00:20:41,860 --> 00:20:44,150 فلن يصيح في المستخدم فقط لأنهم ضرب شريط الفضاء 341 00:20:44,150 --> 00:20:48,640 في بداية أو نهاية، وهو أكثر قليلا سهل الاستعمال. 342 00:20:48,640 --> 00:20:52,300 >> ثم أي أسئلة على GetInt؟ نعم. >> [طالب] ماذا لو كنت وضعت للتو في شار؟ 343 00:20:52,300 --> 00:20:54,030 سؤال جيد. 344 00:20:54,030 --> 00:20:59,890 ماذا لو قمت بكتابته في مثل شار و وضرب أدخل دون كتابة أي وقت مضى 123؟ 345 00:20:59,890 --> 00:21:02,420 ما رأيك في سلوك هذا الخط من التعليمات البرمجية سيكون بعد ذلك؟ 346 00:21:02,420 --> 00:21:04,730 [رد الطالب غير مسموع] 347 00:21:04,730 --> 00:21:08,790 نعم، لذلك يمكن تغطية sscanf ذلك أيضا لأنه في هذه الحالة، فإنه لن يملأ ن ج أو. 348 00:21:08,790 --> 00:21:15,310 انه سيكون العودة بدلا من ذلك 0، في هذه الحالة أنا أيضا اصطياد هذا السيناريو 349 00:21:15,310 --> 00:21:18,750 لأن القيمة المتوقعة ما أريده هو 1. 350 00:21:18,750 --> 00:21:22,000 أريد واحدة فقط والمطلوب شغلها شيء واحد فقط. سؤال جيد. 351 00:21:22,000 --> 00:21:24,290 >> الآخرين؟ حسنا. 352 00:21:24,290 --> 00:21:26,250 >> دعونا لا تذهب من خلال جميع وظائف هنا، 353 00:21:26,250 --> 00:21:29,500 لكن الذي يبدو أن الاهتمام ربما المتبقي هو GetString 354 00:21:29,500 --> 00:21:32,790 لأنه تبين أن GetFloat، GetInt، GetDouble، GetLongLong 355 00:21:32,790 --> 00:21:36,260 جميع بونت الكثير من وظائفها لGetString. 356 00:21:36,260 --> 00:21:39,750 لذلك دعونا نلقي نظرة على كيفية تنفيذ انه هنا. 357 00:21:39,750 --> 00:21:43,630 هذا واحد يبدو معقدة بعض الشيء، ولكنه يستخدم نفس الأسس 358 00:21:43,630 --> 00:21:45,670 اننا بدأنا نتحدث عن الأسبوع الماضي. 359 00:21:45,670 --> 00:21:49,490 في GetString، والذي لا يأخذ حجة باطلة وفقا لتصل هنا 360 00:21:49,490 --> 00:21:53,730 وتقوم بإرجاع سلسلة، وأنا على ما يبدو أنا معلنا سلسلة تسمى العازلة. 361 00:21:53,730 --> 00:21:56,270 لا أعرف حقا ما الذي يحدث لاستخدامها في ذلك، لكن سننتظر لنرى. 362 00:21:56,270 --> 00:21:58,390 يبدو القدرات بشكل افتراضي 0. 363 00:21:58,390 --> 00:22:01,350 ليس تماما متأكدا من أين هذا يحدث، ولست متأكدا ما ن هو الذهاب الى استخدامها لحتى الآن، 364 00:22:01,350 --> 00:22:03,590 ولكن الآن هو الحصول على أكثر من ذلك بقليل للاهتمام. 365 00:22:03,590 --> 00:22:06,520 في خط 243، ونعلن الباحث، ج. 366 00:22:06,520 --> 00:22:08,800 هذا هو نوع من الغباء التفاصيل. 367 00:22:08,800 --> 00:22:15,820 A حرف هو 8 بت، ويمكن تخزين 8 بت عدد القيم المختلفة؟ >> [طالب] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 المشكلة هي إذا كنت تريد أن يكون 256 حرفا ASCII المختلفة، والتي هناك 369 00:22:20,730 --> 00:22:23,340 إذا كنت تعتقد العودة - وهذا ليس شيئا لتسجيل. 370 00:22:23,340 --> 00:22:25,710 ولكن إذا كنت تعتقد مرة أخرى إلى المخطط الذي ASCII كبيرة كان لدينا منذ أسابيع، 371 00:22:25,710 --> 00:22:30,600 كان هناك في هذه الحالة 128 أو 256 حرفا ASCII. 372 00:22:30,600 --> 00:22:32,940 استخدمنا جميع الأنماط تصل 0S و1S. 373 00:22:32,940 --> 00:22:36,210 هذا مشكلة إذا كنت تريد أن تكون قادرة على الكشف عن وجود خطأ 374 00:22:36,210 --> 00:22:40,190 لأنه إذا كنت تستخدم بالفعل 256 قيمة لشخصياتك، 375 00:22:40,190 --> 00:22:43,050 هل حقا لا نخطط لأنه الآن قبل أن يكون لديك أي وسيلة للقول، 376 00:22:43,050 --> 00:22:46,270 هذه ليست شخصية شرعي، وهذا هو بعض رسالة خاطئة. 377 00:22:46,270 --> 00:22:50,270 وذلك ما يفعله هو العالم يستخدمون فيه قيمة أكبر المقبلة، شيء يشبه الباحث، 378 00:22:50,270 --> 00:22:54,720 بحيث يكون لديك عدد من البتات مجنون (32 عاما) لمدة 4 مليار القيم الممكنة 379 00:22:54,720 --> 00:22:58,860 بحيث يمكنك ببساطة وضع حد باستخدام أساسا 257 من بينها، 380 00:22:58,860 --> 00:23:01,720 1 من الذي له معنى خاص وبعض خطأ. 381 00:23:01,720 --> 00:23:03,120 >> لذلك دعونا نرى كيف يعمل هذا. 382 00:23:03,120 --> 00:23:07,760 في خط 246، لدي هذه الحلقة في حين الكبيرة التي تدعو fgetc، 383 00:23:07,760 --> 00:23:11,090 و معنى الملف، getc بذلك، ومن ثم ستدين. 384 00:23:11,090 --> 00:23:15,520 اتضح هذا هو مجرد وسيلة أكثر دقة من القول قراءة المدخلات من لوحة المفاتيح. 385 00:23:15,520 --> 00:23:19,300 لوحة المفاتيح القياسية وسائل المدخلات والمخرجات القياسية يعني الشاشة، 386 00:23:19,300 --> 00:23:23,310 والخطأ المعياري، والذي سنرى في pset4، يعني الشاشة 387 00:23:23,310 --> 00:23:27,490 ولكن جزء خاص من الشاشة بحيث ليس الخلط مع الانتاج الفعلي 388 00:23:27,490 --> 00:23:30,750 أن التي ترغب في طباعتها. ولكن أكثر على ذلك في المستقبل. 389 00:23:30,750 --> 00:23:34,440 ذلك يعني فقط قراءة fgetc حرف واحد من لوحة المفاتيح وتخزينه أين؟ 390 00:23:34,440 --> 00:23:37,350 تخزينها في ج. 391 00:23:37,350 --> 00:23:41,360 ومن ثم تحقق - لذلك أنا فقط باستخدام بعض العطف منطقية هنا - 392 00:23:41,360 --> 00:23:46,000 تأكد من أنه لا يساوي - \ ن، وبالتالي فإن المستخدم هاهنا، ونحن نريد التوقف عند هذه النقطة، 393 00:23:46,000 --> 00:23:49,850 نهاية الحلقة - ونريد أيضا للتحقق من EOF ثابت خاصة، 394 00:23:49,850 --> 00:23:53,610 الذي إذا كنت تعرف أو تخمين، ماذا يقف؟ >> [طالب] نهاية الملف. الأخير >> من الملف. 395 00:23:53,610 --> 00:23:56,560 هذا هو نوع من معنى لأنه إذا أنا كتابة على لوحة المفاتيح، 396 00:23:56,560 --> 00:23:58,870 هناك حقا أي ملف المشاركة في ذلك، 397 00:23:58,870 --> 00:24:01,150 ولكن هذا هو نوع فقط من مصطلح عام يستخدم ليعني 398 00:24:01,150 --> 00:24:04,220 أن أي شيء آخر يأتي من أصابع الانسان. 399 00:24:04,220 --> 00:24:06,460 EOF - نهاية الملف. 400 00:24:06,460 --> 00:24:09,920 بوصفها جانبا، إذا كنت قد ضربت من أي وقت مضى التحكم في لوحة المفاتيح D، وليس من شأنه أن يكون لديك حتى الآن - 401 00:24:09,920 --> 00:24:15,230 لقد ضرب لكم التحكم C - D التحكم يرسل هذا الثابت خاص يسمى EOF. 402 00:24:15,230 --> 00:24:19,850 حتى الآن لدينا سوى بعض تخصيص الذاكرة الديناميكية. 403 00:24:19,850 --> 00:24:23,440 >> إذا كان الأمر كذلك (ن + 1> القدرات). الآن سوف أشرح ن. 404 00:24:23,440 --> 00:24:26,100 وكيف أن العديد من بايت N حاليا في المخزن المؤقت، 405 00:24:26,100 --> 00:24:28,620 السلسلة التي كنت تقوم حاليا ببناء من المستخدم. 406 00:24:28,620 --> 00:24:33,450 إذا كان لديك أكثر من الأحرف في المخزن المؤقت الخاص مما لديك القدرة في المخزن المؤقت، 407 00:24:33,450 --> 00:24:37,410 حدسي ما يتعين علينا القيام به ثم يتم تخصيص المزيد من القدرات. 408 00:24:37,410 --> 00:24:43,330 لذلك أنا ذاهب الى المقشود على بعض العمليات الحسابية والتركيز فقط على هذه الوظيفة هنا. 409 00:24:43,330 --> 00:24:46,070 كنت تعرف ما هو malloc أو على الأقل على دراية بصفة عامة. 410 00:24:46,070 --> 00:24:48,970 اتخاذ تخمين ما realloc لا. >> [طالب] ويضيف الذاكرة. 411 00:24:48,970 --> 00:24:52,920 انها ليست تماما مضيفا الذاكرة. انها اعادة توطين الذاكرة على النحو التالي. 412 00:24:52,920 --> 00:24:57,220 إذا كان هناك ما زال غرفة في نهاية السلسلة لتعطيك أكثر من تلك الذاكرة 413 00:24:57,220 --> 00:25:00,000 مما يعطي أصلا لك، ثم عليك أن تحصل على ذاكرة إضافية. 414 00:25:00,000 --> 00:25:03,460 حتى تتمكن من الحفاظ فقط وضع الأحرف السلسلة العودة إلى الوراء إلى العودة إلى الوراء. 415 00:25:03,460 --> 00:25:05,830 ولكن اذا كان هذا ليس هو الحال لكنت انتظرت وقتا طويلا 416 00:25:05,830 --> 00:25:07,940 وحصلت على شيء عشوائي ساقط في الذاكرة هناك 417 00:25:07,940 --> 00:25:10,290 ولكن هناك ذاكرة إضافية إلى هنا، هذا ما يرام. 418 00:25:10,290 --> 00:25:13,100 Realloc سوف تفعل كل رفع الأحمال الثقيلة بالنسبة لك، 419 00:25:13,100 --> 00:25:16,750 نقل سلسلة كنت قد قرأت حتى الآن في من هنا، وطرح عليه هناك، 420 00:25:16,750 --> 00:25:19,460 وبعد ذلك بإعطائك بعض أكثر المدرج في تلك المرحلة. 421 00:25:19,460 --> 00:25:22,550 >> حتى مع موجة من ناحية، واسمحوا لي أن أقول إن ما تقوم به GetString 422 00:25:22,550 --> 00:25:26,330 ولقد بدا مع المخزن مؤقت صغير، وربما حرف واحد واحد، 423 00:25:26,330 --> 00:25:30,820 وإذا كان المستخدم في أنواع حرفين، GetString ينتهي يدعو ويقول realloc 424 00:25:30,820 --> 00:25:33,150 وكان حرف واحد لا يكفي؛ تعطيني حرفين. 425 00:25:33,150 --> 00:25:35,950 إذا ثم تقرأ من خلال منطق الحلقة، انها سوف يقول 426 00:25:35,950 --> 00:25:39,600 المستعمل في طباعة 3 أحرف؛ تعطيني الآن 2 ولكن لا 4 أحرف، 427 00:25:39,600 --> 00:25:42,320 ثم إعطاء لي 8، ثم تعطيني 16 و 32. 428 00:25:42,320 --> 00:25:45,000 حقيقة أنني مضاعفة قدرة كل مرة 429 00:25:45,000 --> 00:25:48,570 يعني أن المخزن المؤقت لن تنمو ببطء، انها سوف تنمو بسرعة فائقة. 430 00:25:48,570 --> 00:25:51,380 وماذا يمكن أن يكون ميزة ذلك؟ 431 00:25:51,380 --> 00:25:54,600 لماذا أنا مضاعفة حجم المخزن المؤقت 432 00:25:54,600 --> 00:25:58,020 على الرغم من قد يحتاج المستخدم فقط حرف واحد إضافي من لوحة المفاتيح؟ 433 00:25:58,020 --> 00:26:01,750 [رد الطالب غير مسموع] >> ما هذا؟ >> [طالب] ليس لديك لتنمو في كثير من الأحيان باسم. 434 00:26:01,750 --> 00:26:03,300 بالضبط. لم يكن لديك لتنمو في كثير من الأحيان باسم. 435 00:26:03,300 --> 00:26:05,510 وهذا هو مجرد نوع من التحوط كنت الرهانات الخاصة بك هنا، 436 00:26:05,510 --> 00:26:10,850 وكانت الفكرة هي أنك لا تريد الاتصال realloc الكثير لأنه يميل إلى أن يكون بطيئا. 437 00:26:10,850 --> 00:26:12,910 أي وقت أن تطلب من نظام التشغيل للذاكرة، 438 00:26:12,910 --> 00:26:16,990 كما سترى قريبا في مجموعة مشكلة في المستقبل، فإنها تميل إلى يستغرق بعض الوقت. 439 00:26:16,990 --> 00:26:20,010 التقليل إلى أدنى حد بحيث مقدار الوقت، حتى لو كنت إضاعة بعض المساحة، 440 00:26:20,010 --> 00:26:21,900 يميل إلى أن يكون شيء جيد. 441 00:26:21,900 --> 00:26:24,060 >> ولكن إذا قرأنا من خلال الجزء الأخير من GetString هنا - 442 00:26:24,060 --> 00:26:27,950 ومرة أخرى فهم كل سطر واحد هنا ليست في غاية الأهمية اليوم - 443 00:26:27,950 --> 00:26:30,530 تلاحظ أنه في نهاية المطاف تدعو مرة أخرى malloc 444 00:26:30,530 --> 00:26:33,880 وتماما كما يخصص بايت يصل الى انها تحتاج لسلسلة 445 00:26:33,880 --> 00:26:38,060 ويلقي بعيدا ثم عن طريق الاتصال مجانا المخزن المؤقت كبير جدا 446 00:26:38,060 --> 00:26:40,080 إذا كان بالفعل حصلت تضاعف عدة مرات أيضا. 447 00:26:40,080 --> 00:26:42,730 لذلك باختصار، هذه هي الطريقة التي تعمل GetString كل هذا الوقت. 448 00:26:42,730 --> 00:26:47,060 لا تتم قراءة كل ما حرف واحد في وقت واحد مرة أخرى ومرة ​​أخرى ومرة ​​أخرى، 449 00:26:47,060 --> 00:26:50,750 وفي كل مرة يحتاج بعض ذاكرة إضافية، فإنه يسألك نظام التشغيل لذلك 450 00:26:50,750 --> 00:26:53,670 من خلال الدعوة realloc. 451 00:26:53,670 --> 00:26:57,890 >> أي أسئلة؟ حسنا. 452 00:26:57,890 --> 00:26:59,270 >> هجوم. 453 00:26:59,270 --> 00:27:04,060 والآن بعد أن نفهم مؤشرات أو على الأقل على دراية بشكل متزايد مع مؤشرات، 454 00:27:04,060 --> 00:27:06,700 دعونا النظر في كيفية العالم كله يبدأ في الانهيار 455 00:27:06,700 --> 00:27:10,030 إذا لم يكن لدفاع ضد المستخدمين الخصومة تماما، 456 00:27:10,030 --> 00:27:11,850 الناس الذين يحاولون اختراق النظام الخاص بك، 457 00:27:11,850 --> 00:27:16,890 الناس الذين يحاولون سرقة البرمجيات الخاصة بك عن طريق التحايل بعض رمز التسجيل 458 00:27:16,890 --> 00:27:19,090 قد لديهم وإلا لكتابة فيه. 459 00:27:19,090 --> 00:27:22,990 >> نلقي نظرة على هذا المثال هنا، الذي هو مجرد رمز C الذي يحتوي على الوظيفة الرئيسية في الجزء السفلي 460 00:27:22,990 --> 00:27:26,380 فو الذي يستدعي الدالة. وما صدوره لفو؟ 461 00:27:26,380 --> 00:27:29,680 [طالب] وهناك حجة واحدة. >> [مالان] حجة واحدة. 462 00:27:29,680 --> 00:27:33,450 حتى argv [1]، مما يعني أن الكلمة الأولى التي يقوم المستخدم بكتابته في سطر الأوامر 463 00:27:33,450 --> 00:27:36,360 بعد a.out أو أيا كان يسمى البرنامج. 464 00:27:36,360 --> 00:27:41,680 حتى في أعلى فو يأخذ في شار *. * ولكن هو فقط ما شار؟ >> [طالب] سلسلة. 465 00:27:41,680 --> 00:27:43,350 [مالان] سلسلة، ولذلك لا يوجد شيء جديد هنا. 466 00:27:43,350 --> 00:27:45,420 هذه السلسلة يتم بصورة تعسفية يتم استدعاء بار. 467 00:27:45,420 --> 00:27:51,430 في هذا الخط هنا، شار ج [12]، وفي نوع من شبه التقنية العربية، ما هو هذا الخط تفعل؟ 468 00:27:51,430 --> 00:27:55,220 [طالب] صفيف - صفيف >> من؟ >> [طالب] أحرف. أحرف >>. 469 00:27:55,220 --> 00:27:58,870 تعطيني مجموعة من 12 حرفا. لذلك يمكن ان نسميه هذا المخزن مؤقت. 470 00:27:58,870 --> 00:28:02,920 انه دعا تقنيا فإنه ج، ولكن منطقة عازلة في البرمجة يعني مجرد حفنة من الفضاء 471 00:28:02,920 --> 00:28:04,800 أن يمكنك وضع بعض الاشياء فيه. 472 00:28:04,800 --> 00:28:07,940 وأخيرا ثم، قمنا memcpy لم تستخدم من قبل، ولكن يمكنك تخمين ربما ما تقوم به. 473 00:28:07,940 --> 00:28:10,480 نسخه الذاكرة. ماذا يفعل؟ 474 00:28:10,480 --> 00:28:19,270 على ما يبدو أنه نسخ بار، مدخلاته، إلى ج لكن فقط حتى طول شريط. 475 00:28:19,270 --> 00:28:24,930 ولكن هناك خلل هنا. >> [طالب] تحتاج الطابع sizeof. حسنا >>. 476 00:28:24,930 --> 00:28:30,860 من الناحية الفنية، ينبغي لنا أن نفعل حقا التوابع strlen (بار) * sizeof (تشار)). هذا صحيح. 477 00:28:30,860 --> 00:28:33,930 ولكن في أسوأ الحالات هنا، دعونا نفترض أن that's - 478 00:28:33,930 --> 00:28:35,950 حسنا. ثم هناك اثنان البق. 479 00:28:35,950 --> 00:28:39,160 sizeof ذلك (شار))؛ 480 00:28:39,160 --> 00:28:41,290 دعونا جعل هذا قليلا على نطاق أوسع. 481 00:28:41,290 --> 00:28:44,910 حتى الآن لا يزال هناك علة، وهذا ما؟ >> [استجابة الطالب غير مسموع] 482 00:28:44,910 --> 00:28:46,990 تحقق من وجود ما؟ >> [طالب] التحقق من وجود NULL. 483 00:28:46,990 --> 00:28:50,270 يجب علينا أن التحقق من وجود عموما NULL لأن تحدث أمور سيئة 484 00:28:50,270 --> 00:28:53,200 عندما المؤشر هو NULL لأنك قد ينتهي الذهاب إلى هناك، 485 00:28:53,200 --> 00:28:57,630 ويجب أن لا يكون أي وقت مضى الذهاب إلى NULL بواسطة يعتبر إلغاء مرجعية مع المشغل نجوم. 486 00:28:57,630 --> 00:29:01,050 لذلك هذا امر جيد. وماذا نحن فاعلون؟ منطقيا، وهناك عيب هنا أيضا. 487 00:29:01,050 --> 00:29:04,450 [طالب] معرفة ما اذا كان هو argc> = إلى 2. 488 00:29:04,450 --> 00:29:10,550 حتى تحقق إذا هو argc> = 2. حسنا، لذلك هناك ثلاثة أخطاء في هذا البرنامج هنا. 489 00:29:10,550 --> 00:29:16,630 نحن الآن فحص ما إذا كان المستخدم كتابتها في الواقع أي شيء في argv [1]. جيدة. 490 00:29:16,630 --> 00:29:20,950 إذن ما هو علة ثالثة؟ نعم. >> [طالب] C قد لا تكون كبيرة بما يكفي. 491 00:29:20,950 --> 00:29:23,320 جيدة. بحثنا سيناريو واحد. 492 00:29:23,320 --> 00:29:29,520 بحثنا ضمنا عدم نسخ ذاكرة أكثر من شأنه أن يتجاوز طول الشريط. 493 00:29:29,520 --> 00:29:32,510 إذا كان الأمر كذلك السلسلة المستعمل في طباعة هو 10 حرفا، 494 00:29:32,510 --> 00:29:36,020 هذا يقول نسخ فقط 10 حرفا. وهذا ما يرام. 495 00:29:36,020 --> 00:29:39,940 ولكن ما إذا كان المستخدم كتابتها في كلمة واحدة في موجه مثل كلمة 20-حرف؟ 496 00:29:39,940 --> 00:29:44,900 هذا يقول نسخة من شريط 20 حرفا في ماذا؟ 497 00:29:44,900 --> 00:29:49,750 C، والمعروف باسم عازلة لدينا، مما يعني أنك كتبت للتو البيانات 498 00:29:49,750 --> 00:29:52,540 إلى مواقع بايت 8 أن كنت لا تملك، 499 00:29:52,540 --> 00:29:54,870 وكنت لا تملك لهم، بمعنى أن كنت أبدا المخصصة لهم. 500 00:29:54,870 --> 00:30:00,370 لذلك هذا هو ما يعرف عموما بأنه هجوم تجاوز المخزن المؤقت أو المخزن المؤقت تجاوز الهجوم. 501 00:30:00,370 --> 00:30:05,580 وانها هجوم بمعنى أنه إذا كان المستخدم أو البرنامج الذي المتصل بك وظيفة 502 00:30:05,580 --> 00:30:10,490 يمكن أن يقوم به هذا ضار، ما يحدث في الواقع القادم يكون في الواقع سيئة جدا. 503 00:30:10,490 --> 00:30:12,450 >> لذلك دعونا نلقي نظرة على هذه الصورة هنا. 504 00:30:12,450 --> 00:30:16,060 هذه الصورة تمثل الكدسة من الذاكرة. 505 00:30:16,060 --> 00:30:19,580 أذكر أنه في كل مرة كنت استدعاء دالة لك هذا الإطار يذكر على كومة 506 00:30:19,580 --> 00:30:21,520 وثم آخر ثم آخر وآخر. 507 00:30:21,520 --> 00:30:24,300 وحتى الآن، لدينا مجرد نوع من هذه المستخرجة على شكل مستطيلات 508 00:30:24,300 --> 00:30:26,290 إما على لوحة أو على الشاشة هنا. 509 00:30:26,290 --> 00:30:30,580 ولكن إذا كان لنا أن التكبير في واحدة من تلك المستطيلات، عند استدعاء الدالة فو، 510 00:30:30,580 --> 00:30:35,880 اتضح أن هناك أكثر من الداخل كومة من هذا الإطار في هذا المستطيل 511 00:30:35,880 --> 00:30:40,060 من X و y فقط وألف وباء، وكأننا لم نتحدث عن المبادلة. 512 00:30:40,060 --> 00:30:44,410 اتضح أن هناك بعض التفاصيل ذات مستوى أقل، من بينها عنوان المرسل. 513 00:30:44,410 --> 00:30:49,550 لذلك عندما تبين الرئيسي يدعو فو، الرئيسي وإبلاغ فو 514 00:30:49,550 --> 00:30:53,520 ما هو عنوان الرئيسي في ذاكرة الكمبيوتر 515 00:30:53,520 --> 00:30:57,770 لأن خلاف ذلك، في أقرب وقت يتم تنفيذ فو، كما في هذه الحالة هنا، 516 00:30:57,770 --> 00:31:00,830 بمجرد وصولك الى هذا قوس مغلق مجعد في نهاية فو، 517 00:31:00,830 --> 00:31:05,310 كيف هيك لا أعرف من أين فو يفترض السيطرة على البرنامج أن تذهب؟ 518 00:31:05,310 --> 00:31:08,970 اتضح أن الإجابة على هذا السؤال هو في هذا المستطيل الأحمر هنا. 519 00:31:08,970 --> 00:31:12,670 هذا يمثل المؤشر، والامر متروك للكمبيوتر لتخزين مؤقتا 520 00:31:12,670 --> 00:31:17,030 على المكدس يسمى تتم عنوان رئيسي لذلك أنه بمجرد تنفيذ فو، 521 00:31:17,030 --> 00:31:21,120 الكمبيوتر وما يعرف أين الخط الرئيسي في العودة إلى. 522 00:31:21,120 --> 00:31:23,940 حفظ مؤشر الإطار تتعلق بالمثل على ذلك. 523 00:31:23,940 --> 00:31:26,310 * شريط شار هنا يمثل ما؟ 524 00:31:26,310 --> 00:31:31,350 الآن هذا الجزء الأزرق هو الإطار هنا لفو. ما هو شريط؟ 525 00:31:31,570 --> 00:31:35,010 شريط هو مجرد حجة لوظيفة فو. 526 00:31:35,010 --> 00:31:37,500 حتى الآن عدنا إلى نوع من الصورة مألوفة. 527 00:31:37,500 --> 00:31:39,850 هناك المزيد والمزيد من الاشياء الانحرافات التي تظهر على الشاشة، 528 00:31:39,850 --> 00:31:43,380 ولكن هذا الجزء الضوء الأزرق هو فقط ما كنا الرسم على السبورة 529 00:31:43,380 --> 00:31:45,790 عن شيء مثل المبادلة. هذا هو الإطار لفو. 530 00:31:45,790 --> 00:31:51,490 والشيء الوحيد فيه الآن هو بار، الذي هو هذه المعلمة. 531 00:31:51,490 --> 00:31:55,220 ولكن ينبغي أن تكون أي شيء آخر في كومة وفقا لهذا الرمز هنا؟ 532 00:31:55,220 --> 00:31:57,760 [طالب] ج شار [12]. >> [مالان] شار ج [12]. 533 00:31:57,760 --> 00:32:02,810 يجب أن نرى أيضا 12 الساحات الذاكرة المخصصة إلى متغير يسمى C، 534 00:32:02,810 --> 00:32:04,970 والواقع أننا لا يكون هذا على الشاشة. 535 00:32:04,970 --> 00:32:08,480 أعلى جدا هناك ج [0]، ومن ثم صاحب هذا الرسم البياني 536 00:32:08,480 --> 00:32:11,850 لم أكن عناء رسم كل من المربعات، ولكن هناك في الواقع 12 هناك 537 00:32:11,850 --> 00:32:16,590 لأنه إذا نظرتم في أسفل اليمين، ج [11] إذا كنت تعول من 0 بايت 12TH هو من هذا القبيل. 538 00:32:16,590 --> 00:32:18,400 ولكن هنا تكمن المشكلة. 539 00:32:18,400 --> 00:32:22,390 في أي اتجاه متزايد هو C؟ 540 00:32:22,390 --> 00:32:27,080 نوع من أعلى إلى أسفل إذا كان يبدأ في أعلى وينمو إلى أسفل. 541 00:32:27,080 --> 00:32:30,110 انها لا تشبه تركنا أنفسنا المدرج الكثير هنا على الإطلاق. 542 00:32:30,110 --> 00:32:32,090 لدينا نوع من رسمت أنفسنا في مأزق، 543 00:32:32,090 --> 00:32:36,940 وأن ج [11] هو الحق حتى ضد نقابة المحامين، والذي هو الحق حتى ضد مؤشر الإطار المحفوظة، 544 00:32:36,940 --> 00:32:39,960 الذي هو الحق حتى ضد عنوان المرسل. ليس هناك مساحة أكبر. 545 00:32:39,960 --> 00:32:42,810 إذن ما هو ضمنا ثم إذا كنت المسمار 546 00:32:42,810 --> 00:32:46,500 وحاولت قراءة 20 بايت إلى بايت العازلة 12-؟ 547 00:32:46,500 --> 00:32:50,060 حيث هي تلك التي تسير 8 بايت إضافية أن تذهب؟ >> [طالب] داخل - 548 00:32:50,060 --> 00:32:53,200 داخل كل شيء آخر، ومنها ما هو السوبر الهامة. 549 00:32:53,200 --> 00:32:57,260 والشيء الأكثر أهمية، من المحتمل، هو مربع أحمر هناك، عنوان المرسل، 550 00:32:57,260 --> 00:33:03,560 لأن افترض أنك إما بطريق الخطأ أو الكتابة فوق تلك adversarially بايت 4، 551 00:33:03,560 --> 00:33:07,260 هذا العنوان المؤشر، وليس فقط مع القمامة ولكن مع عدد 552 00:33:07,260 --> 00:33:09,810 يحدث ذلك لتمثيل العنوان الفعلي في الذاكرة. 553 00:33:09,810 --> 00:33:13,880 ما هو ضمنا، منطقيا؟ >> [طالب] وظيفة هو الذهاب الى العودة الى مكان مختلف. 554 00:33:13,880 --> 00:33:15,250 بالضبط. 555 00:33:15,250 --> 00:33:19,170 عندما يعود فو والزيارات التي متعرج، والبرنامج سنشرع 556 00:33:19,170 --> 00:33:25,060 عدم العودة الى الأصل، انه سيكون للعودة إلى ما هو عنوان في هذا المربع الأحمر. 557 00:33:25,060 --> 00:33:28,600 >> في حالة تسجيل البرنامج التحايل، 558 00:33:28,600 --> 00:33:32,260 ماذا لو كان العنوان الذي يجري عاد إلى وظيفة غير التي عادة يحصل على استدعاء 559 00:33:32,260 --> 00:33:35,690 بعد كنت قد دفعت لهذا البرنامج وإدخالها التعليمات البرمجية التسجيل؟ 560 00:33:35,690 --> 00:33:39,870 يمكنك فرز خدعة من جهاز الكمبيوتر إلى هنا ولكن لن يحدث بدلا من ذلك هنا. 561 00:33:39,870 --> 00:33:45,100 أو إذا كنت حقا ذكي، ويمكن في الواقع عدو اكتب في في لوحة المفاتيح، على سبيل المثال، 562 00:33:45,100 --> 00:33:50,690 لا كلمة الفعلية، لا الأحرف 20، ولكن لنفترض انه أو انها فعلا في أنواع 563 00:33:50,690 --> 00:33:52,770 بعض الأحرف التي تمثل رمز. 564 00:33:52,770 --> 00:33:55,320 وانها لن تكون متاحة C، انه سيكون في الواقع أن تكون الأحرف 565 00:33:55,320 --> 00:33:59,290 التي تمثل رمز الجهاز ثنائي، و 0s 1s. 566 00:33:59,290 --> 00:34:01,290 ولكن لنفترض انهم ذكي بما فيه الكفاية للقيام بذلك، 567 00:34:01,290 --> 00:34:06,500 للصق على نحو ما إلى شيء موجه GetString هذا هو التعليمات البرمجية المترجمة أساسا، 568 00:34:06,500 --> 00:34:09,980 وآخر 4 بايت الكتابة أن عنوان المرسل. 569 00:34:09,980 --> 00:34:13,360 وما عنوان هذا المدخل لا تفعل؟ 570 00:34:13,360 --> 00:34:18,630 في الواقع فإنه يخزن في هذا المستطيل الأحمر عنوان البايت الأول من المخزن المؤقت. 571 00:34:18,630 --> 00:34:23,070 ولذلك عليك أن تكون ذكية حقا، وهذا هو الكثير من التجربة والخطأ للناس سيئة هناك، 572 00:34:23,070 --> 00:34:25,639 ولكن إذا كنت تستطيع معرفة كيفية كبيرة هذا المخزن المؤقت 573 00:34:25,639 --> 00:34:28,820 بحيث بايت القليلة الماضية في الإدخال الذي تقدم إلى البرنامج 574 00:34:28,820 --> 00:34:33,540 يحدث ليكون معادلا لعنوان بداية العازلة الخاص بك، يمكنك القيام بذلك. 575 00:34:33,540 --> 00:34:39,320 اذا قلنا مرحبا وعادة 0 \، وهذا ما ينتهي في المخزن المؤقت. 576 00:34:39,320 --> 00:34:44,420 ولكن إذا نحن أكثر ذكية وملأنا أن العازلة مع ما سنقوم استدعاء بشكل عام شفرة الهجوم - 577 00:34:44,420 --> 00:34:48,860 AAA، هجوم، هجوم، هجوم - عندما يكون ذلك مجرد شيء لا شيء سيئة، 578 00:34:48,860 --> 00:34:51,820 ماذا يحدث إذا كنت حقا ذكي، قد تقوم بذلك. 579 00:34:51,820 --> 00:34:58,610 في المربع الأحمر هنا هو سلسلة من الأرقام - 80، C0، 35، 08. 580 00:34:58,610 --> 00:35:01,610 تلاحظ أن يطابق الرقم الذي يعود هنا. 581 00:35:01,610 --> 00:35:04,430 انها في ترتيب عكسي، ولكن أكثر في الوقت المحدد بعض هذا الآخر. 582 00:35:04,430 --> 00:35:08,140 تلاحظ أنه تم تغيير هذا عنوان المرسل عمدا 583 00:35:08,140 --> 00:35:12,020 على قدم المساواة عنوان هنا، وليس عنوان الرئيسي. 584 00:35:12,020 --> 00:35:17,500 إذا كان الأمر كذلك الرجل السيئ هو السوبر ذكية، وقال انه أو انها سوف تدرج في أن شفرة الهجوم 585 00:35:17,500 --> 00:35:20,930 شيء من هذا القبيل حذف كافة الملفات للمستخدم أو نسخ كلمات المرور 586 00:35:20,930 --> 00:35:24,680 أو إنشاء حساب المستخدم الذي يمكنني تسجيل الدخول ثم إلى - أي شيء على الإطلاق. 587 00:35:24,680 --> 00:35:26,950 >> وهذا هو الخطر على حد سواء وقوة C. 588 00:35:26,950 --> 00:35:29,840 لأنه لديك إمكانية الوصول إلى الذاكرة من خلال مؤشرات 589 00:35:29,840 --> 00:35:32,520 وبالتالي يمكنك كتابة أي شيء تريده في الذاكرة للكمبيوتر، 590 00:35:32,520 --> 00:35:35,080 يمكنك جعل جهاز كمبيوتر تفعل أي شيء تريده 591 00:35:35,080 --> 00:35:39,550 ببساطة عن طريق وجود لها داخل القفز نحو مجالها الذاكرة الخاصة. 592 00:35:39,550 --> 00:35:44,650 وحتى يومنا هذا الكثير من البرامج والعديد من المواقع بحيث يتم خطر 593 00:35:44,650 --> 00:35:46,200 تختزل إلى الناس الاستفادة من هذا. 594 00:35:46,200 --> 00:35:50,760 وهذا قد يبدو وكأنه هجوم متطورة فائقة، لكنه لا يبدأ دائما على هذا النحو. 595 00:35:50,760 --> 00:35:53,560 الحقيقة هي أن الناس ما تفعل عادة سيئة وسوف هو، 596 00:35:53,560 --> 00:35:58,200 سواء كان ذلك في برنامج في سطر الأوامر أو برنامج أو موقع على شبكة الإنترنت واجهة المستخدم الرسومية، 597 00:35:58,200 --> 00:35:59,940 كنت مجرد بداية تقديم هراء. 598 00:35:59,940 --> 00:36:03,980 اكتب لكم في كلمة كبيرة حقا في حقل البحث واضغط على Enter، 599 00:36:03,980 --> 00:36:05,780 وعليك الانتظار لمعرفة ما إذا كان الموقع تعطل 600 00:36:05,780 --> 00:36:09,990 أو يمكنك الانتظار لمعرفة ما إذا كان برنامج يظهر رسالة خطأ بعض 601 00:36:09,990 --> 00:36:14,330 لأنه إذا كنت محظوظا والرجل السيئة والتي تقدمها بعض المدخلات مجنون 602 00:36:14,330 --> 00:36:18,980 أن تعطل البرنامج، وهذا يعني مبرمج لم تتوقع سلوكك السيئ، 603 00:36:18,980 --> 00:36:23,630 مما يعني يمكنك على الأرجح مع ما يكفي من الجهد، والمحاكمة والخطأ بما فيه الكفاية، 604 00:36:23,630 --> 00:36:26,650 معرفة كيفية شن هجوم أكثر دقة. 605 00:36:26,650 --> 00:36:31,410 لذلك بقدر ما هو جزء من الأمن لا مجرد تجنب هذه الهجمات تماما 606 00:36:31,410 --> 00:36:34,100 ولكن كشفها وفعلا تبحث في سجلات 607 00:36:34,100 --> 00:36:36,780 ورؤية ما لديك المدخلات مجنون الناس كتابتها في موقع الويب الخاص بك، 608 00:36:36,780 --> 00:36:38,960 ما شروط البحث والناس كتابتها في موقع الويب الخاص بك 609 00:36:38,960 --> 00:36:42,870 على أمل تفيض بعض العازلة. 610 00:36:42,870 --> 00:36:45,500 وهذا كله يتلخص في أساسيات بسيطة من ما هو صفيف 611 00:36:45,500 --> 00:36:49,080 وماذا يعني ذلك لتخصيص واستخدام الذاكرة. 612 00:36:49,080 --> 00:36:51,710 >> المتعلقة بذلك ثم هو أيضا ذلك. 613 00:36:51,710 --> 00:36:54,280 دعونا نظرة فقط من داخل القرص الصلب مرة أخرى. 614 00:36:54,280 --> 00:36:58,440 تذكرون من أسبوع أو أسبوعين قبل أن عند سحب الملفات إلى سلة المحذوفات أو سلة المهملات، 615 00:36:58,440 --> 00:37:03,710 ماذا يحدث؟ >> [طالب] لا شيء. لا شيء على الإطلاق >>، أليس كذلك؟ 616 00:37:03,710 --> 00:37:05,740 إذا قمت بتشغيل في نهاية المطاف انخفاض مساحة القرص، 617 00:37:05,740 --> 00:37:08,190 ويندوز أو ماك OS بدء حذف الملفات بالنسبة لك. 618 00:37:08,190 --> 00:37:10,390 ولكن إذا قمت بسحب شيء في هناك، وهذا ليس على الإطلاق آمنة. 619 00:37:10,390 --> 00:37:13,800 جميع الحجرة أو صديق أو أحد أفراد أسرته القيام به هو النقر المزدوج، وفويلا، 620 00:37:13,800 --> 00:37:16,310 هناك سطحية كافة الملفات التي حاولت حذفها. 621 00:37:16,310 --> 00:37:19,590 معظمنا على الأقل أعرف أن لديك لانقر بزر الماوس الأيمن فوق أو السيطرة 622 00:37:19,590 --> 00:37:22,310 وإفراغ سلة المهملات أو شيء من هذا القبيل. 623 00:37:22,310 --> 00:37:25,000 لكن حتى ذلك الحين أن لا يفعل تماما خدعة 624 00:37:25,000 --> 00:37:28,010 لأن ما يحدث عندما يكون لديك ملف على القرص الثابت 625 00:37:28,010 --> 00:37:32,770 الذي يمثل بعض مستند Word أو JPEG بعض، وهذا يمثل القرص الثابت، 626 00:37:32,770 --> 00:37:35,350 ودعونا نقول هذه القطعة هنا يمثل هذا الملف، 627 00:37:35,350 --> 00:37:38,390 وانها تتكون من مجموعة كاملة من 0S و1S. 628 00:37:38,390 --> 00:37:42,470 ماذا يحدث عندما لا اسحب فقط هذا الملف إلى سلة المهملات أو إعادة تدويرها بن 629 00:37:42,470 --> 00:37:48,020 لكنها فارغة أيضا؟ نوع من لا شيء. 630 00:37:48,020 --> 00:37:49,640 انها ليست شيئا على الإطلاق الآن. 631 00:37:49,640 --> 00:37:54,290 الآن شيء فقط لأن شيئا قليلا يحدث في شكل هذا الجدول. 632 00:37:54,290 --> 00:37:58,370 ولذلك لا يوجد نوع من قاعدة البيانات أو جدول داخل ذاكرة جهاز الكمبيوتر 633 00:37:58,370 --> 00:38:03,850 يحتوي عمود واحد أساسا لملفات أسماء وعمود واحد لملفات 'الموقع، 634 00:38:03,850 --> 00:38:07,720 حيث قد يكون هذا الموقع 123، مجرد رقم عشوائي. 635 00:38:07,720 --> 00:38:14,560 لذلك قد يكون لدينا شيء من هذا القبيل وx.jpeg الموقع 123. 636 00:38:14,560 --> 00:38:18,800 ماذا يحدث بعد ذلك عند تفريغ سلة المهملات في الواقع الخاص بك؟ 637 00:38:18,800 --> 00:38:20,330 أن يذهب بعيدا. 638 00:38:20,330 --> 00:38:23,610 ولكن ما لا يذهب بعيدا هو و 0s 1s. 639 00:38:23,610 --> 00:38:26,270 >> إذن ما ثم اتصال pset4؟ 640 00:38:26,270 --> 00:38:31,240 حسنا، مع pset4، فقط لأنهم تمحى بطريق الخطأ ونحن بطاقة فلاش مدمج 641 00:38:31,240 --> 00:38:35,750 أن كان كل من هذه الصور أو لمجرد أنها من سوء الحظ أصبحت تالفة 642 00:38:35,750 --> 00:38:38,000 لا يعني أن 0S و1S ليست تزال هناك. 643 00:38:38,000 --> 00:38:40,410 ربما يتم فقدان عدد قليل منها بسبب فساد شيء 644 00:38:40,410 --> 00:38:43,320 بمعنى أن بعض 0S أصبح 1S 1S وأصبح 0S. 645 00:38:43,320 --> 00:38:47,240 يمكن تحدث أمور سيئة بسبب برنامج عربات التي تجرها الدواب أو الأجهزة المعيبة. 646 00:38:47,240 --> 00:38:50,370 ولكن العديد من هذه البتات، وربما حتى 100٪ منهم، لا تزال هناك. 647 00:38:50,370 --> 00:38:55,050 انها مجرد أن الكمبيوتر أو الكاميرا لا تعرف من أين بدأت JPEG1 648 00:38:55,050 --> 00:38:56,910 وحيث بدأ JPEG2. 649 00:38:56,910 --> 00:39:01,070 ولكن إذا كنت، مبرمج، تعرف مع شيء من الدهاء حيث تلك هي صور JPEG 650 00:39:01,070 --> 00:39:06,010 أو كيف تبدو حتى تتمكن من تحليل JPEG و 0s 1s ويقول، JPEG، 651 00:39:06,010 --> 00:39:09,440 يمكنك كتابة برنامج مع فقط أساسا للأو أثناء حلقة 652 00:39:09,440 --> 00:39:12,820 أن يسترد كل واحد من هذه الملفات. 653 00:39:12,820 --> 00:39:16,030 وبالتالي فإن الدرس المستفاد هو أن تبدأ بعد ذلك بشكل آمن محو الملفات 654 00:39:16,030 --> 00:39:18,340 إذا كنت ترغب في تجنب هذا تماما. نعم. 655 00:39:18,340 --> 00:39:21,010 >> [طالب] فكيف تقول على جهاز الكمبيوتر الخاص بك 656 00:39:21,010 --> 00:39:23,550 أن لديك ذاكرة أكثر من فعلت من قبل؟ 657 00:39:23,550 --> 00:39:27,820 الحصول على مزيد من الذاكرة من فعلت من قبل - >> [طالب] المزيد من الذاكرة المتاحة. 658 00:39:27,820 --> 00:39:29,630 اه. سؤال جيد. 659 00:39:29,630 --> 00:39:32,360 فلماذا إذن بعد إفراغ سلة المهملات جهاز الكمبيوتر الخاص بك لا اقول لكم 660 00:39:32,360 --> 00:39:34,910 أن لديك مساحة حرة أكبر مما كنت فعلت من قبل؟ 661 00:39:34,910 --> 00:39:36,770 باختصار، لأنه يكذب. 662 00:39:36,770 --> 00:39:40,740 أكثر من الناحية الفنية، لديك مساحة أكبر لأنه الآن قلتم 663 00:39:40,740 --> 00:39:43,680 يمكنك وضع الأشياء الأخرى حيث هذا الملف كان من قبل. 664 00:39:43,680 --> 00:39:45,450 ولكن هذا لا يعني أن تسير بعيدا بت، 665 00:39:45,450 --> 00:39:48,590 وهذا لا يعني يجري تغيير البتات لجميع 0S، على سبيل المثال، 666 00:39:48,590 --> 00:39:50,150 من أجل حمايتك. 667 00:39:50,150 --> 00:39:54,640 وعلى النقيض من ذلك، إذا كنت آمن محو الملفات أو جسديا تدمير الجهاز، 668 00:39:54,640 --> 00:39:57,300 هذا هو حقا السبيل الوحيد أحيانا حول ذلك. 669 00:39:57,300 --> 00:40:02,020 >> فلماذا لا نترك تلك المذكرة على شبه مخيفة، وسوف نرى لك يوم الاثنين. 670 00:40:02,020 --> 00:40:07,000 [تصفيق] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]