[Powered by Google Translate] [هفته 5]
[دیوید J. مالان - دانشگاه هاروارد]
[این CS50 است. - CS50.TV]
>> این CS50، هفته 5 است.
امروز و این هفته، کمی از جهان پزشکی قانونی معرفی می کنیم
در چهار چوب از مشکل تنظیم 4.
امروز یک سخنرانی به صورت مختصر به دلیل یک رویداد خاص در اینجا وجود دارد بعد از آن است.
بنابراین خواهیم زیرچشمی نگاه کردن و اذیت دانش آموزان و پدر و مادر به طور یکسان امروز
با برخی از چیزهایی که در افق هستند.
>> در میان آنها، روز دوشنبه، چند همکلاسی را داشته باشد.
EDX، دانشگاه هاروارد و MIT طرح آنلاین آموزشی و بیشتر،
در حال راه اندازی در دانشگاه هاروارد در روز دوشنبه، که به معنی دوشنبه
شما باید به عنوان آخرین شمارش، 86،000 همکلاسی های دیگر
خواهد شد که همراه با سخنرانی و بخش CS50
walkthroughs و مجموعه مشکل است.
و به عنوان بخشی از این، شما تبدیل خواهد شد اعضای کلاس افتتاحیه CS50 و در حال حاضر CS50x.
به عنوان بخشی از این در حال حاضر، این باور که وجود خواهد داشت و برخی از upsides به عنوان.
آماده شدن برای این کار، به تعداد گسترده ای از دانش آموزان،
کافی است برای گفتن که حتی اگر ما دارای 108 TFS و CA ها،
آن را کاملا بهترین نسبت دانش آموز به معلم نیست زمانی که ما به 80،000 از دانش آموزان است.
ما قصد داریم به درجه بندی مشکل بسیاری از مجموعه های دستی،
بنابراین این هفته در مجموعه ای مشکل خواهد بود CS50 ورود،
است که برای رفتن به یک ابزار خط فرمان در داخل دستگاه
که شما هنگامی که آن را به روز رسانی بعد از این آخر هفته.
شما قادر خواهید بود برای اجرای یک فرمان، check50، در pset خود را،
و شما بازخورد فوری را برای گرفتن اینکه آیا در برنامه های شما درست است یا نادرست
با توجه به مشخصات طراحی های مختلف که در حال حاضر ارائه شده است.
بیشتر در مورد این در مشخصات مجموعه مشکل است.
از همکلاسی CS50x خواهد شد با استفاده از این نیز هست.
>> مجموعه 4 مشکل است که همه چیز در مورد پزشکی قانونی،
و این pset واقعا برخی از مسائل در زندگی واقعی الهام گرفته شده بود.
به موجب آن زمانی که من در مدرسه فارغ التحصیل بود، در حالی که برای زندانی
با دفتر دادستان منطقه شهرستان میانه انجام کار قانونی
با محقق سرب قانونی خود.
چه این مبلغ، به عنوان من فکر می کنم ذکر چند هفته گذشته،
جرم پلیس امور خارجه و یا دیگران را در می آیند،
آنها را به رها کردن چیزهایی مثل سی دی ها و دیسک های سخت و فلاپی دیسک و مانند آن،
و پس از آن هدف از اداره پزشکی قانونی بود معلوم
آیا یا وجود دارد برخی از مرتب کردن بر اساس شواهد نیست.
واحد تحقیقات ویژه بود، پس از آن جرم یقه سفید بود.
مرتب سازی بر نگران کننده تر از جنایات، هر چیزی که مربوط به نوعی از رسانه های دیجیتال بود.
به نظر می رسد که هنوز بسیاری از مردم ارسال یک ایمیل به گفت: "من این کار را کرد."
بنابراین اغلب، این جستجوها قانونی روشن نیست که میوه بسیار،
اما گاهی اوقات مردم به ایمیل مانند ارسال.
بنابراین گاهی اوقات، تلاش به پاداش باشد.
>> اما منجر به این pset قانونی خواهیم به معرفی در pset4 کمی از کارت گرافیک است.
شما احتمالا این چیزها برای اعطا - عکس JPEG شماره، و مانند آن - این روز است.
اما اگر شما واقعا در مورد آن فکر می کنم، تصویر، بسیار شبیه به چهره راب،
می تواند به عنوان دنباله ای از نقاط یا پیکسل های مدل شده است.
در مورد چهره راب، تمام انواع رنگ وجود دارد،
و ما شروع به دیدن نقاط منحصر به فرد، که در غیر این صورت به عنوان پیکسل شناخته می شود،
زمانی که ما شروع به زوم شوید.
اما اگر ما ساده کمی و فقط می گویند که این راب در سیاه و سفید،
به نمایندگی از سیاه و سفید است، ما فقط می تواند باینری استفاده کنید.
و اگر ما قصد استفاده از باینری، 0 یا 1، ما می توانیم این تصویر بیان
چهره خندان راب با این الگوی بیت.
11000011 نشان دهنده سفید، سفید، سیاه و سفید، سیاه و سفید، سیاه و سفید، سیاه و سفید، سفید، سفید است.
و پس از آن یک جهش بزرگ است نه پس از آن شروع به صحبت کردن در مورد عکس های رنگارنگ،
چیزهایی که شما می خواهم در فیس بوک را مشاهده کنید و یا گرفتن با یک دوربین دیجیتال است.
اما مطمئنا هنگامی که آن را به رنگ می آید، شما نیاز بیت بیشتر است.
و کاملا رایج در جهان عکس است، برای استفاده از 1-بیت رنگ،
این نشان می دهد، اما 24 بیت رنگ، که در آن شما در واقع میلیون ها از رنگ.
همانگونه که در مورد زمانی که ما در چشم راب زوم،
که هر تعداد از میلیون ها نفر از امکانات مختلف رنگارنگ بود.
بنابراین ما این کار را در مجموعه مشکل 4 و همچنین در walkthrough،
خواهد شد که امروز به دلیل سخنرانی در روز جمعه در ساعت 3:30 به جای 2:30 معمول است.
اما فیلم آنلاین خواهد بود فردا معمول است.
>> ما همچنین می خواهیم شما را به فرمت فایل دیگری معرفی نماید.
این است که عمدا در ابتدا به منظور نگاه تهدید آمیز،
اما این فقط برخی از اسناد و مدارک برای یک ساختار C است.
به نظر می رسد که مایکروسافت سال پیش به پسند عامه این قالب
نام فرمت فایل بیت مپ، BMP، و این فوق العاده ساده، رنگارنگ فرمت فایل های گرافیکی
که برای مدتی مورد استفاده قرار گرفت و هنوز هم گاهی اوقات برای تصاویر پس زمینه بر روی دسکتاپ.
اگر شما فکر می کنم بازگشت به ویندوز XP و تپه و آسمان آبی،
بود که به طور معمول BMP یا تصویر بیت مپ است.
مپ سرگرم کننده برای ما هستند زیرا آنها به پیچیدگی کمی بیشتر است.
این نه کاملا به عنوان ساده به عنوان این شبکه از 0s و 1S.
در عوض، شما باید چیزهایی مثل هدر در آغاز از یک فایل است.
بنابراین به عبارت دیگر، در داخل یک فایل BMP کل یک دسته از 0s و 1S،
اما برخی از 0s و اضافی و 1S در آنجا وجود دارد.
و معلوم است که آنچه که ما احتمالا گرفته شده برای سال اعطا -
فرمت های فایل مانند توضیحات. XLS. MP3، MP4، هر فرمت فایل
که شما با آن آشنا هستید - چه آن را حتی فرمت فایل را به معنی،
چرا که در پایان روز از همه از این فایل ها استفاده کنید فقط 0s و 1S.
و شاید کسانی که 0s و 1S نمایندگی ABC از طریق ASCII و یا مانند،
اما در پایان روز، آن را هنوز هم فقط 0s و 1S است.
بنابراین انسان گاهی اوقات فقط یک قالب فایل جدید را اختراع تصمیم گیری
جایی که آنها استاندارد چه الگوهای بیت در واقع به این معنی است.
و در این مورد در اینجا، مردمی که طراحی شده فرمت فایل های بیت مپ
گفت که در بایت اول در یک فایل بیت مپ، به عنوان توسط 0 افست وجود دارد نشان داده شده،
است که قصد دارد به برخی از cryptically نام متغیر به نام bfType،
که فقط برای نوع فایل بیت مپ می ایستد، چه نوع از فایل های بیت مپ این است.
شما شاید می تواند استنباط از ردیف دوم که جبران 2، تعداد بایت 2،
الگوی و از 0s و 1S که نشان دهنده چه؟ اندازه چیزی است.
و آن را از آنجا می رود.
بنابراین در مجموعه مشکل 4، شما را از طریق برخی از این چیزها راه می رفت.
ما به پایان خواهد رسید تا مراقبت در مورد همه آنها.
اما متوجه آن شروع به گرفتن جالب در سراسر بایت 54: rgbtBlue، سبز و قرمز است.
اگر تا کنون شنیده مخفف RGB - قرمز، سبز، آبی - این یک اشاره به آن است
زیرا که معلوم است شما می توانید تمام رنگ های رنگین کمان رنگ
با ترکیبی از رنگ های قرمز و آبی و سبز است.
و در واقع، پدر و مادر در اتاق برخی از قدیمیترین پروژکتور به یاد.
این روز، شما فقط یک نور درخشان بیرون آمدن از یک لنز را ببینید،
اما در روز شما تا به حال لنز قرمز، لنز آبی، و لنز سبز
و با هم آنها را در یک صفحه نمایش با هدف و با تشکیل یک تصویر رنگارنگ است.
و اغلب، مدارس راهنمایی و دبیرستان کسانی که لنز دارند
همیشه تا کمی چپ چپ نگاه، بنابراین شما مرتب کردن بر اساس دیدن تصاویر دو یا سه برابر شد.
اما این ایده بود. شما تا به حال با نور قرمز و سبز و آبی رنگ آمیزی یک تصویر است.
و این اصل همان است که در کامپیوتر استفاده می شود.
>> بنابراین در میان چالش های پس از آن را برای شما در مسئله تنظیم 4 هستند برای رفتن به چند چیز است.
یکی این است که در واقع تغییر اندازه یک تصویر را در یک الگوی از 0s و 1S،
کشف کردن که تکه های از 0s و 1S چه در یک ساختار شبیه به این نشان،
و پس از آن شکل چگونه به تکرار پیکسل - قرمز، بلوز، سبزها -
در داخل به طوری که زمانی که یک تصویر به نظر می رسد شبیه به این در ابتدا،
آن ممکن است شبیه به این به جای پس از آن است.
از جمله چالش های دیگر بیش از حد خواهد بود که شما یک تصویر پزشکی قانونی تحویل داده می شود
از فایل واقعی را از یک دوربین دیجیتال است.
و در آن دوربین، یک بار پس از یک زمان بودند، یک دسته از عکس ها.
مشکل این است که ما به طور تصادفی پاک شده و یا تا به حال تصویر خراب شده به نحوی است.
چیزهای بد با دوربینهای دیجیتال رخ می دهد.
و بنابراین ما به سرعت کپی کردن که کارت 0s و 1S برای شما
همه آنها را در یک فایل بزرگ ذخیره می شود، و سپس ما آنها را به مشکل شما در دست تنظیم 4
به طوری که شما می توانید یک برنامه را که با آن در C برای بازیابی تمام از آن عکس JPEG، نوشتن در حالت ایده آل است.
و معلوم است که عکس JPEG، حتی اگر آنها تا حدودی از فرمت فایل های پیچیده -
آنها بسیار پیچیده تر از این چهره خندان در اینجا -
به نظر می رسد که هر JPEG با الگوهای مشابه از 0s و 1S شروع می شود.
بنابراین با استفاده از، در نهایت، در حالی که حلقه و یا یک برای حلقه یا مشابه،
شما می توانید بیش از همه 0s و 1S در این تصویر پزشکی قانونی تکرار،
و هر بار که شما الگوی خاص که تعریف شده در مشخصات مجموعه مشکل،
شما در اینجا می توانید فرض است، با احتمال بسیار بالا، شروع از JPEG است.
و به محض این که شما همان الگوی برخی از تعدادی از کلمه در ادامه متن
یا کیلوبایت یا مگابایت بعد، شما در اینجا می توانید فرض JPEG دوم این است که،
عکس من بعد از یکی از اولین صورت گرفت.
اجازه دهید من دست از خواندن آن فایل اول، شروع به نوشتن این یکی جدید،
و خروجی برنامه شما برای pset4 به عنوان بسیاری از 50 عکس JPEG است.
و اگر آن را به 50 عکس JPEG یا نه، شما باید کمی از یک حلقه است.
اگر شما یک تعداد نامحدود از عکس JPEG، شما باید یک حلقه بی نهایت است.
به طوری که بیش از حد خواهد شد یک مورد کاملا رایج است.
به طوری که آنچه در افق.
>> امتحان 0 پشت سر ما، در هر ایمیل من متوجه است که همواره وجود دارد مردمی که هر دو شاد هستند،
مرتب کردن بر اساس خنثی، و غمگین در سراسر مسابقه 0 بار.
لطفا رسیدن به من، سر TF Zamyla، TF خود را،
یا یکی از CAS که شما می دانید اگر شما می خواهم به بحث در مورد این که چه کارهایی رفت.
>> بنابراین برای تحت تاثیر قرار دادن پدر و مادر، در اتاق، کتابخانه CS50؟
[خنده] کار خوب است.
کتابخانه CS50 چه خبر؟ آره. >> [دانشجو] این یک مجموعه ای از پیش نوشته شده است از کد [نامفهوم]
خوب، خوب است.
این یک مجموعه ای از پیش نوشته شده از کد که ما کارکنان نوشت، ما به شما ارائه
فراهم می کند که برخی از قابلیت های مشترک،
چیزهای مثل من یک رشته، من از نوع int - از توابع که در اینجا ذکر شده است.
>> شروع در حال حاضر، ما شروع به گرفتن این چرخ آموزش.
ما قصد داریم برای شروع را به دور یک رشته از شما،
که فراخوان فقط یک مترادف و برای چه نوع داده های واقعی بود؟ >> [متعدد] دانشجویان کاراکتر *.
* کاراکتر باشد. برای پدر و مادر بود، که احتمالا باعث می شود whooshing صدا]. این خوب است.
* چار خواهیم شروع به بر روی صفحه نمایش همه بیشتر را به عنوان رشته ای از واژگان ما حذف،
حداقل زمانی که آن را در واقع به نوشتن کد می آید.
به همین ترتیب، ما باید با استفاده از برخی از این توابع به همان اندازه
زیرا برنامه های ما در حال رفتن به پیچیده تر است.
به جای اینکه فقط برنامه هایی که نشستن وجود دارد با یک چشمک زدن اعلان ارسال،
انتظار برای کاربر به تایپ چیزی در شما ورودی خود را از جای دیگری دریافت کنید.
به عنوان مثال، شما می خواهید آنها را از یک سری از بیت ها بر روی دیسک سخت محلی دریافت کنید.
به جای آن شما می خواهید آنها را در آینده از اتصال به شبکه،
برخی از وب سایت خود را در جایی.
>> بنابراین پوست به عقب این لایه برای اولین بار اجازه بدهید و بکشید تا لوازم خانگی CS50
و این فایل به نام cs50.h، که به شما شده است # برای هفته ها از جمله:
اما اجازه دهید در واقع ببینیم که چه چیزی در داخل این.
بالا از فایل به رنگ آبی است فقط یک دسته کل نظرات:
اطلاعات مربوط به ضمانت نامه و مجوز.
مرتب کردن بر اساس یک الگوی مشترک در نرم افزار
چرا که بسیاری از نرم افزار این روزها چیزی است که به نام منبع باز،
که بدان معنی است که کسی نوشته است کد ساخته شده و آن را آزادانه در دسترس
نه فقط برای اجرا و استفاده کنید، اما در واقع به خواندن و تغییر و ادغام کار خود را.
به طوری که آنچه شما با استفاده از نرم افزار منبع باز، البته در یک فرم بسیار کوچک است.
اگر من حرکت پایین گذشته به نظر، هر چند، ما شروع به دیدن برخی از چیزهایی بیشتر آشنا.
مقررات در بالا که فایل cs50.h شامل یک دسته کامل از فایل های هدر.
بیشتر از این، ما را دیده اند، نه قبل از، اما یکی از آشنا است.
کدام یک از این ما دیده می شود، البته به طور خلاصه، تا کنون؟ >> [دانشجو] کتابخانه استاندارد.
آره، کتابخانه استاندارد. stdlib.h malloc.
زمانی که ما شروع به صحبت کردن در مورد تخصیص حافظه پویا،
کنیم که دوباره به هفته آینده و همچنین، ما از جمله این که فایل آغاز شده است.
به نظر می رسد که بولی و درست و نادرست را در C و در هر سه در واقع وجود ندارد
مگر اینکه شما این فایل اینجا کلیک کنید.
ما برای هفته ها از جمله stdbool.h
به طوری که شما می توانید مفهوم بولی، درست یا غلط استفاده
بدون این، شما را مجبور به جعلی آن مرتب سازی و استفاده از نوع int
و فقط خودسرانه فرض که 0 نادرست است و 1 درست است.
اگر ما در پایین حرکت علاوه بر این، در اینجا تعریف ما از یک رشته است.
به نظر می رسد، همانطور که قبلا گفته شد، که در جایی که این ستاره واقعا مهم نیست.
شما حتی می توانید از فضای در سراسر داشته باشد.
ما این ترم شده اند آن را ترویج به عنوان این را به روشن
که ستاره را با توجه به نوع انجام این کار،
اما درک فقط به عنوان مشترک اگر یک کمی بیشتر رایج است،
این است که آن را قرار داده وجود دارد، اما عملکرد آن همان چیزی است.
اما در حال حاضر اگر ما به خواندن علاوه بر این، اجازه دهید یک نگاهی به GetInt
از آنجا که ما که شاید برای اولین بار قبل از هر چیز دیگری از این ترم استفاده می شود.
اینجا است GetInt. این چیست؟ >> [دانشجو] نمونه. >> این فقط یک نمونه است.
اغلب، ما نمونه های اولیه در تاپس از ما قرار داده است. فایل های C،
اما شما همچنین می توانید نمونه در فایل های سرآیند، فایل های ساعت، مانند این یکی در اینجا قرار دهید
به طوری که زمانی که تو می نویسم برخی از توابع است که شما می خواهید دیگران قادر به استفاده از،
است که دقیقا با کتابخانه CS50،
شما نه تنها پیاده سازی توابع خود را در چیزی شبیه به cs50.c،
همچنین شما می توانید از نمونه های نه در بالا که فایل بالا یک فایل هدر قرار داده است.
پس از آن که فایل هدر همان چیزی است که دوستان و همکارانش شامل
# در کد خود باشد.
بنابراین تمام این مدت، شما بوده ام از جمله همه از این نمونه های اولیه،
موثر در بالا فایل های خود را از طریق این # شامل مکانیزم،
که در اصل نسخه ها و چسب ها به این فایل را به را آن گونه که مایلید تغییر دهید.
در اینجا برخی از اسناد را نسبتا دقیق است.
ما تا حد زیادی گرفته شده برای اعطا که GetInt می شود از نوع int،
اما معلوم برخی از موارد گوشه ای وجود دارد.
چه می شود در صورتی که کاربر در یک شماره است که راه بیش از حد بزرگ است، عدد یک با 18 صفر بتوان 2
که نه تنها می توانند به راحتی در داخل یک int؟ رفتار مورد انتظار به چه صورت است؟
در حالت ایده آل، آن را قابل پیش بینی است.
بنابراین در این حالت، اگر شما در واقع نسخه قابل چاپ خوب به عنوان خوانده شده
در واقع شما می خواهید که اگر خط را نمی تواند بخواند، این INT_MAX بازده را ببینید.
ما هرگز در این مورد صحبت کردیم، اما در سرمایه گذاری های خود را بر اساس آنچه در آن است احتمالا؟
[دانشجو] ثابت است. >> آن ثابت است.
برخی از ثابت های ویژه ای است که احتمالا در یکی از فایل های سرآیند آن اعلام
که بالاتر در فایل، و INT_MAX است که احتمالا چیزی در حدود 2 میلیارد،
این ایده که چون ما باید به نحوی نشان که چیزی را اشتباه رفت.
ما، بله، 4 میلیارد شماره در اختیار ما: -2 میلیارد در بالا به 2 میلیارد دلار، دادن یا گرفتن.
خب، چه در برنامه نویسی مشترک است این است که شما سرقت تنها یکی از آن اعداد،
شاید 0، شاید 2 میلیارد، شاید -2 میلیارد،
بنابراین شما صرف یکی از مقادیر ممکن خود را به طوری که شما می توانید به جهان متعهد
که اگر چیزی را اشتباه می رود، من به این مقدار فوق العاده بزرگ بازگشت.
اما شما نمی خواهید که کاربر تایپ کردن چیزی مرموز مانند 234 ...، واقعا بزرگ است.
آن را تعمیم به جای آن شما به عنوان یک ثابت است.
پس در واقع، اگر شما از مقعد چند هفته گذشته، هر زمان که شما به نام GetInt
شما باید چک کردن با شرط نوع کاربر در INT_MAX انجام،
، یا دقیق تر، آیا بازگشت GetInt INT_MAX، زیرا اگر این کار را کرد،
که در واقع این بدان معنی است که آنها آن را نه از نوع. چیزی در این مورد اشتباه رفت.
پس این همان چیزی است که به طور کلی به عنوان ارزش نگهبان، که به معنی خاص شناخته شده است.
>> اجازه دهید در حال حاضر تبدیل به فایل C.
فایل C در دستگاه برای برخی از زمان وجود داشته است.
و در واقع، دستگاه آن از قبل وارد شده را برای شما به آن چیزی که ما به نام کد شیء،
اما آن را فقط به شما مهم نیست که در آن به این دلیل است که این سیستم می داند
در این صورت است که در آن: لوازم خانگی.
بیایید پایین حرکت در حال حاضر به GetInt و ببینید که چگونه GetInt کار کرده است تمام این مدت.
در اینجا ما نظرات مشابه از قبل است.
اجازه بدهید من زوم در فقط بخش کد.
و آنچه ما برای GetInt به شرح زیر است.
این طول می کشد هیچ ورودی.
این تابع از نوع int است، در حالی که (واقعیت)، بنابراین ما باید یک حلقه بی نهایت عمدی،
اما احتمالا خواهیم شکستن از این به نحوی یا بازگشت از درون.
>> بیایید ببینید که چگونه این کار است.
ما به نظر می رسد با استفاده از GetString در این خط برای اولین بار در داخل حلقه، 166.
این تمرین خوبی است زیرا تحت چه شرایطی می تواند GetString بازگشت
NULL کلمه کلیدی خاص؟ >> [دانشجو] اگر چیزی را اشتباه می رود.
اگر چیزی می رود اشتباه است. و چه می تواند زمانی که شما به چیزی شبیه به GetString؟
آره. >> [دانشجو] Malloc نتواند به آن نوع داده int می دهد.
آره. شاید malloc نتواند.
جایی در زیر هود، GetString خواستار malloc، که اختصاص حافظه،
که به شما اجازه می دهد فروشگاه کامپیوتر همه شخصیت ها
که نوع کاربر را به صفحه کلید است.
و فرض کنید که کاربر تا به حال تعداد زیادی از وقت آزاد و تایپ بیشتر، به عنوان مثال،
از 2 میلیارد کاراکتر، شخصیت بیش از کامپیوتر حتی به RAM است.
GetString قادر به معنی که به شما می شود.
حتی در صورتی که این فوق العاده، فوق العاده مورد گوشه ای غیر معمول است،
آن را به نحوی قادر به تحمل این،
و به همین ترتیب GetString، اگر ما رفت و برگشت و خواندن مستندات خود را می کند در واقع بازگشت NULL است.
بنابراین در حال حاضر اگر GetString نتواند با بازگشت NULL، GetInt رفتن به با بازگشت INT_MAX شکست
فقط به عنوان یک نگهبان. این، فقط کنوانسیون انسان.
تنها راهی که شما می دانید که این مورد است که با خواندن مستندات می باشد.
>> بیایید حرکت به پایین که در آن بین المللی است که در واقع بدست.
اگر من در پایین حرکت کمی بیشتر، در خط 170، ما باید نظر بالاتر از این خطوط است.
ما در 172 اعلام یک int، n، و کاراکتر، C، و سپس این عملکرد جدید،
که برخی از شما در سراسر قبل، sscanf کردم.
این مخفف scanf رشته است.
به عبارت دیگر، من یک رشته بدهد و من آن را برای قطعه از اطلاعات مورد علاقه اسکن.
به چه معنا است؟
فرض کنید که من در صفحه کلید، به معنای واقعی کلمه، 123 را تایپ کنید و سپس Enter را فشار دهید.
چه نوع داده از 123 GetString بازگشته است؟ >> [دانشجو] رشته.
این بدیهی است که یک رشته است، درست است؟ من یک رشته است.
پس 123 در واقع، نقل قول، نقل قول را تمام کردن، 123 با 0 \ در انتهای آن است.
که بین المللی نیست. که تعداد زیادی نیست. آن را مثل یک عدد به نظر می رسد اما در واقع نیست.
پس چه GetInt باید کاری انجام دهید؟
برای اسکن این رشته از چپ به راست - 123 \ 0 - و به نوعی تبدیل به یک عدد صحیح واقعی است.
شما می توانید بفهمند که چگونه به انجام این کار.
اگر شما فکر می کنم به pset2، شما احتمالا کمی با سزار راحت
یا Vigenere، به طوری که شما می توانید بیش از یک رشته تکرار، شما می توانید کاراکتر ها را به نوع داده int تبدیل کنید.
اما هک، زیادی از کار است.
چرا یک تابع مانند sscanf که این کار را برای شما تماس نمی گیرم؟
بنابراین sscanf انتظار استدلال - در این مورد به نام خط است، که یک رشته است.
بعد از آن شما در نقل قول را مشخص کنید، بسیار شبیه به printf، آنچه شما انتظار دارند که در این رشته را مشاهده کنید.
و آنچه من در اینجا گفت این است که از من انتظار برای دیدن یک عدد دهدهی و شاید یک شخصیت.
و خواهیم دید چرا که این مورد فقط در یک لحظه است.
و معلوم است که این نماد در حال حاضر از مسائل یادآور ما شروع به صحبت کردن در مورد
فقط بیش از یک هفته پیش.
چیست & N و & C کار را برای ما در اینجا؟ >> [دانشجو] آدرس و آدرس ج.
آره. این به من آدرس از N و آدرس C است. این است که چرا مهم است؟
شما می دانید که با توابع در C، شما همیشه می توانید یک مقدار را برگرداند و یا هیچ ارزش در همه.
شما می توانید بین المللی، یک رشته، شناور، یک کاراکتر، هر چیز دیگری، و یا شما می توانید از درجه اعتبار ساقط بازگشت بازگشت،
اما شما تنها می توانید یک چیز را به حداکثر بازگشت.
اما در اینجا ما می خواهیم sscanf به من بازگشت شاید هوشمند، یک عدد دهدهی،
و همچنین یک کاراکتر است، و من چرا کاراکتر را در یک لحظه را توضیح دهد.
شما به طور موثر می خواهید sscanf به بازگشت دو چیز است، اما این فقط در C. امکان پذیر نیست
شما می توانید در اطراف آن کار شده توسط عبور در دو آدرس
زیرا به محض این که شما دست یک تابع دو آدرس،
چه می توانید این تابع با آنها کاری انجام دهید؟ >> [دانشجو] به این آدرس است.
این می تواند به این آدرس ارسال.
شما می توانید عملیات ستاره و رفتن وجود دارد، به هر یک از این آدرس ها استفاده کنید.
این مرتب کردن بر اساس این مکانیزم پشت درب است، اما بسیار معمول است برای تغییر ارزش های متغیر
بیش از فقط یک مکان - در این مورد، دو.
در حال حاضر من دارم == 1 و پس از آن بازگشت N در صورتی که می کند، در واقع، درست ارزیابی اطلاع می دهد.
پس چه اتفاقی افتاده؟ با مشخصات فنی، ما واقعا می خواهید به در GetInt اتفاق می افتد این است.
ما می خواهیم به تجزیه، پس به صحبت می کنند، ما می خواهیم به خواندن رشته - نقل قول، نقل قول را تمام کردن 123 -
و اگر به نظر می رسد که وجود دارد، چیزی است که ما در حال گفتن sscanf به انجام وجود دارد
123 - - در این متغیر N برای من این است که تعداد قرار داده است.
بنابراین پس چرا من در واقع این عنوان به خوبی؟
نقش sscanf گفت: شما همچنین ممکن است یک شخصیت در اینجا چیست؟
[پاسخ دانش آموز نامفهوم] >> نقطه اعشار در واقع می تواند کار کند.
بیایید نگه دارید که فکر می کردم برای یک لحظه. چه چیز دیگری؟
[دانشجو] آن را می تواند تهی باشد. >> تفکر خوب است. این می تواند شخصیت تهی است.
در واقع در این مورد نیست. آره. >> [دانشجو] ASCII.
ASCII. یا به من اجازه تعمیم و حتی بیشتر.
٪ C وجود دارد فقط برای چک کردن خطا.
ما نمی خواهیم یک شخصیت وجود دارد پس از تعداد،
اما این به من اجازه می دهد برای انجام این کار به شرح زیر است.
به نظر می رسد که sscanf، علاوه بر ذخیره کردن مقادیر در N و C در این مثال در اینجا،
آنچه که آن را نیز انجام می دهد، آن را برمی گرداند تعدادی از متغیرهای آن را قرار داده ارزش شوید.
بنابراین اگر شما فقط در 123 تایپ کنید، پس از آن تنها د٪ در حال رفتن به مسابقه،
و تنها N می شود با ارزش مانند 123 ذخیره شده،
و هیچ چیز در C قرار داده می شود.
C یک مقدار زباله باقی می ماند، پس به صحبت می کنند -
زباله ها به دلیل آن را به برخی از ارزش هرگز مقداردهی اولیه شده است.
بنابراین در این مورد، sscanf مقدار 1 به خاطر من جمعیت 1 از آن اشاره گرها،
که در آن صورت بزرگ، من از نوع int، بنابراین من آزاد خط را به آزاد کردن حافظه
که در واقع GetString اختصاص داده شده، و سپس N بازگشت من،
دیگری اگر شما همیشه تعجب که در آن است که سعی مجدد بیانیه می آید از، آن را از حق در اینجا می آید.
بنابراین اگر، در مقابل، من در 123foo نوع - فقط برخی از دنباله تصادفی از متن -
sscanf در حال رفتن به دیدن شماره، شماره، شماره، F،
و آن را برای قرار دادن 123 در N و آن را برای قرار دادن F در C و پس از آن بازگشت 2.
بنابراین ما باید، فقط با استفاده از تعریف اساسی از رفتار sscanf، یک راه بسیار ساده -
خوب، در نگاه اول، اما در پایان روز نسبتا ساده مکانیسم های پیچیده -
از گفتن بین المللی وجود دارد و اگر چنین است، که تنها چیزی که من پیدا کردم؟
و فضای خالی در اینجا این است آگاهانه.
اگر شما خواندن مستندات sscanf، آن را به شما می گوید که اگر شما یک تکه فضای سفید
در آغاز یا پایان، sscanf بیش از حد به کاربر، اجازه می دهد به هر دلیلی،
ضربه نوار فضا 123 و خواهد بود که مشروع باشد.
شما نمی خواهد به داد کاربر را فقط به خاطر اینکه آنها ضربه نوار فضا
در شروع یا پایان، که فقط یک کمی کاربر پسند تر شده است.
>> هر گونه سؤال و سپس در GetInt؟ آره. >> [دانشجو] چه می شود اگر شما فقط در یک کاراکتر قرار داده است؟
خوب سوال.
چه می شود اگر شما فقط در یک کاراکتر مثل F تایپ و Enter را فشار دهید تا کنون که بدون تایپ کردن 123؟
شما چه فکر میکنید رفتار این خط از کد پس از آن خواهد بود؟
[پاسخ دانش آموز نامفهوم]
آره، پس sscanf می تواند پوشش که بیش از حد چرا که در آن صورت، آن را نمی خواهید برای پر کردن N یا C است.
این که به جای بازگشت 0، که در این صورت من هم در ابتلا به این سناریو
به این دلیل که ارزش انتظار می رود من می خواهم 1 است.
من فقط می خواهم یک و تنها یک چیز را به پر شود. خوب سوال.
>> دیگران؟ بسیار خوب.
>> رفتن را از طریق تمام توابع در اینجا نیست،
اما این یکی که به نظر می رسد شاید از علاقه باقی مانده است GetString
زیرا به نظر می رسد که GetFloat، GetInt، GetDouble، GetLongLong
تمام میفرستتون بسیاری از قابلیت های خود را به GetString.
نگاهی که او چگونه پیاده سازی شده است به شما اجازه می دهد تا.
این یکی به نظر می رسد کمی پیچیده است، اما آن را با استفاده از اصول مشابه
که ما شروع به صحبت کردن در مورد در هفته گذشته است.
در GetString، که طول می کشد هیچ استدلال همانطور که در خلاء بالا در اینجا
و آن را یک رشته را بر می گرداند، من به ظاهر اعلام یک رشته به نام بافر.
من واقعا نمی دانند که آنچه را که برای هنوز مورد استفاده قرار گیرد، اما خواهیم دید.
به نظر می رسد ظرفیت به طور پیش فرض 0 است.
هنوز مطمئن شوید که کاملا که در آن این است که رفتن، مطمئن n است که باید برای استفاده می شود در عین حال،
اما در حال حاضر آن را کمی بیشتر جالب است.
در خط 243، هوشمند، C را ما اعلام می کنیم.
این نوع از جزئیات احمقانه است.
کاراکتر 8 بیت و 8 بیت می تواند که چگونه بسیاری از ارزش های مختلف را ذخیره؟ >> [دانشجو] 256. >> 256.
مشکل این است که اگر شما می خواهید به 256 حالت مختلف کاراکتر ASCII است، که وجود دارد
اگر شما فکر می کنم - و این چیزی است که به خاطر سپردن است.
اما اگر شما فکر می کنم که به نمودار ASCII بزرگ ما تا به حال هفته پیش،
در آن صورت 128 یا 256 کاراکتر ASCII وجود دارد.
ما با استفاده از همه الگوها و تا 0s و 1S.
این یک مشکل است اگر شما می خواهید می شود قادر به تشخیص خطا
چرا که اگر شما در حال حاضر با استفاده از 256 مقدار برای شخصیت شما،
شما واقعا نمی از پیش برنامه ریزی کنید، چون در حال حاضر شما هیچ راهی برای گفتن،
این است که یک شخصیت حلال نیست، این برخی از پیام اشتباه است.
پس چه دنیا بعدی بزرگترین ارزش، چیزی شبیه به یک int استفاده از آنها،
به طوری که شما یک عدد دیوانه از بیت، 32، 4 میلیارد مقادیر ممکن
به طوری که شما به سادگی می توانید تا پایان با استفاده از در اصل 257 از آنها،
1 از است که برخی از معنا و مفهوم خاصی را به عنوان یک خطا است.
>> پس ببینید که چگونه این کار را کنیم.
در خط 246، من در حالی که این حلقه بزرگ است که خواستار fgetc،
F به معنای فایل، بنابراین getc، و پس از آن STDIN.
به نظر می رسد این است که تنها راه دقیق تر گفت خواندن ورودی از صفحه کلید است.
استاندارد صفحه کلید وسیله ورودی، خروجی استاندارد به معنای صفحه نمایش،
و خطای استاندارد، که ما آن را در pset4، بدان معنی است که صفحه نمایش
اما یک بخش خاص از صفحه نمایش به طوری که آن را با خروجی واقعی تلفیق شدهاست
که شما در نظر گرفته شده برای چاپ. اما بیشتر در مورد آن در آینده است.
بنابراین fgetc فقط معنی است که خواندن یک کاراکتر از صفحه کلید و ذخیره آن جایی که؟
ذخیره آن در ج.
و سپس چک - پس من فقط با استفاده از برخی از ربط بولی در اینجا -
بررسی کنید که برابر نیست - \ N، به طوری که کاربر Enter را فشار دهید، ما می خواهیم که در آن نقطه متوقف،
پایان حلقه - و ما می خواهیم برای EOF ثابت ویژه را بررسی کنید،
که اگر شما می دانید و یا حدس می زنم، چه آن ایستاده؟ >> [دانشجو] انتهای فایل. پایان >> فایل.
این نوع از مزخرف چرا که اگر من تایپ کردن در صفحه کلید،
واقعا وجود دارد هیچ پرونده دخیل در این،
اما این فقط از اصطلاح عمومی استفاده می شود به معنی مرتب کردن بر اساس
که هیچ چیز دیگری در حال آمدن است از انگشتان دست انسان است.
EOF - انتهای فایل.
به عنوان یک کنار، اگر شما همیشه کنترل D در صفحه کلید خود را ضربه، که نه شما هنوز می -
شما ضربه کنترل C - D کنترل می فرستد این ثابت خاص به نام EOF.
بنابراین در حال حاضر ما فقط برخی از تخصیص حافظه پویا داشته باشد.
>> بنابراین اگر (n + 1> ظرفیت). حالا من N را توضیح دهد.
N است که فقط چند بایت در حال حاضر در بافر،
رشته ای که شما در حال حاضر ساخت تا از کاربر است.
اگر شما شخصیت های بیشتری را در بافر خود را از ظرفیت در بافر،
به طور مستقیم چیزی است که ما باید برای انجام آن تخصیص ظرفیت بیشتر است.
بنابراین من قصد دارم به کف برخی از حسابی در اینجا و تمرکز تنها بر روی این تابع در اینجا.
شما می دانید چه malloc است و یا حداقل به طور کلی آشنا هستند.
نگاهی حدس بزنید چه بازتخصیص کند. >> [دانشجو] می افزاید حافظه است.
این کاملا با اضافه کردن حافظه است. reallocates حافظه به شرح زیر است.
اگر هنوز هم وجود دارد اتاق در انتهای رشته به شما بیشتر از آن حافظه را
از این روش در اصل به شما می دهد، سپس شما که حافظه اضافی را دریافت کنید.
بنابراین شما می توانید با قرار دادن کاراکتر رشته را پشت به پشت به پشت به پشت نگه دارید.
اما در صورتی که این مورد نیست چون شما صبر کردم بیش از حد طولانی
و چیزی تصادفی plopped در حافظه به آنجا
اما حافظه اضافی را در اینجا وجود دارد، این درست است.
بازتخصیص رفتن به بلند کردن اجسام سنگین برای شما،
رشته شما در خواندن تا کنون از اینجا حرکت می کند، آن را به پایین وجود دارد،
و سپس شما را باند بیشتر در آن نقطه است.
>> بنابراین با یک موج از این دست، اجازه دهید به من می گویند که آنچه GetString در حال انجام
آن را با شروع از یک بافر کوچک، شاید یکی از شخصیت ها،
و در صورتی که کاربر در دو کاراکتر، GetString به پایان می رسد تا خواستار بازتخصیص و می گوید:
یکی از شخصیت ها کافی نبود، من دو کاراکتر را.
پس اگر شما را از طریق منطق از حلقه به عنوان خوانده شده، آن را برای گفتن
کاربر تایپ شده در 3 کاراکتر من را در حال حاضر نیست 2 اما 4 کاراکتر
سپس من را به 8، 16 و 32 را.
واقعیت این است که من دو برابر ظرفیت در هر زمان
این بدان معنی است که بافر است که قصد ندارم به آهستگی رشد می کند، آن را به رشد سریع فوق العاده است.
و آنچه که ممکن است استفاده از آن؟
چرا من دو برابر اندازه بافر
حتی اگر کاربر فقط ممکن است یک شخصیت اضافی از صفحه کلید نیاز دارید؟
[پاسخ دانش آموز نامفهوم] >> که؟ >> [دانشجو] شما لازم نیست که به رشد آن به عنوان اغلب.
دقیقا. شما لازم نیست که به رشد آن به عنوان اغلب.
و این تنها نوعی از شما در حال پرچینی شرط های خود را در اینجا،
این ایده که شما نمی خواهید بازتخصیص زیادی به تماس، زیرا این امر منجر به آهسته.
هر زمان که شما از سیستم عامل برای حافظه،
شما به زودی خواهید در یک مجموعه مشکل در آینده را مشاهده کنید، این امر منجر به برداشتن برخی از زمان.
بنابراین به حداقل رساندن این مقدار از زمان، حتی اگر شما در حال هدر رفتن مقداری از فضا را،
گرایش به یک چیز خوب است.
>> اما اگر ما از طریق قسمت نهایی GetString در اینجا به عنوان خوانده شده -
و دوباره درک هر خط در اینجا بسیار مهم است امروز -
توجه کنید که آن را در نهایت خواستار malloc دوباره
و آن را اختصاص دقیقا به عنوان بایت های بسیاری از آن را به عنوان رشته نیاز
و پس از آن خواستار آزاد در بافر بیش از حد بزرگ می اندازد دور
اگر آن را در واقع بیش از حد بسیاری از دو برابر شد.
بنابراین به طور خلاصه، این که چگونه GetString تمام این مدت کار کرده است.
همه آن کند است که یکی از شخصیت ها در یک زمان خواندن دوباره و دوباره و دوباره،
و هر وقت به آن نیاز دارد برخی از حافظه اضافی، آن را می پرسد که سیستم عامل آن
با تماس با بازتخصیص.
>> هر گونه سؤال؟ بسیار خوب.
>> حمله.
حالا که ما درک می کنیم اشاره گر و یا حداقل به طور فزاینده ای آشنا با اشاره گر،
اجازه دهید در نظر بگیرید چگونه تمام جهان شروع به سقوط
اگر شما در برابر کاربران خصمانه کاملا دفاع کند،
افرادی که در حال تلاش به سیستم شما هک،
افرادی که در حال تلاش برای سرقت نرم افزار خود را با دور زدن بعضی از کد ثبت نام
که در غیر این صورت ممکن است به تایپ شوید.
>> نگاهی به در این مثال در اینجا است که فقط کد C است که یک تابع اصلی در پایین
است که صنایع غذایی عملکرد می نامد. و آنچه در آن است به صنایع غذایی عبور؟
[دانشجوی] یک استدلال. >> [مالان] یک بحث.
پس ی argv [1]، که به معنی کلمه برای اولین بار است که کاربر را در خط فرمان تایپ
پس از a.out یا هر چیز دیگری از این برنامه گفته می شود.
بنابراین صنایع غذایی در بالا می * کاراکتر است. اما کاراکتر * فقط آنچه را؟ >> [دانشجو] رشته.
[مالان] رشته است، به طوری که هیچ چیز جدیدی در اینجا وجود دارد.
این رشته خودسرانه به نام نوار.
در این خط در اینجا، کاراکتر C [12] و در نوع نیمه فنی انگلیسی، آن چیزی است که این خط انجام شده است؟
[دانشجو] آرایه - آرایه >>؟ >> [دانشجو] کاراکترها. شخصیت. >>
مجموعه ای از 12 کاراکتر به من بده. بنابراین ما ممکن است این یک بافر است.
از لحاظ تکنیکی به نام c، اما فقط یک بافر در برنامه نویسی به معنی یک دسته از فضا
که شما می توانید برخی از مسائل وارد قرار داده است
سپس در نهایت، memcpy ایم قبل از استفاده نمی شود، اما شما احتمالا می توانید حدس بزنید چه آن را ندارد.
این نسخه حافظه است. چه کاری انجام میدهد؟
ظاهرا کپی نوار، ورودی خود را، به ج اما فقط تا طول نوار دارد.
اما یک اشکال اینجا وجود دارد. >> [دانشجوی] شما باید شخصیت sizeof است. >> درست است.
با مشخصات فنی، ما واقعا باید strlen (بار) * sizeof (کاراکتر)). این درست است.
اما در بدترین حالت، اجازه دهید فرض کنیم که that's -
باشه. سپس دو اشکالات وجود دارد.
بنابراین sizeof (کاراکتر))؛
بیایید این یک کمی گسترده تر است.
بنابراین در حال حاضر یک اشکال، که همان چیزی است که هنوز هم وجود دارد؟ >> [پاسخ دانش آموز نامفهوم]
بررسی کنید برای چه؟ >> [دانشجو] برای چک کردن NULL است.
ما به طور کلی باید بررسی شود و برای NULL چرا که همه چیز بد اتفاق می افتد
هنگامی که اشاره گر خود را NULL دلیل این که شما ممکن است در نهایت رفتن وجود دارد،
و شما همیشه باید نمی توان رفتن به توسط غیر مرجع آن را با عملگر ستاره پوچ است.
به طوری که خوب است. و چه چیز دیگری ما انجام شده است؟ منطقی، یک عیب وجود دارد در اینجا بیش از حد.
[دانشجو] بررسی اگر argc = تا 2.
بنابراین اگر argc = 2 را بررسی کنید. خوب، بنابراین سه اشکالات در این برنامه در اینجا وجود دارد.
ما در حال حاضر بررسی در صورتی که کاربر در واقع هر چیزی را به argv را تایپ [1]. خوب است.
پس چه اشکال سوم؟ آره. >> [دانشجو] C ممکن است به اندازه کافی بزرگ است.
خوب است. ما یک سناریو را بررسی کردیم.
ما به طور ضمنی به بررسی حافظه بیشتر از طول نوار تجاوز کپی نیست.
بنابراین اگر رشته کاربر تایپ شده در 10 کاراکتر است.
این می گوید فقط کپی 10 کاراکتر است. و این درست است.
اما چه می شود اگر کاربر در یک کلمه در سریع مانند یک کلمه 20 کاراکتر تایپ می شود؟
این است که گفت: نسخه 20 حرف از نوار به چه؟
C، در غیر این صورت به عنوان بافر ما شناخته شده است، که بدین معناست که شما فقط نوشت: اطلاعات
8 مکان بایت است که شما خود را ندارد،
و شما آنها را به این معنا است که شما به آنها اختصاص داده هرگز خود را ندارد.
پس این همان چیزی است که به طور کلی به عنوان حمله سرریز بافر و یا حمله به تاخت و تاز کردن بافر شناخته شده است.
و آن را حمله به این معنی است که در صورتی که کاربر یا برنامه ای است که فراخوانی تابع
در حال انجام این کار بدتر، آنچه در واقع اتفاق می افتد بعدی در واقع می تواند کاملا بد خواهد بود.
>> بنابراین یک نگاهی به این تصویر را در اینجا بگذارید.
این تصویر نشان دهنده پشته خود را از حافظه می باشد.
به یاد بیاورید که هر بار که شما به یک تابع، شما می توانید این قاب کمی در پشته
و پس از آن دیگر و پس از آن یکی دیگر و یکی دیگر.
و به این ترتیب تا کنون، ما فقط نوع انتزاعی به عنوان مستطیل
یا در هیئت مدیره و یا بر روی صفحه نمایش در اینجا.
اما اگر ما در یکی از این مستطیل، هنگامی که با شما تماس صنایع غذایی عملکرد زوم،
معلوم می شود که بیشتر در داخل پشته که از قاب وجود دارد که در مستطیل
از X و Y و A و B، مانند صحبت کردن در مورد مبادله بود.
به نظر می رسد که بعضی از جزئیات سطح پایین را در میان آنها وجود دارد، آدرس بازگشت.
بنابراین به نظر می رسد از زمانی که اصلی می نامد صنایع غذایی، اصلی است برای اطلاع رسانی به صنایع غذایی
که آدرس اصلی است که در حافظه کامپیوتر
چرا که در غیر این صورت، به زودی به عنوان صنایع غذایی انجام شده است اجرا، همانطور که در این مورد در اینجا،
یک بار شما در رسیدن به این زانوبند بسته فرفری در پایان از کفش،
چگونه هک می کند صنایع غذایی می دانم که در آن کنترل این برنامه قرار است به آن بروید؟
به نظر می رسد که پاسخ به این سوال است که در این مستطیل قرمز در اینجا.
این نشان دهنده یک اشاره گر است، و آن را به کامپیوتر به طور موقت ذخیره
در پشته به اصطلاح آدرس های اصلی به طوری که به زودی به عنوان صنایع غذایی انجام شده است اجرا
کامپیوتر می داند که در آن و چه در خط اصلی برای رفتن به.
ذخیره شده اشاره گر قاب مربوط به طور مشابه به این است.
چهار نوار * در اینجا نشان دهنده چه؟
در حال حاضر این بخش آبی قاب صنایع غذایی می باشد. نوار چیست؟
نوار آرگومان به تابع صنایع غذایی.
بنابراین در حال حاضر ما در مرتب کردن بر اساس تصویر آشنا است.
چیزهای بیشتر و بیشتر حواس او را پرت بر روی صفحه نمایش وجود دارد.
اما این بخش نور آبی رنگ تنها آن چیزی است که ما در حال کشیدن بر روی تخته سیاه
چیزی شبیه به مبادله. این قاب برای صنایع غذایی است.
و تنها چیزی که در آن در حال حاضر نوار این است که این پارامتر است.
اما چه چیز دیگری باید در پشته با توجه به این کد را در اینجا باشد؟
[دانشجوی] کاراکتر [12]. >> [مالان] کاراکتر C [12].
ما نیز باید از 12 مربع از حافظه اختصاص داده شده به یک متغیر به نام C
و در واقع ما را که بر روی صفحه نمایش.
بسیار بالا وجود دارد C [0]، و پس از آن نویسنده از این نمودار
را به زحمت نمی رسم مربع است، اما در واقع وجود دارد 12
چرا که اگر شما در سمت راست پایین نگاه کنید، c [11] اگر شما از 0 تعداد بایت 12th.
اما مشکل اینجا است.
که در آن C رو به رشد؟
مرتب کردن بر اساس بالا به پایین اگر آن را در بالا شروع می شود و به پایین افزایش می یابد.
این به نظر نمیرسد مثل ما به سمت چپ خودمان باند زیادی در اینجا در همه.
ما به نوعی خودمان را به گوشه نقاشی،
و این که C [11] مناسب است تا در برابر بار، که مناسب است تا در برابر اشاره گر قاب ذخیره شده،
که مناسب است تا در مقابل آدرس بازگشت. هیچ فضای بیشتری وجود دارد.
پس چه مفهوم و سپس اگر شما پیچ کردن
و شما سعی می کنید به خواندن 20 کلمه در ادامه متن را به یک بافر 12-BYTE؟
کجا هستند آن 8 بایت اضافی برای رفتن؟ >> [دانشجو] داخل -
در داخل هر چیز دیگری که برخی از آنها فوق العاده مهم است.
و مهم ترین چیز، به طور بالقوه، جعبه قرمز وجود دارد، آدرس بازگشت،
زیرا فرض کنید که شما هم به طور تصادفی و یا adversarially بازنویسی آن 4 بایت،
که آدرس اشاره گر، نه تنها با زباله اما با یک شماره
اتفاق می افتد که برای نشان دادن آدرس واقعی در حافظه است.
مفهوم، منطقی است؟ >> [دانشجوی] تابع برای بازگشت به مکان های مختلف است.
دقیقا.
هنگامی که بازده صنایع غذایی و بازدید که بریس فرفری، برنامه رفتن به ادامه
صفحه اصلی بازگشت، آن را به بازگشت به هر آدرس در آن جعبه قرمز است.
>> در مورد ثبت نام نرم افزار دور زدن،
اگر آدرس که در حال به بازگردانده تابع است که به طور معمول می شود به نام
پس از شما برای نرم افزار پرداخت می شود و کد ثبت نام خود را وارد کردهاید؟
شما می توانید از ترفند کامپیوتر را به قصد ندارم در اینجا مرتب کردن بر اساس، اما به جای بالا رفتن است.
و یا اگر شما واقعا باهوش، دشمن در واقع می تواند در در صفحه کلید تایپ کنید، برای مثال،
نه یک کلمه واقعی است، نه 20 حرف است، اما فرض کنید او در واقع نوع
برخی از شخصیت است که نشان دهنده کد.
و آن را به کد C نخواهد بود، این در واقع رفتن به شخصیت ها
که نشان دهنده کد ماشین باینری، 0s و 1S.
اما فرض کنید که آنها هوشمندانه به اندازه کافی برای انجام این کار،
به نوعی به چیزی GetString سریع است که اساسا وارد شده کد رب،
و 4 بایت آخر بازنویسی که آدرس بازگشت.
و چه آدرس می کند که ورودی انجام دهد؟
در واقع در این مستطیل قرمز رنگ آدرس اولین بایت از بافر فروشگاه ها.
بنابراین شما باید واقعا باهوش است، و این است که بسیاری از آزمایش و خطا برای افراد بد در خارج وجود دارد،
اما اگر شما می توانید از شکل چقدر بزرگ این بافر
به طوری که آخرین کلمه در ادامه متن چند در ورودی شما به برنامه ارائه
اتفاق می افتد به معادل به آدرس شروع از بافر خود را، شما می توانید این کار را انجام دهند.
اگر ما می گویند به طور معمول با سلام و \ 0، این چیزی است که به پایان می رسد تا در بافر است.
اما اگر ما باهوش و ما با آنچه که ما عموما خواهید تماس بگیرید کد حمله را پر کنید که بافر -
AAA، حمله، حمله، حمله - که در آن این است که تنها چیزی که کاری بد،
چه اتفاقی می افتد اگر شما واقعا باهوش، شما ممکن است این کار را انجام دهند.
در جعبه قرمز است یک دنباله از اعداد - 80، C0، 35، 08 می باشد.
توجه داشته باشید که که منطبق شماره که تا اینجا.
آن را در جهت معکوس است، اما بیشتر در مورد که برخی از زمان های دیگر است.
توجه کنید که این آدرس بازگشت عمدا تغییر داده شده است
را برابر آدرس در اینجا، نه آدرس اصلی.
بنابراین اگر پسر بد هوشمند فوق العاده است، او در حال رفتن به در کد حمله که عبارتند از:
چیزی شبیه به حذف تمام فایل های کاربر و یا کپی کردن کلمه عبور
و یا ایجاد یک حساب کاربری که من پس از آن می توانید وارد شوید به - هر چیزی در همه.
>> و این هم خطر و قدرت از C.
از آنجا که شما باید دسترسی به حافظه از طریق اشاره گر
و بنابراین شما می توانید هر چیزی که شما می خواهید را در حافظه یک کامپیوتر ارسال
شما می توانید یک کامپیوتر انجام دهید، هر چیزی که شما می خواهید
به سادگی با داشتن پرش در اطراف آن در فضای حافظه خود را.
و تا به این روز بسیاری از برنامه ها و بسیاری از وب سایت ها هستند که در معرض خطر
جوش پایین به مردم با استفاده از این.
و این ممکن است مانند یک حمله فوق العاده پیچیده به نظر می رسد، اما این همیشه شروع که راه نیست.
واقعیت این است که چه بد از مردم به طور معمول را انجام خواهد داد،
که آیا این برنامه در خط فرمان و یا یک برنامه GUI و یا یک وب سایت،
شما فقط ارائه مزخرف شروع می شود.
شما در یک کلمه واقعا بزرگ را در قسمت جستجو وارد کنید و آمار را تایپ کنید،
و شما صبر کنید تا ببینید که آیا وب سایت سقوط
شما صبر کنید تا ببینید که آیا این برنامه آشکار برخی از پیام خطا
چرا که اگر شما خوش شانس به عنوان پسر بد و ارائه برخی از ورودی دیوانه
که سقوط برنامه، این بدان معناست که برنامه نویس رفتار بد خود را پیش بینی نیست،
که بدین معناست که شما احتمالا می تواند با تلاش به اندازه کافی، آزمایش و خطا کافی،
چطور به راه انداختن یک حمله دقیق تر است.
بنابراین به عنوان یک بخشی از امنیت است و نه فقط اجتناب از این حملات در مجموع
اما تشخیص آنها و در واقع به دنبال در سیاهههای مربوط
و دیدن آنچه ورودی دیوانه که مردم را به وب سایت خود را تایپ،
چه عبارات جستجو مردم را به وب سایت خود را تایپ
امید سرشار برخی از بافر.
و این همه جوش پایین به اصول ساده از چه آرایه
و چه آن را به معنای تخصیص و استفاده از حافظه.
>> که پس از آن نیز این است.
بیایید فقط نگاه در داخل دیسک سخت دوباره.
شما را از یک یا دو هفته پیش به خاطر که زمانی که فایل های شما کشیدن به بن خود را بازیافت و یا سطل زباله،
چه اتفاقی می افتد؟ >> [دانشجو] هیچ چیز نیست. >> مطلقا هیچ چیز، درست است؟
در نهایت اگر شما پایین بر روی فضای هارد دیسک،
ویندوز یا Mac OS شروع به پاک کردن فایل ها برای شما.
اما اگر چیزی است که شما در آن وجود دارد را بکشید، که در تمام امن نیست.
هم اتاقی یا دوستان و یا اعضای خانواده خود را به انجام دو برابر و کلیک کنید، voila،
تمام فایل های ناقص که شما سعی در حذف وجود دارد.
بسیاری از ما حداقل می دانیم که شما به راست کلیک کنید و یا کنترل کلیک کنید
و خالی کردن سطل زباله و یا چیزی شبیه به آن.
اما حتی پس از آن که نمی تواند کاملا انجام فوت و فن
زیرا آنچه اتفاق می افتد زمانی که شما یک فایل را بر روی دیسک سخت خود را
که نشان دهنده برخی از سند Word و یا برخی از JPEG است، و این نشان دهنده هارد دیسک شما،
و اجازه دهید می گویند این بریدن در اینجا نشان دهنده آن فایل،
و آن را از کل یک دسته از 0s و 1S تشکیل شده است.
چه اتفاقی می افتد زمانی که شما نه تنها به کشیدن این فایل را به سطل زباله می تواند و یا سطل آشغال
بلکه آن را خالی؟ مرتب سازی بر اساس هیچ چیز نیست.
مطلقا هیچ چیزی نیست.
در حال حاضر آن را فقط به هیچ چیز چون چیزی کمی در قالب این جدول اتفاق می افتد.
بنابراین نوعی از جدول پایگاه داده و یا در داخل حافظه کامپیوتر وجود دارد
که اساسا دارای یک ستون برای نام فایل 'و یک ستون برای فایل های' محل،
که این ممکن است محل سکونت: 123، فقط یک عدد تصادفی است.
بنابراین ما ممکن است چیزی مانند x.jpeg و 123 محل سکونت داشته باشد.
چه اتفاقی می افتد زمانی که شما در واقع خالی کردن زباله های خود را؟
می رود که دور.
اما آنچه بین نمی رود. 0s و 1S است.
>> پس چه پس از آن اتصال به pset4 است؟
خب، با pset4، فقط به خاطر اینکه ایم به طور تصادفی پاک شده از کارت کامپکت فلش
که همه از این عکس ها و یا فقط به خاطر اینکه آن را بد شانس شد خراب
به این معنا نیست که 0s و 1S هنوز هم وجود دارد.
شاید تعداد کمی از آنها گم بشه چون چیزی خراب کردم
به این معنا که برخی از 0s و 1S شد و 1S شد 0s و.
کارهای بد می تواند رخ دهد به دلیل اشکال از نرم افزار یا سخت افزار معیوب است.
اما بسیاری از کسانی که بیت، شاید حتی 100٪ از آنها، هنوز هم وجود دارد.
این درست است که کامپیوتر یا دوربین نمی دانم از کجا JPEG1 آغاز شده
و جایی که JPEG2 آغاز شده است.
اما اگر شما، برنامه نویس، با کمی زرنگ و دانا را که در آن کسانی که عکس JPEG می دانم
و یا آنچه را که آنها شبیه به طوری که شما می توانید 0s و JPEG و 1S و می گویند، JPEG تجزیه و تحلیل،
شما می توانید یک برنامه را در اصل فقط برای ارسال و یا در حالی که حلقه
که هر یک از آن فایل را بازیابی.
پس درس است و سپس به شروع به ایمن پاک کردن فایل های خود را
اگر شما می خواهم برای جلوگیری از این در دسترس نباشد. بله.
>> [دانشجو] چطور می شود آن را بر روی کامپیوتر خود می گوید:
که شما حافظه بیش از شما قبل از انجام؟
حافظه بیشتر از شما قبل از انجام - >> [دانشجو] حافظه بیشتر در دسترس است.
آه. خوب سوال.
پس چرا پس از تخلیه سطل زباله کامپیوتر خود را به شما بگویم
که شما باید فضای آزاد بیشتر از شما قبل از انجام؟
به طور خلاصه، به دلیل آن را دروغ می گوید.
از لحاظ فنی، شما فضای بیشتری به دلیل در حال حاضر شما گفته اند که
شما می توانید چیزهای دیگر را که در آن است که فایل یک بار بود قرار داده است.
اما این به این معنا نیست که این بیت ها رفتن به دور،
و این به این معنا نیست که این بیت ها که به تمام 0s و تغییر به عنوان مثال،
برای حفاظت از خود است.
بنابراین در مقابل، اگر شما ایمن پاک کردن فایل ها و یا از نظر جسمی نابود دستگاه،
که واقعا گاهی اوقات تنها راه در اطراف آن است.
>> پس چرا در آن توجه داشته باشید نیمه ترسناک نیست را ترک کند، و ما شما را در روز دوشنبه را ببینید.
[تشویق حضار]
>> [CS50.TV]