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، دانشگاه هاروارد و MIT طرح آنلاین آموزشی و بیشتر، 12 00:00:32,980 --> 00:00:36,730 در حال راه اندازی در دانشگاه هاروارد در روز دوشنبه، که به معنی دوشنبه 13 00:00:36,730 --> 00:00:40,930 شما باید به عنوان آخرین شمارش، 86،000 همکلاسی های دیگر 14 00:00:40,930 --> 00:00:43,680 خواهد شد که همراه با سخنرانی و بخش CS50 15 00:00:43,680 --> 00:00:45,890 walkthroughs و مجموعه مشکل است. 16 00:00:45,890 --> 00:00:51,870 و به عنوان بخشی از این، شما تبدیل خواهد شد اعضای کلاس افتتاحیه CS50 و در حال حاضر CS50x. 17 00:00:51,870 --> 00:00:56,150 به عنوان بخشی از این در حال حاضر، این باور که وجود خواهد داشت و برخی از upsides به عنوان. 18 00:00:56,150 --> 00:01:00,620 آماده شدن برای این کار، به تعداد گسترده ای از دانش آموزان، 19 00:01:00,620 --> 00:01:03,820 کافی است برای گفتن که حتی اگر ما دارای 108 TFS و CA ها، 20 00:01:03,820 --> 00:01:07,560 آن را کاملا بهترین نسبت دانش آموز به معلم نیست زمانی که ما به 80،000 از دانش آموزان است. 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 شماره، و مانند آن - این روز است. 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 و اگر ما قصد استفاده از باینری، 0 یا 1، ما می توانیم این تصویر بیان 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 و همچنین در walkthrough، 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 فرمت های فایل مانند توضیحات. 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 است که قصد دارد به برخی از cryptically نام متغیر به نام 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 یا یکی از CAS که شما می دانید اگر شما می خواهم به بحث در مورد این که چه کارهایی رفت. 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 چیزهای مثل من یک رشته، من از نوع int - از توابع که در اینجا ذکر شده است. 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 * کاراکتر باشد. برای پدر و مادر بود، که احتمالا باعث می شود whooshing صدا]. این خوب است. 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 به نظر می رسد که بولی و درست و نادرست را در 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 به طوری که شما می توانید مفهوم بولی، درست یا غلط استفاده 185 00:10:55,620 --> 00:10:58,620 بدون این، شما را مجبور به جعلی آن مرتب سازی و استفاده از نوع int 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 اغلب، ما نمونه های اولیه در تاپس از ما قرار داده است. فایل های C، 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 می شود از نوع int، 210 00:12:25,640 --> 00:12:27,640 اما معلوم برخی از موارد گوشه ای وجود دارد. 211 00:12:27,640 --> 00:12:31,810 چه می شود در صورتی که کاربر در یک شماره است که راه بیش از حد بزرگ است، عدد یک با 18 صفر بتوان 2 212 00:12:31,810 --> 00:12:35,490 که نه تنها می توانند به راحتی در داخل یک int؟ رفتار مورد انتظار به چه صورت است؟ 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 ما، بله، 4 میلیارد شماره در اختیار ما: -2 میلیارد در بالا به 2 میلیارد دلار، دادن یا گرفتن. 222 00:13:10,700 --> 00:13:14,710 خب، چه در برنامه نویسی مشترک است این است که شما سرقت تنها یکی از آن اعداد، 223 00:13:14,710 --> 00:13:18,920 شاید 0، شاید 2 میلیارد، شاید -2 میلیارد، 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 این تابع از نوع int است، در حالی که (واقعیت)، بنابراین ما باید یک حلقه بی نهایت عمدی، 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 نتواند به آن نوع داده int می دهد. 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 میلیارد کاراکتر، شخصیت بیش از کامپیوتر حتی به RAM است. 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 اعلام یک int، n، و کاراکتر، 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، به طوری که شما می توانید بیش از یک رشته تکرار، شما می توانید کاراکتر ها را به نوع داده int تبدیل کنید. 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 آره. این به من آدرس از N و آدرس C است. این است که چرا مهم است؟ 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 و پس از آن بازگشت N در صورتی که می کند، در واقع، درست ارزیابی اطلاع می دهد. 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 - - در این متغیر N برای من این است که تعداد قرار داده است. 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 [پاسخ دانش آموز نامفهوم] >> نقطه اعشار در واقع می تواند کار کند. 312 00:18:53,470 --> 00:18:56,330 بیایید نگه دارید که فکر می کردم برای یک لحظه. چه چیز دیگری؟ 313 00:18:56,330 --> 00:18:59,270 [دانشجو] آن را می تواند تهی باشد. >> تفکر خوب است. این می تواند شخصیت تهی است. 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 ٪ C وجود دارد فقط برای چک کردن خطا. 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، علاوه بر ذخیره کردن مقادیر در N و C در این مثال در اینجا، 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 و تنها N می شود با ارزش مانند 123 ذخیره شده، 323 00:19:33,880 --> 00:19:35,640 و هیچ چیز در C قرار داده می شود. 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 که در آن صورت بزرگ، من از نوع int، بنابراین من آزاد خط را به آزاد کردن حافظه 328 00:19:50,190 --> 00:19:54,000 که در واقع GetString اختصاص داده شده، و سپس N بازگشت من، 329 00:19:54,000 --> 00:19:58,500 دیگری اگر شما همیشه تعجب که در آن است که سعی مجدد بیانیه می آید از، آن را از حق در اینجا می آید. 330 00:19:58,500 --> 00:20:04,390 بنابراین اگر، در مقابل، من در 123foo نوع - فقط برخی از دنباله تصادفی از متن - 331 00:20:04,390 --> 00:20:08,490 sscanf در حال رفتن به دیدن شماره، شماره، شماره، F، 332 00:20:08,490 --> 00:20:16,410 و آن را برای قرار دادن 123 در N و آن را برای قرار دادن F در C و پس از آن بازگشت 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 چه می شود اگر شما فقط در یک کاراکتر مثل F تایپ و Enter را فشار دهید تا کنون که بدون تایپ کردن 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 می تواند پوشش که بیش از حد چرا که در آن صورت، آن را نمی خواهید برای پر کردن N یا C است. 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 هنوز مطمئن شوید که کاملا که در آن این است که رفتن، مطمئن n است که باید برای استفاده می شود در عین حال، 364 00:22:01,350 --> 00:22:03,590 اما در حال حاضر آن را کمی بیشتر جالب است. 365 00:22:03,590 --> 00:22:06,520 در خط 243، هوشمند، C را ما اعلام می کنیم. 366 00:22:06,520 --> 00:22:08,800 این نوع از جزئیات احمقانه است. 367 00:22:08,800 --> 00:22:15,820 کاراکتر 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 پس چه دنیا بعدی بزرگترین ارزش، چیزی شبیه به یک int استفاده از آنها، 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 F به معنای فایل، بنابراین getc، و پس از آن STDIN. 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 بررسی کنید که برابر نیست - \ N، به طوری که کاربر Enter را فشار دهید، ما می خواهیم که در آن نقطه متوقف، 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 >> بنابراین اگر (n + 1> ظرفیت). حالا من N را توضیح دهد. 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 نگاهی حدس بزنید چه بازتخصیص کند. >> [دانشجو] می افزاید حافظه است. 411 00:24:48,970 --> 00:24:52,920 این کاملا با اضافه کردن حافظه است. reallocates حافظه به شرح زیر است. 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 و چیزی تصادفی plopped در حافظه به آنجا 417 00:25:07,940 --> 00:25:10,290 اما حافظه اضافی را در اینجا وجود دارد، این درست است. 418 00:25:10,290 --> 00:25:13,100 بازتخصیص رفتن به بلند کردن اجسام سنگین برای شما، 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 به پایان می رسد تا خواستار بازتخصیص و می گوید: 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 این ایده که شما نمی خواهید بازتخصیص زیادی به تماس، زیرا این امر منجر به آهسته. 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 با تماس با بازتخصیص. 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 در این خط در اینجا، کاراکتر C [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 از لحاظ تکنیکی به نام c، اما فقط یک بافر در برنامه نویسی به معنی یک دسته از فضا 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 و شما همیشه باید نمی توان رفتن به توسط غیر مرجع آن را با عملگر ستاره پوچ است. 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 و A و B، مانند صحبت کردن در مورد مبادله بود. 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]. >> [مالان] کاراکتر C [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 بسیار بالا وجود دارد C [0]، و پس از آن نویسنده از این نمودار 536 00:32:08,480 --> 00:32:11,850 را به زحمت نمی رسم مربع است، اما در واقع وجود دارد 12 537 00:32:11,850 --> 00:32:16,590 چرا که اگر شما در سمت راست پایین نگاه کنید، c [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 و این که C [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-BYTE؟ 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 که آیا این برنامه در خط فرمان و یا یک برنامه GUI و یا یک وب سایت، 597 00:35:58,200 --> 00:35:59,940 شما فقط ارائه مزخرف شروع می شود. 598 00:35:59,940 --> 00:36:03,980 شما در یک کلمه واقعا بزرگ را در قسمت جستجو وارد کنید و آمار را تایپ کنید، 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 ویندوز یا Mac OS شروع به پاک کردن فایل ها برای شما. 618 00:37:08,190 --> 00:37:10,390 اما اگر چیزی است که شما در آن وجود دارد را بکشید، که در تمام امن نیست. 619 00:37:10,390 --> 00:37:13,800 هم اتاقی یا دوستان و یا اعضای خانواده خود را به انجام دو برابر و کلیک کنید، voila، 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 و یا آنچه را که آنها شبیه به طوری که شما می توانید 0s و JPEG و 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]