[Powered by Google Translate] [هفته 5]
[دیوید J. مالان، دانشگاه هاروارد]
[این CS50.] [CS50.TV]
[زن] او را به دروغ گفتن در مورد آنچه که من نمی دانم.
[مرد] پس چه می دانیم؟
[زن] است که در 9:15، ری Santoya در ATM بود.
[مرد] بنابراین سوال این است، چه شد که او در 9:16 انجام شده است؟
[زن] تیراندازی میلی متر 9 در چیزی.
شاید او را دیدم تیرانداز از خفا.
[مرد] و یا او را با او مشغول به کار بود.
[زن] صبر کنید. بازگشت به عقب است.
[انسان] چه می بینید؟
[♫ موسیقی suspenseful ♫]
[زن] چهره خود را بیاورید. صفحه نمایش کامل.
[مرد] عینک او. >> انعکاس وجود دارد.
[♫ موسیقی suspenseful ♫]
[انسان] که تیم بیس بال Nuevita. که لوگوی خود را.
[زن] و او را به صحبت کردن به هر کس که کت پوشیده است.
>> [دیوید مالان] بنابراین، این CS50 هفته 5 است، و امروز یک کمی از تلویزیون و فیلم خراب کردن برای شما.
بنابراین، هر زمان که شما در حال تماشای یک نمایش شبیه این یکی اینجا،
و پلیس می گویند: "که شما تمیز کردن است؟" یا "افزایش"
نه در دنیای واقعی افزایش وجود دارد.
در واقع، آنچه که شما واقعا چیزی کمی شبیه به این است.
من کشیده تا یکی از عکس کارکنان از صفحه است.
این یک برنامه ای به نام فتوشاپ. این 1 از 2 Bowdens است،
1 از 3 Bowdens در واقع، امروز، از آنجا که ما خانم Bowden در اینجا نیز، با راب و پل.
اما در اینجا راب است که بر روی صفحه نمایش، و اگر ما در در آن تابانیدن زوم او همیشه در چشم او بود،
آنچه شما در واقع این است که آنچه می بینید همان چیزی است که شما می توانید.
این است "بهبود یافته است،" پس "CSI" آن را کمی اشتباه است.
یک کلیپ دیگر وجود دارد، در صورتی که ما می توانیم بر روی "CSI" فقط کمی طولانی تر را انتخاب کنید.
این یک عبارت به خوبی مطلق پس اگر شما می خواهید به
فنی صدا با دوستان خود را هنگامی که، در واقع، شما می گویید مطلقا هیچ چیز.
>> [مرد] هفته من شده است تحقیق در مورد قتل های قاتل راننده تاکسی
با شیفتگی خاصی مرضی.
[زن # 1] این است که در زمان واقعی است.
[زن # 2] من یک رابط کاربری GUI با استفاده از ویژوال بیسیک، ایجاد ببینید اگر من می توانم آدرس IP ردیابی.
>> [مالان] صوتی از همگام سازی را کنار گذاشته، ایجاد یک رابط گرافیکی با استفاده از ویژوال بیسیک
برای ردیابی یک آدرس IP مزخرف کامل است.
این روزها شما می توانید از ویژوال بیسیک استفاده نمی کند،
بدون نیاز به GUI وجود دارد، و آدرس IP یک مدت از لحاظ فنی دقیق بود.
بنابراین یک چشم را برای این، و یکی از مورد علاقه های من:
این یکی کمی بیشتر پیچیده است، به دلیل این که شما نیاز به دانستن زبان های مختلف.
یک زبان به نام هدف-C است، که superset از C. وجود دارد
که به معنای C به علاوه برخی از ویژگی های اضافی، برنامه نویسی شی گرا در میان آنها است.
و این زبان است که اپل تا به محبوبیت برای برنامه نویسی در iOS است.
و بنابراین در اینجا یک کلیپ از یک نمایش کاملا متفاوت، از "شماره"
که در واقع اگر شما نگاه از نزدیک در ویدئو و مکث خود را در لحظه ای مناسب،
شما خواهید دید که آنچه که هستید، در این است نه کاملا آنچه که شرح داده شده است.
و اجازه دهید یک کانکتور صوتی مختلف من در اینجا امتحان کنید و ببینید که آیا ما می توانیم
نگه داشتن صدا در همگام سازی این زمان.
من شما را به "شماره".
>> [مرد # 1] این یک آدرس 32 بیتی IPv4 را.
[مرد # 2] IP، که از طریق اینترنت می باشد. شبکه >> خصوصی. این شبکه خصوصی آنیتا است.
[مالان] باشه. این هدف-C است، و آن را برای برنامه رنگ آمیزی بعضی از بچه،
شما شاید می تواند استنباط از نام متغیر وجود دارد.
به طوری که پس از آن بود "." بنابراین امروز و این هفته معرفی می کنیم
کمی از جهان پزشکی قانونی و بافت در مسائل بنابراین.
امروز یک سخنرانی به صورت مختصر به دلیل یک رویداد خاص در اینجا وجود دارد
پس از آن، بنابراین خواهیم زیرچشمی نگاه کردن، گرفتن و اذیت دانش آموزان و پدر و مادر به طور یکسان امروز
با برخی از چیزهایی که در افق هستند.
در میان آنها، روز دوشنبه، چند همکلاسی را داشته باشد.
EDX، دانشگاه هاروارد و MITS ابتکار جدید آنلاین برای باز کردن دروس
و بیشتر، در حال راه اندازی در دانشگاه هاروارد در روز دوشنبه است.
که به معنای آمده دوشنبه - به عنوان آخرین شمارش،
86،000 همکلاسی های دیگر خواهد شد همراه با سخنرانی CS50
و بخش ها و مجموعه walkthroughs و مشکل است.
و به عنوان بخشی از این، شما را به تبدیل شدن به اعضای کلاس افتتاحیه
CS50 و در حال حاضر CS50x.
>> به عنوان بخشی از این، در حال حاضر، این باور که وجود خواهد داشت و برخی از upsides به عنوان.
آماده شدن برای این کار، به تعداد گسترده ای از دانش آموزان،
کافی است برای گفتن که حتی اگر ما دارای 108 TFS و CA ها،
نه کاملا بهترین نسبت استاد و دانشجو / زمانی که ما به 80،000 دانش آموز دیگر.
بنابراین ما در حال رفتن به درجه بندی مشکل بسیاری از مجموعه های دستی.
بنابراین این هفته در مجموعه مشکل خواهد بود CS50 ورود،
است که برای رفتن به یک ابزار خط فرمان در داخل دستگاه
که شما هنگامی که آن را به روز رسانی بعد از این تعطیلات آخر هفته،
و شما قادر خواهید بود برای اجرای یک فرمان، چک 50،
در pset خود را، و شما برخی از بازخورد به عنوان که آیا برنامه شما
درست یا نادرست با توجه به مشخصات طرح های مختلف است که ما ارائه کرده اند.
بنابراین بیشتر در مورد آن و مشکل و مشخصات مجموعه
از همکلاسی CS50x خواهد شد با استفاده از این نیز هست.
>> بنابراین مجموعه ای مشکل 4 همه چیز در مورد پزشکی قانونی است.
و این قطعه از سوی برخی از مسائل در زندگی واقعی الهام گرفته شده بود،
به موجب آن زمانی که من در مدرسه فارغ التحصیل شده بود، من در حالی که با زندانی
دفتر منطقه دادستان شهرستان میانه انجام کار قانونی
با محقق سرب قانونی خود، و چه این مبلغ به
است، من فکر می کنم من در گذشته یک هفته چند اشاره، پلیس دولت بزرگ و یا دیگران است
خواهد آمد، آنها را رها کردن چیزهایی مثل سی دی ها و دیسک های سخت و فلاپی دیسک
و مانند آن، و پس از آن هدف از اداره پزشکی قانونی برای تعیین اینکه آیا
و یا وجود دارد برخی از مرتب کردن بر اساس شواهد نیست.
واحد تحقیقات ویژه بود، پس از آن جرم یقه سفید بود،
مرتب کردن بر اساس نگران کننده تر از جنایات بود،
هر چیزی که شامل برخی از انواع رسانه های دیجیتال؛ معلوم که هنوز بسیاری از مردم
ارسال یک ایمیل به گفت: "من این کار را کرد."
بنابراین اغلب این جستجوها پزشکی قانونی روشن نیست که میوه بسیار،
اما گاهی اوقات مردم به ایمیل مانند ارسال.
بنابراین گاهی اوقات تلاش ها پاداش.
>> اما منجر به این pset قانونی، خواهیم به معرفی در pset 4 بیت از گرافیک است.
بنابراین شما احتمالا این چیزها برای داده، عکس JPEG، gif و مثل این روزها،
اما اگر شما واقعا در مورد آن فکر می کنم، تصویر، بسیار شبیه به چهره راب،
می تواند به عنوان یک دنباله از نقاط یا پیکسل های مدل شده است.
در حال حاضر، در مورد چهره راب، تمام انواع رنگ وجود دارد،
و ما شروع به دیدن نقاط منحصر به فرد، otherwide به عنوان پیکسل شناخته می شود،
زمانی که ما شروع به زوم شوید.
اما اگر ما جهان ساده یک کمی، و فقط می گویند که این در اینجا این است راب
در سیاه و سفید، به خوبی، به نمایندگی از سیاه و سفید ما فقط می تواند باینری استفاده کنید.
و اگر ما قصد استفاده از باینری، 0 یا 1، ما می توانیم این تصویر بیان
چهره خندان راب با این الگوی بیت: 11000011 نشان دهنده
سفید، سفید، سیاه و سفید، سیاه و سفید، سیاه و سفید، سیاه و سفید، سفید است.
و پس از آن یک جهش بزرگ نیست، پس از آن، شروع به صحبت کردن در مورد عکس های رنگارنگ.
چیزهایی که شما را در فیس بوک ببینید و یا با دوربین های دیجیتال،
اما بدیهی است، هنگامی که آن را به رنگ می آید، شما نیاز بیت بیشتر است.
و کاملا رایج در جهان عکس است، برای استفاده از 1-بیت رنگ،
این نشان می دهد، اما 24 بیت رنگ، که در آن شما در واقع میلیون ها از رنگ.
همانگونه که در مورد زمانی که ما در چشم راب زوم،
که هر تعداد از میلیون ها نفر از امکانات مختلف رنگارنگ بود.
>> بنابراین ما در این مجموعه مشکل 4 و همچنین در walkthrough،
خواهد شد که امروز به دلیل سخنرانی در روز جمعه در ساعت 3:30 به جای 2:30 معمول است.
اما این فیلم به صورت آنلاین، به طور معمول، فردا.
ما همچنین می خواهیم شما را به فرمت فایل دیگری معرفی نماید.
پس این است که عمدا در ابتدا به منظور نگاه تهدید آمیز،
اما این فقط برخی از اسناد و مدارک برای یک ساختار C است.
به نظر می رسد که مایکروسافت، سال پیش، به مورد پسند عامه این فرمت،
نام فرمت فایل بیت مپ، BMP، و این فوق العاده ساده بود،
رنگارنگ فرمت فایل های گرافیکی است که برای مدتی مورد استفاده قرار گرفت
و هنوز هم گاهی اوقات برای تصاویر پس زمینه بر روی دسکتاپ.
اگر شما فکر می کنم بازگشت به ویندوز XP و تپه و آسمان آبی،
بود که به طور معمول، BMP یا تصویر بیت مپ، و مپ
سرگرم کننده برای ما هستند زیرا آنها به پیچیدگی کمی بیشتر است.
این کاملا به عنوان به عنوان این شبکه از 0 و 1 است ساده نیست؛
در عوض، شما باید چیزهایی مثل هدر در آغاز از یک فایل است.
بنابراین به عبارت دیگر، در داخل یک فایل BMP دسته کامل از 0 و 1،
اما بعضی از این 0 و 1 در آن وجود دارد وجود دارد.
و معلوم است که آنچه که ما احتمالا گرفته شده برای سال اعطا،
فرمت های فایل مانند توضیحات. XLS. MP3. MP4،
هر آنچه که از فرمت های فایل که شما با آن آشنا هستید.
خب، چه آن را حتی به فرمت فایل چیست؟
از آنجا که در پایان روز، تمام این فایل ها استفاده می کنیم فقط 0 و 1
و شاید کسانی که 0 و 1 نشان دهنده A، B، C، از طریق ASCII یا مانند،
اما از پایان روز، آن را فقط 0 و 1 است.
>> بنابراین انسان گاهی اوقات فقط یک قالب فایل جدید را اختراع تصمیم گیری
جایی که آنها استاندارد چه الگوهای بیت در واقع به این معنی است.
و در این مورد در اینجا، مردمی که طراحی شده فرمت فایل های بیت مپ
گفت که در بایت اول در یک فایل بیت مپ، افست 0 نشان داده، وجود دارد،
رفتن به برخی از cryptically نام متغیر به نام bfType،
که فقط برای نوع فایل بیت مپ می ایستد، چه نوع از فایل های بیت مپ این است.
شما می توانید استنباط، شاید، از ردیف دوم که جبران 2، تعداد بایت 2،
یک الگوی از 0 و 1 است که نشان دهنده چه؟
اندازه چیزی است، و آن را از آنجا می رود.
بنابراین در مجموعه مشکل 4، شما را از طریق برخی از این چیزها راه می رفت.
>> به پایان خواهد رسید تا مراقبت در مورد همه آنها، اما متوجه آن شروع به گرفتن جالب
در اطراف خط و یا بایت 54، rgbtBlue، سبز و قرمز است.
اگر تا کنون شنیده RGB مخفف، قرمز سبز آبی، این اشاره به آن است.
از آنجا که معلوم است شما می توانید تمام رنگ های رنگین کمان رنگ
با ترکیبی از رنگ های قرمز و آبی و سبز است.
و، در واقع، پدر و مادر در اتاق ممکن است برخی از اولین پروژکتور یاد.
این روزها، شما فقط 1 نور بیرون آمدن از یک لنز را ببینید.
اما در روز، شما تا به حال لنز قرمز، لنز آبی، و لنز سبز
و با هم آنها را در روی صفحه نمایش با هدف و با تشکیل یک تصویر رنگارنگ است.
و اغلب مدارس و دبیرستان کسانی که لنز دارند
همیشه کمی چپ چپ نگاه، بنابراین شما مرتب کردن بر اساس دیدن تصاویر دو یا سه برابر بود،
اما این ایده بود. شما تا به حال با نور قرمز و سبز و آبی رنگ آمیزی یک تصویر است.
و این اصل همان است که در کامپیوتر استفاده می شود.
>> بنابراین در میان این چالش ها، پس از آن، برای شما مشکل مجموعه 4
در حال رفتن به چند چیز، یکی این است که در واقع تغییر اندازه یک تصویر است.
را در یک الگوی از 0 و 1،
کشف کردن که تکه های 0 و 1 را در یک ساختار شبیه به این نمایندگی،
و پس از آن شکل چگونه به تکرار پیکسل: قرمز، بلوز، سبزی
در داخل به طوری که زمانی که یک تصویر به نظر می رسد شبیه به این در ابتدا، ممکن است شبیه به این به جای پس از آن.
از جمله چالش های دیگر، بیش از حد است، رفتن به این باشد که شما به دست
پزشکی قانونی یک تصویر از یک فایل واقعی را از یک دوربین دیجیتال
و در آن دوربین، یک بار پس از یک زمان بودند، یک دسته از عکس ها.
مشکل این است که، ما به طور تصادفی پاک شده و یا تا به حال تصویر خراب شده به نحوی.
چیزهای بد اتفاق می افتد با دوربین های دیجیتال، و بنابراین ما به سرعت کپی از 0 و 1
خارج از این کارت برای شما، همه آنها را در 1 فایل بزرگ ذخیره می شود، و سپس ما آنها را به شما دست
مشکل تنظیم 4 به طوری که شما می توانید یک برنامه که با آن در C برای بازیابی ارسال
تمام کسانی که عکس JPEG، ایده آل است.
و معلوم است که عکس JPEG، حتی اگر آنها تا حدودی از یک فرمت فایل پیچیده،
آنها بسیار پیچیده تر از این چهره خندان در اینجا.
به نظر می رسد که هر JPEG با الگوهای همان 0 و 1 شروع می شود.
بنابراین با استفاده از یک حلقه یا حلقه یا مشابه آن،
شما می توانید بیش از همه 0 و 1 در این تصویر پزشکی قانونی تکرار
و هر بار که شما الگوی ویژه ای است که در مشخصات مجموعه ای از مشکل تعریف شده،
شما می توانید فرض کنید، اوه، اینجا، با احتمال بسیار بالا،
آغاز JPEG، و به محض این که شما در پیدا کردن همان الگوی،
از چند بایت یا کیلوبایت یا مگابایت بعد،
شما می توانید فرض کنید، 'آه! اینجا است که یک JPEG دوم، عکس من پس از یک زمان.
اجازه دهید من دست از خواندن آن فایل اول، شروع به نوشتن این یکی جدید است.
و خروجی از برنامه های خود را برای pset 4 به عنوان بسیاری از 50 عکس JPEG است.
و اگر آن را به 50 عکس JPEG یا نه، شما باید کمی از یک حلقه است.
اگر شما یک تعداد نامحدود از عکس JPEG، شما باید یک حلقه بی نهایت است.
، بیش از حد، به طوری که کاملا یک مورد مشترک خواهد بود.
این چیزی است که در افق است.
>> امتحان 0، پشت سر ما. تحقق، در هر ایمیل من که همواره این مردمی وجود دارد
که هر دو شاد، مرتب کردن بر اساس خنثی، و غمگین در سراسر مسابقه 0 بار.
لطفا رسیدن به من، TFS سر، Zamyla، TF خود را
یا یکی از CAS که شما می دانید اگر شما می خواهم به بحث در مورد این که چه کارهایی رفت.
>> بنابراین برای تحت تاثیر قرار دادن پدر و مادر، در اتاق،
کتابخانه CS50 چه شده است؟ کار خوب.
کتابخانه CS50 چه خبر؟ آره؟ [پاسخ دانشجویی، ناخوانا]
>> خوب، خوب است. پس از آن یک مجموعه prewritten از کد است که ما، کارکنان، نوشت،
ما به شما ارائه می کنند، به ارائه برخی از ویژگی های مشترک است.
چیزهای مانند یک رشته بین المللی به من، همه از توابع که در اینجا ذکر شده است.
شروع در حال حاضر، ما شروع به گرفتن این چرخ آموزش.
بنابراین ما در حال رفتن به شروع به گرفتن "رشته" را از شما دور است،
که به یاد می آورند، تنها یک مترادف برای آنچه واقعی نوع داده بود؟ * کاراکتر باشد.
بنابراین برای پدر و مادر، که احتمالا - که خوب است، به طوری * کاراکتر خواهیم شروع به دیدن
بر روی صفحه نمایش به عنوان "رشته" ما از واژگان ما حذف،
حداقل زمانی که آن را در واقع به نوشتن کد می آید.
به همین ترتیب، ما باید با استفاده از برخی از این توابع به همان اندازه،
زیرا برنامه های ما در حال رفتن به پیچیده تر
نه فقط برنامه هایی که نشستن وجود دارد با یک چشمک زدن اعلان ارسال،
انتظار برای کاربر به تایپ چیزی شوید.
شما ورودی خود را از جای دیگری دریافت کنید.
به عنوان مثال، شما می خواهید آنها را از یک سری از بیت ها بر روی دیسک سخت محلی دریافت کنید.
به جای آن شما می خواهید آنها را در آینده از اتصال به شبکه، برخی از وب سایت جایی.
بنابراین پوست پشت این لایه برای اولین بار به شما اجازه می دهد، بالا بکشد و لوازم CS50
و این فایل به نام CS50.h، که شما تیز از جمله برای هفته ها بوده است.
>> اما اجازه دهید در واقع ببینیم که چه چیزی در داخل این.
بنابراین بالا فایل را در آبی است که فقط یک دسته از نظرات،
اطلاعات مربوط به ضمانت نامه و مجوز. این نوع از یک الگوی مشترک است
در نرم افزار، چرا که بسیاری از نرم افزار این روزها چیزی است که به نام "منبع باز"
که بدان معنی است که کسی نوشته است کد
و آن را به صورت آزاد موجود است، نه فقط برای اجرا و استفاده،
اما در واقع و خواندن به کار خود را تغییر و ادغام.
بنابراین این چیزی است که شما با استفاده از نرم افزار منبع باز،
البته در یک فرم بسیار کوچک است.
اگر من حرکت پایین گذشته به نظر، هر چند، ما شروع به دیدن برخی از چیزهایی بیشتر آشنا.
پس در بالای در اینجا متوجه، که فایل CS50.h شامل یک دسته کامل از فایل های هدر.
در حال حاضر، بیشتر از این ما را دیده اند، نه قبل از، اما یکی از
آشنا که از این ما دیده می شود، البته به طور خلاصه، تا کنون؟
آره، کتابخانه استاندارد. Stdlib.h malloc،
بنابراین زمانی که ما شروع به صحبت کردن در مورد تخصیص حافظه پویا،
کنیم که دوباره به هفته آینده و همچنین، ما از جمله این که فایل آغاز شده است.
به نظر می رسد که بولی و درست و نادرست را در C در واقع وجود ندارد، و در هر سه،
مگر اینکه شما این فایل اینجا کلیک کنید.
بنابراین ما باید برای هفته ها، شده است از جمله استاندارد bool.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 میلیارد دلار است.
بنابراین شما صرف یکی از مقادیر ممکن خود را به طوری که شما می توانید به جهان متعهد
که اگر چیزی را اشتباه می رود، من به این مقدار فوق العاده بزرگ بازگشت.
اما شما نمی خواهید که کاربر تایپ کردن چیزی مرموز مانند "2، 3، 4 ..."
تعداد واقعا بزرگ، جایی که شما تعمیم به جای به عنوان یک ثابت است.
پس در واقع، اگر شما مقعد بودن شد و در چند هفته گذشته،
در هر زمان با شما تماس GetInt، شما باید شده اند چک کردن با یک شرط IF است.
نوع کاربر در INT_MAX انجام داد، و یا بیشتر به طور خاص،
آیا GetInt INT_MAX بازگشت؟ زیرا اگر آن را انجام داد،
که در واقع به این معنی که آن را نه از نوع، چیزی در این مورد اشتباه رفت.
پس این همان چیزی است که به طور کلی به عنوان "نگهبان" ارزش، که به معنی خاص شناخته شده است.
>> خوب، اجازه دهید در حال حاضر به فایل C به نوبه خود.
فایل C در دستگاه برای برخی از زمان وجود داشته است،
و در واقع، دستگاه آن را برای شما از پیش تالیف شده
به چیزی که ما به نام "کد شیء،
اما آن را فقط به شما مهم نیست که در آن به این دلیل است که این سیستم می داند،
در این مورد، که در آن است، لوازم خانگی.
اما اجازه دهید در پایین حرکت کنید در حال حاضر به GetInt، و ببینید که چگونه GetInt تمام این مدت کار کرده است.
بنابراین در اینجا ما نظرات مشابه از قبل است.
اجازه بدهید من فقط بخش کد زوم در،
و آنچه ما برای GetInt به شرح زیر است.
طول می کشد تا ورودی و بین المللی را بر می گرداند، در حالی که (درست است)، بنابراین ما باید یک حلقه بی نهایت عمدی
اما، احتمالا خواهیم شکسته از این به نحوی، یا بازگشت از درون.
پس ببینید که چگونه این کار را کنیم. خب، ما به نظر می رسد با استفاده از GetString
در این خط برای اولین بار در داخل حلقه، 166.
این تمرین خوبی است زیرا تحت چه شرایطی
می تواند GetString بازگشت این کلمه کلیدی خاص، NULL؟
اگر چیزی می رود اشتباه است. چه چیزی ممکن است اشتباه زمانی که شما با چیزی شبیه به GetString؟
آره؟ [پاسخ دانشجو، ناخوانا] >> آره. شاید malloc نتواند.
جایی در زیر هود GetString خواستار malloc،
که تخصیص حافظه، که به شما اجازه می دهد فروشگاه کامپیوتر
همه از شخصیت است که نوع کاربر را به صفحه کلید است.
و فرض کنید که کاربر تا به حال زیادی از وقت آزاد
و تایپ بیشتر، به عنوان مثال، از 2 میلیارد کاراکتر است.
کاراکتر بیشتر از کامپیوتر حتی به RAM است.
خب، GetString قادر باشد که به معنی آن را به شما،
حتی اگر این فوق العاده، فوق العاده مورد گوشه ای غیر معمول است.
این است که به نحوی قادر به رسیدگی به این، و GetString
اگر ما به عقب و خواندن مستندات خود را می کند، در واقع، بازگشت NULL.
حال اگر GetString نتواند با بازگشت NULL، GetInt رفتن به شکست است
بازگشت INT_MAX، فقط به عنوان یک نگهبان.
این، فقط کنوانسیون انسان. تنها راهی که شما می توانید از این می دانم که در مورد
با خواندن اسناد و مدارک.
بنابراین حرکت به پایین که در آن بین المللی است که در واقع GotInt.
>> بنابراین اگر من در پایین حرکت کمی بیشتر، در خط 170 نظر بالاتر از این خطوط است.
بنابراین ما اعلام کرد، در سال 172، نوع int N و C کاراکتر، و سپس این تابع
که برخی از شما در سراسر قبل از تصادفا، اما sscanf.
این مخفف برای رشته F اسکن.
به عبارت دیگر، من یک رشته بدهد و من آن را برای قطعه از اطلاعات مورد علاقه اسکن.
پس چه معنا است؟ خب، فرض کنید که من به معنای واقعی کلمه، در، 1 2 3 در صفحه کلید تایپ،
و سپس کلید را وارد کنید. چه نوع داده از 1 2 3 GetString بازگشته است؟
این بدیهی است که یک رشته است، درست است؟ من یک رشته، پس 1 2 3 واقعا "1 2 3"
با 0 \ در انتهای آن است. که بین المللی نیست.
که تعداد زیادی نیست. آن را مثل یک عدد به نظر می رسد اما در واقع نیست.
پس چه GetInt باید کاری انجام دهید؟ این به اسکن آن رشته از چپ به راست،
1 2 3 \ 0، و به نوعی آن را تبدیل به یک عدد صحیح واقعی است.
در حال حاضر، شما می توانید بفهمند که چگونه به انجام این کار.
اگر شما فکر می کنم به pset 2، شما احتمالا کمی راحت
با سزار یا vigenere بنابراین شما می توانید تکرار بیش از یک رشته،
شما می توانید کاراکتر ها را به نوع داده int با انتخاب تبدیل کنید. که زیادی از کار است.
چرا یک تابع مانند sscanf که این کار را برای شما تماس نمی گیرم؟
بنابراین sscanf انتظار استدلال، در این مورد به نام خط است، که یک رشته است.
بعد از آن شما، در نقل قول را مشخص کنید، بسیار شبیه به printf،
چه انتظاری دارید که در این رشته را مشاهده کنید؟
چیزی که من میگم اینجا است، من انتظار برای دیدن یک عدد دهدهی و شاید یک شخصیت.
و خواهیم دید چرا که این مورد فقط در یک لحظه است.
به نظر می رسد که این نماد در حال حاضر از مسائل یادآور
ما شروع به صحبت کردن در مورد بیش از یک هفته پیش.
>> چیست & N و & C کار را برای ما در اینجا؟ [پاسخ دانشجویی، ناخوانا]
>> آره. این به من آدرس از N و آدرس C است.
در حال حاضر، این است که چرا مهم است؟ خب، شما می دانید که با توابع در C
شما همیشه می توانید یک مقدار و یا هیچ ارزش در همه بازگشت.
شما می توانید بین المللی، یک رشته، شناور، یک کاراکتر، هر چه بازگشت.
یا شما می توانید از درجه اعتبار ساقط بازگشت، اما شما فقط می توانید بازگشت 1 چیز حداکثر.
اما در اینجا ما می خواهیم sscanf به من بازگشت شاید هوشمند، یک عدد دهدهی،
و همچنین یک کاراکتر است، و من چرا کاراکتر را در یک لحظه را توضیح دهد.
بنابراین شما به طور موثر می خواهید F بازگشت 2 چیز است که فقط در C. امکان پذیر نیست
بنابراین شما می توانید در اطراف آن کار شده توسط عبور در 2 آدرس:
چرا که به محض اینکه شما دست تابع 2 آدرس، آنچه که می تواند تابع با آنها کاری انجام دهید؟
این می تواند به این آدرس ارسال. شما می توانید عملیات * و استفاده از "رفتن وجود دارد" به هر یک از این آدرس.
مرتب کردن بر اساس از این مکانیسم درپشتی است، اما بسیار معمول است برای تغییر ارزش های متغیر
در بیش از فقط 1 مکان، در این مورد 2.
در حال حاضر، توجه من برای چک کردن == to1، و سپس بازگشت N در صورتی که می کند، در واقع، درست ارزیابی است.
پس چه اتفاقی افتاده؟ خب، از نظر فنی، ما واقعا می خواهید به در GetInt اتفاق می افتد این است.
ما می خواهیم به تجزیه، پس به صحبت می کنند، ما می خواهیم به خواندن رشته
"1 2 3" و اگر به نظر می رسد مثل یک عدد وجود دارد،
آنچه که ما در حال گفتن sscanf به انجام این است که قرار دادن این تعداد، 1 2 3، در این N متغیر برای من است.
پس چرا من این را به عنوان به خوبی؟
چه چیزی است که نقش نیز گفت، sscanf، شما همچنین ممکن است یک شخصیت است.
[صحبت دانشجویی، ناخوانا] >> نه - نقطه اعشار می تواند کار.
بیایید نگه دارید که فکر می کردم برای یک لحظه. چه چیز دیگری؟
[دانشجو، ناخوانا] >> بنابراین، فکر خوب، آن می تواند شخصیت NULL است.
در واقع در این مورد، نه. آره؟ [دانشجو، ناخوانا]
>> >> ASCII. یا، اجازه دهید به من تعمیم و حتی بیشتر.
٪ C وجود دارد فقط برای چک کردن خطا است.
ما نمی خواهیم به کاراکتر پس از شماره
اما آنچه در این به من اجازه می دهد برای انجام این کار به شرح زیر است:
به نظر می رسد که sscanf، علاوه بر ذخیره کردن مقادیر در N و C، در این مثال در اینجا،
آنچه که آن را نیز انجام می دهد، آن را برمی گرداند تعدادی از متغیرهای آن را قرار داده ارزش شوید.
بنابراین اگر شما فقط در 1 2 3 تایپ کنید، و سپس تنها٪ D رفتن به مطابقت
و تنها N می شود با ارزش مانند 1 2 3 ذخیره می شود و هیچ چیز در C قرار داده می شود؛
C یک مقدار زباله باقی می ماند، پس به صحبت می کنند.
زباله به دلیل آن را به عنوان برخی از ارزش هرگز مقداردهی اولیه شده است.
پس در آن صورت، باز می گرداند sscanf 1، چرا که من یکی از کسانی که اشاره گر جمعیت،
که در این صورت، بزرگ است. من بین المللی است، بنابراین من آزاد خط را به آزاد کردن حافظه
که GetString در واقع اختصاص داده شده است، و سپس N I بازگشت.
دیگری، اگر شما همیشه تعجب که در آن است که سعی مجدد بیانیه می آید از، از حق در اینجا می آید.
در مقابل، اگر من در 1 2 3 صنایع غذایی تایپ،
فقط برخی از دنباله تصادفی از متن، sscanf است برای دیدن،
آه، شماره، آه، شماره، آه، شماره، آه - F.
و آن را برای قرار دادن در n 1 2 3.
رفتن به قرار دادن F C، و سپس بازگشت 2.
بنابراین ما باید، فقط با استفاده از تعریف اساسی از رفتار scanf،
یک راه بسیار ساده - خب، پیچیده در نگاه اول است، اما در پایان روز،
مکانیزم نسبتا ساده گفت، بین المللی، و اگر چنین است، که تنها چیزی که من پیدا کردم؟
و فضای سفید در اینجا این است آگاهانه. اگر مستندات sscanf شما خواندن،
آن را به شما می گوید که اگر شما عبارتند از: تکه ای از فضای سفید در آغاز یا پایان،
sscanf بیش از حد به کاربر، اجازه می دهد به هر دلیلی، به ضربه فاصله 1 2 3، و خواهد بود که مشروع باشد.
این کاربر نمی خواهد داد فقط به خاطر اینکه آنها را به فاصله در ابتدا یا پایان رسید،
که فقط یک کمی کاربر پسند تر شده است.
>> پس از آن، هر گونه سؤال، در GetInts؟ آره؟
[سوال دانشجو، ناخوانا]
>> پرسش خوبی است. اگر شما فقط در یک کاراکتر تایپ شده، مانند F و ضربه را وارد کنید
تا کنون که بدون تایپ کردن 1 2 3؛ شما چه فکر میکنید رفتار این خط از کد پس از آن خواهد بود؟
بنابراین sscanf می تواند بیش از حد پوشش، زیرا در آن صورت،
قصد ندارم برای پر کردن N یا C، آن را به جای بازگشت 0.
که در این صورت، من هم ابتلا به این سناریو، به این دلیل که ارزش انتظار می رود من می خواهم 1.
من فقط می خواهم 1 و فقط 1 چیز پر شود. خوب سوال. دیگران؟
>> تمامی حقوق، بنابراین اجازه دهید از طریق تمام توابع در اینجا نیست،
اما یکی که به نظر می رسد می شود، شاید از علاقه باقی مانده
GetString به دلیل آن معلوم است که GetFloat، GetInt،
GetDouble، GetLongLong همه میفرستتون بسیاری از قابلیت های خود را به GetString.
نگاهی که او چگونه پیاده سازی شده است به شما اجازه می دهد تا.
این یکی به نظر می رسد کمی پیچیده است، اما آن را با استفاده از اصول مشابه
که ما شروع به صحبت کردن در مورد در هفته گذشته است. بنابراین در GetString،
طول می کشد که هیچ استدلال همانطور که در خلاء تا در اینجا،
و آن را یک رشته را بر می گرداند، بنابراین من اعلام یک رشته به نام بافر.
من واقعا نمی دانند که آنچه را که برای هنوز مورد استفاده قرار گیرد، اما خواهیم دید.
به نظر می رسد ظرفیت است، به طور پیش فرض، 0، کاملا مطمئن نیست که در آن این است که رفتن.
اطمینان حاصل کنید که N را برای هنوز مورد استفاده قرار گیرد.
اما در حال حاضر آن را کمی جالب تر است، بنابراین در خط 243،
ما اعلام هوشمند، C مرتب سازی بر اساس جزئیات احمقانه.
کاراکتر 8 بیت و 8 بیت می تواند که چگونه بسیاری از ارزش های مختلف را ذخیره؟
256. مشکل این است که، اگر شما می خواهید به 256 حالت مختلف کاراکتر ASCII،
که وجود دارد، اگر شما فکر می کنم، و این چیزی است که به حفظ کردن نیست.
اما اگر شما فکر می کنم که به نمودار ASCII بزرگ ما تا به حال هفته پیش،
وجود دارد، در آن صورت، 128 یا 256 کاراکتر ASCII بودند.
ما با استفاده از الگوهای از 0 و 1 تا.
این یک مشکل است اگر شما می خواهید می شود قادر به تشخیص خطا است.
از آنجا که اگر شما در حال حاضر با استفاده از 256 مقدار برای شخصیت شما،
شما واقعا از پیش برنامه ریزی، چرا که در حال حاضر شما هیچ راهی برای گفتن،
"این شخصیت حلال نمی باشد، این است که برخی از پیام اشتباه است."
پس چه دنیا است، آنها با استفاده از بزرگترین ارزش،
چیزی شبیه به یک int به طوری که شما یک عدد دیوانه از بیت ها
32 برای 4 میلیارد مقادیر ممکن است، به طوری که شما به سادگی می توانید تا پایان با استفاده از
در اصل 257 از آنها، 1 است که برخی از معنا و مفهوم خاصی را به عنوان یک خطا است.
>> پس ببینید که چگونه این کار را کنیم. در خط 246، من این حلقه بزرگ
است که خواستار fgetc F فایل معنا، getc، و پس از آن STDIN.
معلوم میشود که این تنها راه دقیق تر گفت: "خواندن ورودی از صفحه کلید است."
استاندارد صفحه کلید وسیله ورودی، خروجی استاندارد به معنای صفحه نمایش،
و خطای استاندارد، که ما آن را در pset 4، بدان معنی است که صفحه نمایش،
اما یک بخش خاص از صفحه نمایش به طوری که آن را تلفیق شدهاست نیست
با خروجی واقعی که شما در نظر گرفته شده برای چاپ، اما در آینده بیشتر در مورد آن است.
بنابراین fgetc فقط معنی است که خواندن یک کاراکتر از صفحه کلید و ذخیره آن جایی که؟
ذخیره آن در ج، و سپس چک کنید، به طوری که من فقط با استفاده از برخی از ربط بولی در اینجا،
بررسی کنید که آن را برابر \ N، به طوری که کاربر ضربه را وارد کنید.
ما می خواهیم که در آن نقطه، پایان حلقه را متوقف کند، و ما می خواهیم برای بررسی
برای ثابت ویژه، EOF، که اگر می دانید یا حدس می زنم - چه آن را برای ایستادن؟
انتهای فایل. بنابراین این نوع از مزخرف است، چرا که اگر من تایپ کردن در صفحه کلید،
واقعا وجود دارد هیچ پرونده دخیل در این،
اما این فقط از اصطلاح عمومی استفاده می شود به معنی مرتب کردن بر اساس
که هیچ چیز دیگری در حال آمدن است از انگشتان دست انسان است. EOF. انتهای فایل.
تا به کنار، اگر شما تا به حال شاهد D در صفحه کلید خود را ضربه،
که نه شما هنوز می خواهم که شما ضربه کنترل ج.
اما کنترل D می فرستد این ویژه ثابت به نام EOF.
>> بنابراین در حال حاضر ما فقط برخی از تخصیص حافظه پویا داشته باشد.
بنابراین اگر N + 1> ظرفیت، در حال حاضر من ازت توضیح دهد.
N است که فقط چند بایت در حال حاضر در بافر،
رشته ای که شما در حال حاضر ساخت تا از کاربر است.
اگر شما شخصیت های بیشتری را در بافر خود را از ظرفیت در بافر،
به طور مستقیم، آنچه ما نیاز داریم برای انجام آن تخصیص ظرفیت بیشتر است.
من قصد دارم برای جمع آوری بیش از بعضی از حساب
و تمرکز فقط بر روی این تابع در اینجا.
شما می دانید چه malloc است، و یا حداقل به طور کلی آشنا است.
نگاهی حدس بزنید چه بازتخصیص کند. [پاسخ دانشجویی، ناخوانا]
>> آره. و حافظه کاملا اضافه کردن، آن را reallocates حافظه به شرح زیر است:
اگر هنوز هم وجود دارد اتاق در انتهای رشته به شما بیشتر از آن حافظه را
از این روش در اصل به شما می دهد، سپس شما که حافظه اضافی را دریافت کنید.
بنابراین شما فقط می توانید قرار دادن شخصیت های رشته پشت به پشت به پشت به پشت.
اما در صورتی که این مورد نیست، چرا که شما صبر کردم بیش از حد طولانی
و چیزی تصادفی کردم plopped در حافظه وجود دارد، اما فوق العاده وجود دارد
حافظه را در اینجا، این درست است. بازتخصیص رفتن به بلند کردن اجسام سنگین برای شما،
حرکت رشته شما در خواندن این ترتیب دور از اینجا،
قرار داده و از آن به پایین وجود دارد، و پس از آن شما باند بیشتر در آن نقطه است.
بنابراین با یک موج از این دست، اجازه دهید به من می گویند که آنچه GetString در حال انجام
آن را با شروع از یک بافر کوچک، شاید 1 شخصیت تک،
و در صورتی که کاربر در 2 کاراکتر، GetString به پایان می رسد
خواستار بازتخصیص و می گوید: "آه، 1 شخصیت کافی نبود.
2 حرف به من بده. " پس اگر شما را از طریق منطق از حلقه به عنوان خوانده شده
رفتن به می گویند، "اوه، کاربر تایپ شده در 3 کاراکتر.
به من بده در حال حاضر 2 اما 4 کاراکتر، و سپس من را به 8، 16 و 32 را.
واقعیت این است که من دو برابر ظرفیت در هر زمان
این بدان معنی است که بافر است که قصد ندارم به آهستگی رشد می کند.
رفتن به رشد فوق العاده سریع، و آنچه که ممکن است استفاده از آن؟
چرا من دو برابر اندازه بافر، حتی اگر کاربر
ممکن است فقط نیاز به 1 کاراکتر اضافی را از صفحه کلید؟
[پاسخ دانشجویی، ناخوانا]. >> این چیه؟
دقیقا. شما لازم نیست که به رشد آن به عنوان اغلب.
و این فقط یک نوع است - you're پرچینی شرط خود را در اینجا.
این ایده که شما نمی خواهید بازتخصیص تا حد زیادی به تماس، زیرا این امر منجر به آهسته.
هر زمانی که شما از سیستم عامل برای حافظه، همانطور که شما به زودی خواهید دید
در یک مجموعه مشکل در آینده، این امر منجر به برداشتن برخی از زمان.
بنابراین به حداقل رساندن این مقدار از زمان، حتی اگر شما در حال هدر رفتن مقداری از فضا را، گرایش به یک چیز خوب است.
>> اما اگر ما را از طریق قسمت نهایی GetString در اینجا بخوانید،
و دوباره، درک هر خط در اینجا بسیار مهم است امروز.
اما توجه کنید که آن را در نهایت خواستار malloc دوباره، و اختصاص
دقیقا به عنوان بایت بسیاری آن را به عنوان رشته نیاز
و پس از آن می اندازد دور از طریق تماس با آزاد، بافر بیش از حد بزرگ است،
اگر آن را در واقع بیش از حد بسیاری از دو برابر شد.
به طور خلاصه، این که چگونه GetString تمام این مدت کار کرده است.
همه آن را نشانی از یک شخصیت در یک زمان خواندن دوباره و دوباره و دوباره
و هر وقت به آن نیاز دارد برخی از حافظه اضافی، آن را می پرسد سیستم عامل آن از طریق تماس با بازتخصیص.
هر گونه سؤال؟ بسیار خوب.
>> حمله. حالا که ما درک می کنیم اشاره گر، یا حداقل
به طور فزاینده ای آشنا با اشاره گر،
اجازه دهید در نظر بگیرید چگونه تمام جهان شروع به سقوط
اگر شما در برابر کاربران خصمانه کاملا دفاع کند،
افرادی که در حال تلاش برای هک را به سیستم شما.
افرادی که در حال تلاش برای سرقت نرم افزار خود را با دور زدن بعضی از کد ثبت نام
که در غیر این صورت ممکن است به تایپ شوید.
نگاهی به در این مثال در اینجا است که فقط کد C
است که تابع اصلی در پایین، که خواستار صنایع غذایی عملکرد،
و آنچه در آن است به صنایع غذایی عبور؟ [دانشجو] یک استدلال.
استدلال >> تنها. پس ی argv [1]، به این معنی که اولین کلمه که کاربر تایپ
در خط فرمان بعد از a.out یا هر چیز دیگری از این برنامه گفته می شود.
بنابراین صنایع غذایی، در بالا، در * کاراکتر طول می کشد، اما * کاراکتر است فقط آنچه را؟
String است. هیچ چیز تازه ای وجود دارد، و این رشته را خودسرانه نامیده می شود نوار.
در این خط در اینجا، کاراکتر C [12]، در نوع نیمه فنی انگلیسی، آن چیزی است که این خط انجام شده است؟
آرایه - کاراکترها. مجموعه ای از 12 کاراکتر به من بده.
بنابراین ما ممکن است این یک بافر است. از لحاظ تکنیکی به نام c، اما یک بافر در برنامه نویسی
فقط به معنی دسته ای از فضا است که شما می توانید برخی از مسائل وارد قرار داده است
>> سپس در نهایت، memcpy، ما قبلا استفاده نمی شود.
اما شما احتمالا می تواند آنچه در آن حدس بزنید. این نسخه حافظه است.
چه کاری انجام میدهد؟ خب، ظاهرا کپی نوار، ورودی خود را، به ج.
اما فقط تا طول میله است.
اما یک اشکال اینجا وجود دارد.
خوب، پس به لحاظ فنی ما واقعا باید strlen (نوار) ​​X sizeof (کاراکتر)، این درست است.
اما در بدترین حالت، اجازه دهید فرض کنیم که that's - بنابراین، درست است.
سپس 2 اشکالات وجود دارد. بنابراین sizeof (کاراکتر)، همه حق است، اجازه دهید این است که یک کمی گسترده تر است.
بنابراین در حال حاضر یک اشکال، که همان چیزی است که هنوز هم وجود دارد؟
[پاسخ دانشجویی، ناخوانا] ورود >> برای چه؟ خوب، پس ما باید به بررسی
برای NULL، چرا که همه چیز بد اتفاق می افتد زمانی که اشاره گر خود را NULL است،
از آنجا که شما ممکن است در نهایت رفتن وجود دارد، و شما هرگز نباید رفتن به NULL
بصورت غیر مرجع آن را با عملگر *.
به طوری که خوب است، و چه چیز دیگری کار می کنیم؟ منطقا یک نقص در اینجا وجود دارد بیش از حد.
[پاسخ دانشجویی، ناخوانا]
>> بنابراین اگر argc ≥ 2 چک کنید؟
بسیار خوب، پس 3 اشکالات در این برنامه در اینجا وجود دارد.
ما در حال بررسی در صورتی که کاربر در واقع در هر چیزی به ی argv [1]، خوب تایپ شده است.
پس چه اشکال سوم؟ آره؟
[پاسخ دانشجو، ناخوانا] >> خوب است.
بنابراین ما به بررسی یک سناریو است. ما به طور ضمنی به بررسی حافظه کپی نیست
از طول نوار بیشتر.
بنابراین اگر رشته کاربر تایپ شده در 10 کاراکتر است.
این است که گفت: "فقط کپی 10 کاراکتر است.
و این اشکالی ندارد، اما اگر کاربر در یک کلمه در اعلان تایپ
مانند 20 کاراکتر کلمه این است، گفت: کپی 20 حرف از نوار به چه؟
C، در غیر این صورت به عنوان بافر ما شناخته شده است، که بدین معناست که شما فقط نوشت: اطلاعات
8 مکان بایت است که شما خود را ندارد،
و شما آنها را به این معنا است که شما به آنها اختصاص داده هرگز خود را ندارد.
پس این همان چیزی است که به طور کلی به عنوان حمله سرریز بافر شناخته شده است،
یا حمله بافر تاخت و تاز کردن، و حمله آن به این معنی است که در صورتی که کاربر
یا برنامه ای است که فراخوانی تابع خود را در حال انجام این کار بدتر،
آنچه که در واقع اتفاق می افتد بعدی می تواند بسیار بد است.
>> بیایید یک نگاهی به این تصویر در اینجا.
این تصویر نشان دهنده پشته خود را از حافظه می باشد.
و به یاد بیاورید که هر بار که شما به یک تابع،
این قاب کمی در پشته شما و پس از آن دیگر و پس از آن دیگر و پس از آن دیگر.
و تا کنون ما فقط نوع خلاصه این دور به عنوان مستطیل
هر دو وجود دارد در هیئت مدیره و یا بر روی صفحه نمایش در اینجا.
اما اگر ما در یکی از آن مستطیل زوم،
هنگامی که با شما تماس صنایع غذایی تابع، آن را معلوم می کند که بیشتر در پشته وجود دارد
داخل آن قاب و آن مستطیل
از X و Y و A و B، مانند صحبت کردن در مورد مبادله بود.
به نظر می رسد که برخی از جزئیات سطح پایین تر وجود دارد.
در میان آنها آدرس بازگشت.
بنابراین به نظر می رسد از زمانی که اصلی می نامد صنایع غذایی، اصلی است برای اطلاع رسانی به صنایع غذایی
آنچه که آدرس اصلی است که در حافظه کامپیوتر است.
چرا که در غیر این صورت، به زودی به عنوان صنایع غذایی انجام شده است اجرا، همانطور که در این مورد در اینجا،
یک بار شما در رسیدن به این زانوبند نزدیک فرفری در پایان از کفش،
چگونه هک می کند صنایع غذایی بدانید که کنترل این برنامه قرار است به آن بروید؟
به نظر می رسد که پاسخ به این سوال است که در مستطیل قرمز در اینجا.
این نشان دهنده یک اشاره گر است، و آن را به کامپیوتر برای ذخیره، به طور موقت،
در پشته به اصطلاح آدرس های اصلی به طوری که به زودی به عنوان صنایع غذایی انجام شده است اجرا
کامپیوتر می داند که در آن و چه در خط اصلی برای رفتن به.
ذخیره شده اشاره گر قاب مربوط به طور مشابه به این است.
چهار نوار * در اینجا نشان دهنده چه؟
خوب، در حال حاضر این بخش آبی قاب صنایع غذایی، آنچه که نوار؟
خوب، پس نوار فقط آرگومان به تابع صنایع غذایی است.
>> بنابراین در حال حاضر ما در حال بازگشت به تصویر آشنا است.
بیشتر مسائل و حواس او را پرت بیشتری بر روی صفحه نمایش وجود دارد
اما این بخش نور آبی رنگ است آن چیزی است که ما در حال نقاشی بر روی تخته سیاه را برای چیزی شبیه به مبادله.
این قاب برای صنایع غذایی و تنها چیزی که در آن است در حال حاضر نوار است،
که این پارامتر است.
اما چه چیز دیگری باید در پشته می شود، با توجه به این کد را در اینجا؟
کاراکتر C [12]. بنابراین ما نیز باید به 12 مربع از حافظه را ببینید،
اختصاص داده شده به یک متغیر به نام ج.
و در واقع ما را که بر روی صفحه نمایش.
بسیار بالا وجود دارد C [0]، و پس از آن نویسنده از این نمودار
را به زحمت نمی رسم مربع اما در واقع وجود دارد 12
چرا که اگر شما در سمت راست پایین نگاه کنید، c [11]، اگر شما از 0 تعداد، است که 12 بایت از جمله.
اما در اینجا مشکل این است: که در آن مسیر C رو به رشد است؟
مرتب کردن بر اساس از بالا به پایین، درست است؟ اگر آن را در بالا شروع می شود و به پایین رشد می کند،
به نظر نمیرسد مثل ما به سمت چپ خودمان باند زیادی در اینجا در همه.
ما به نوعی خودمان را به گوشه نقاشی،
و این که C [11] مناسب است تا در برابر بار، که مناسب است تا در برابر اشاره گر پشته قاب،
که مناسب است تا در مقابل آدرس بازگشت، نه بیشتر اتاق وجود دارد.
پس چه مفهوم، و سپس، اگر شما پیچ،
و شما سعی می کنید به خواندن 20 کلمه در ادامه متن را به یک بافر 12-BYTE؟
کجا هستند آن 8 بایت اضافی برای رفتن؟
در داخل هر چیز دیگری که برخی از آنها فوق العاده مهم است.
و مهم ترین چیز، به طور بالقوه، جعبه قرمز وجود دارد، آدرس بازگشت.
از آنجا که فرض کنید که شما یا به طور تصادفی یا adversarially
بازنویسی آن 4 بایت، که آدرس اشاره گر،
فقط با زباله، اما با یک شماره است که اتفاق می افتد به نمایندگی از یک آدرس واقعی در حافظه نیست؟
چه implicaiton، منطقی است؟
[پاسخ دانشجویی، ناخوانا] >> دقیقا. وقتی صنایع غذایی می گرداند
و بازدید که بریس فرفری، برنامه رفتن به ادامه به بخش اصلی برای بازگشت،
آن را به بازگشت به هر آدرس در آن جعبه قرمز است.
>> در حال حاضر، در مورد ثبت نام نرم افزار دور زدن،
آدرس که در حال به بازگشته است تابع
که به طور معمول می شود به نام بعد از شما که برای نرم افزار پرداخت می شود و کد ثبت نام خود را وارد کردهاید؟
شما می توانید از ترفند کامپیوتر را به قصد ندارم در اینجا مرتب کردن، اما به جای آن، بالا رفتن.
یا، اگر شما واقعا باهوش، دشمن در واقع می تواند در در صفحه کلید تایپ،
به عنوان مثال، نه یک کلمه واقعی است، نه 20 حرف است، اما فرض کنید که او
انواع در برخی از کاراکترهایی که نشان دهنده کد؟
و آن را به کد C نخواهد بود، آن را به رفتن به شخصیت ها
که نشان دهنده کدهای باینری به ماشین آلات، 0 و 1 است.
اما فرض کنید که آنها هوشمندانه به اندازه کافی برای انجام این کار، به نحوی به اعلان GetString رب
چیزی است که اساسا وارد شده کد،
و 4 بایت آخر بازنویسی که آدرس بازگشت، و چه آدرس که ورودی انجام دهد؟
آن را در این مستطیل قرمز رنگ آدرس اولین بایت از بافر فروشگاه ها.
بنابراین شما باید واقعا باهوش است، و این است که بسیاری از آزمون و خطا
برای افراد بد وجود دارد، اما اگر شما می توانید شکل از این بافر چقدر بزرگ است،
به طوری که کلمه در ادامه متن چند در ورودی است که شما به برنامه ارائه
اتفاق می افتد به معادل از آغاز بافر خود را به آدرس،
شما می توانید این کار را انجام دهند. اگر ما می گویند، به طور معمول، سلام، و \ 0، که چیزی است که به پایان می رسد تا در بافر است.
اما اگر ما باهوش تر است، و ما با آنچه که ما عموما خواهید تماس بگیرید کد حمله را پر کنید که بافر،
A، A، A، A: حمله، حمله، حمله، حمله، که در آن این است که تنها چیزی که کاری بد است.
خب، چه اتفاقی می افتد اگر شما واقعا باهوش، شما ممکن است این کار را انجام دهند:
در جعبه قرمز است دنباله ای از اعداد: 80، CO، 35، 08 می باشد.
توجه داشته باشید که که منطبق شماره که تا اینجا.
آن را در جهت معکوس است، اما بیشتر در مورد که برخی از زمان های دیگر است.
توجه کنید که این آدرس بازگشت عمدا تغییر داده شده است
را برابر آدرس در اینجا، نه آدرس اصلی.
بنابراین اگر پسر بد هوشمند فوق العاده است، او در حال رفتن به در کد حمله که عبارتند از:
چیزی شبیه به، حذف همه فایل های کاربر است.
یا کپی کردن کلمه عبور، 'یا' ایجاد یک حساب کاربری است که من می توانم به وارد سیستم شوید.
هر چیزی در همه، و این است که هر دو خطر و قدرت از C.
از آنجا که شما باید دسترسی به حافظه از طریق اشاره گر
و بنابراین شما می توانید هر چیزی که در حافظه کامپیوتر می خواهید ارسال کنید.
شما می توانید یک کامپیوتر انجام دهید، هر چیزی که شما می خواهید به سادگی با
پس از پرش در اطراف آن در فضای حافظه خود را.
و بنابراین، برای این روز، به طوری که بسیاری از برنامه و بسیاری از وب سایت هایی که در معرض خطر هستند
جوش پایین به مردم با استفاده از این.
و این ممکن است مانند یک حمله فوق العاده پیچیده به نظر می رسد،
اما این همیشه شروع که راه نیست.
>> واقعیت این است که چه بد از مردم به طور معمول را انجام خواهد داد،
که آیا این برنامه در خط فرمان و یا یک برنامه GUI و یا یک وب سایت،
شما فقط ارائه مزخرف شروع می شود.
شما در یک کلمه واقعا بزرگ را در قسمت جستجو وارد کنید و آمار را تایپ کنید،
شما صبر کنید و اگر تصادفات وب سایت ها را ببینید.
یا شما صبر کنید تا ببینید که آیا این برنامه آشکار برخی از پیام خطا.
از آنجا که اگر شما خوش شانس، پسر بد،
و به شما ارائه برخی از ورودی دیوانه است که سقوط این برنامه،
این بدان معناست که برنامه نویس رفتار بد خود را پیش بینی کنید
که بدین معناست که شما احتمالا می تواند با تلاش به اندازه کافی،
آزمایش و خطا به اندازه کافی، کشف کردن که چگونه به راه انداختن یک حمله دقیق تر است.
بنابراین به عنوان یک بخشی از امنیت است و نه فقط اجتناب از این حملات در مجموع، اما تشخیص آنها
و در واقع در سیاهههای مربوط به دنبال دیدن چه ورودی دیوانه که مردم را به وب سایت خود را تایپ.
چه عبارات جستجو مردم را به وب سایت خود را در امید سرشار برخی از بافر تایپ؟
و این همه جوش پایین به اصول ساده از یک آرایه،
و چه آن معنی برای تخصیص و استفاده از حافظه؟
و مربوط به آن، بیش از حد، این است.
>> بنابراین اجازه دهید فقط نگاه در داخل دیسک سخت دوباره.
بنابراین شما به خاطر از یک یا دو هفته پیش که در زمانی که شما کشیدن فایل
به بن خود را بازیافت و یا سطل زباله، چه اتفاقی می افتد؟
[دانشجو] هیچ چیز نیست. >> آره، مطلقا هیچ چیز. در نهایت اگر شما کم
بر روی فضای هارد دیسک، ویندوز یا Mac OS شروع به پاک کردن فایل ها برای شما.
اما اگر کشیدن چیزی در آن وجود دارد، سپس آن را در تمام امن نیست.
عضو roomate، دوست و یا خانواده خود را به انجام دو برابر شده است، کلیک کنید و voila.
تمام فایل های ناقص که شما سعی در حذف وجود دارد.
بنابراین بسیاری از ما حداقل می دانیم که شما به راست کلیک کنید و یا کنترل کلیک کنید
و خالی کردن سطل زباله، و یا چیزی شبیه به آن است.
اما حتی پس از آن، که نمی تواند کاملا انجام ترفند.
زیرا آنچه اتفاق می افتد زمانی که شما یک فایل را بر روی دیسک سخت خود را
که نشان دهنده برخی از سند Word و یا برخی از JPEG است؟
و این نشان دهنده دیسک سخت خود، و اجازه دهید می گویند این بریدن در اینجا نشان دهنده آن فایل،
و آن را از کل یک دسته از 0 و 1 تشکیل شده است.
چه اتفاقی می افتد زمانی که شما نه تنها به کشیدن این فایل را به trashcan یا سطل بازیافت،
بلکه آن را خالی؟
مرتب سازی بر اساس هیچ چیز نیست. مطلقا هیچ چیزی نیست.
در حال حاضر آن را فقط به هیچ چیز، به خاطر یک چیزی کمی اتفاق می افتد در این جدول است.
بنابراین نوعی از جدول پایگاه داده و یا در داخل حافظه کامپیوتر وجود دارد
که اساسا به 1 ستون برای نام فایل،
و 1 ستون برای محل فایل، جایی که ممکن است این محل 123، فقط یک عدد تصادفی است.
بنابراین ما ممکن است چیزی مانند x.jpg، و 123 محل سکونت داشته باشد.
و آنچه پس از آن اتفاق می افتد، زمانی که شما خالی از زباله های خود را؟
می رود که دور. اما آنچه بین نمی رود. 0 و 1 است.
>> بنابراین چه چیزی است، پس از آن، اتصال به pset 4؟
خوب، با pset 4، فقط به خاطر ما که به طور تصادفی پاک شده
کارت کامپکت فلش است که تا به حال همه از این عکس ها،
یا فقط به این دلیل آن را بد شانس خراب شد،
به این معنا نیست که 0 و 1 هنوز هم وجود دارد.
شاید تعداد کمی از آنها گم بشه چون چیزی خراب کردم
در این معنا که برخی از 0 1 و 1 شد شد 0 است.
کارهای بد می تواند رخ دهد به دلیل اشکال از نرم افزار یا سخت افزار معیوب است.
اما بسیاری از کسانی که بیت، شاید حتی 100٪ از آنها هنوز هم وجود دارد،
آن را که فقط کامپیوتر و یا دوربین نمی دانم از کجا JPEG 1
و که در آن JPEG 2 شروع شده است، اما اگر شما، برنامه نویس،
می دانید، با کمی زرنگ و دانا، که در آن کسانی که عکس JPEG هستند و یا آنچه که آنها مانند نگاه،
شما می توانید از 0 و 1 و تجزیه و تحلیل می گویند، "اوه. JPEG. آه، JPEG.
شما می توانید یک برنامه را در اصل فقط برای ارسال و یا در حالی که حلقه
که هر یک از آن فایل ها را بازیابی.
پس درس پس از آن، این است که شروع به "امن" پاک کردن فایل های خود را
اگر شما می خواهم برای جلوگیری از این در دسترس نباشد. بله؟
[سوال دانشجو، ناخوانا]
>> دارای حافظه بیشتری از شما قبل از انجام -
آه! خوب سوال. پس چرا، پس از آن، بعد از تخلیه سطل زباله،
کامپیوتر خود را به شما بگویم که شما باید فضای آزاد بیشتر از شما قبل از انجام؟
به طور خلاصه، به دلیل آن را دروغ می گوید. با مشخصات فنی، شما دارای فضای بیشتری است.
از آنجا که در حال حاضر شما گفته اند، شما می توانید چیزهای دیگر را که در آن است که فایل یک بار قرار بود،
اما این به این معنا نیست که این بیت ها رفتن به دور،
و این به این معنا نیست که این بیت ها در حال تغییر همه 0، برای مثال، برای حفاظت از حقوق شما است.
در مقابل، اگر شما "امن" فایلهای پاک کردن، و یا از نظر جسمی نابود کردن دستگاه،
که واقعا تنها راه است، گاهی اوقات، در اطراف آن است.
پس چرا در آن توجه داشته باشید نیمه ترسناک نیست را ترک کند، و ما شما را در روز دوشنبه را ببینید.
CS50.TV