[Powered by Google Translate] [HƏFTƏNİN 5]
[David J. Malan, Harvard Universiteti]
[Bu CS50 edir.] [CS50.TV]
[Qadın] O yalançı oldu; nə, mən bilmirəm.
[Man] Beləliklə, biz nə bilirik?
[Qadın] 9:15-da, Ray Santoya ATM-da idi.
[Man] Belə ki, sual, o, 9:16-da nə idi?
[Qadın] bir şey də 9 mm Atışma.
Bəlkə o snayper gördüm.
[Man] Yoxsa özü ilə çalışır.
[Qadın] gözləyin. Bir geri gedin.
[Man] Siz nə görürsünüz?
[♫ Suspenseful musiqi ♫]
[Qadın] onun üz gətirin. Tam ekran.
[Man] Onun camlar. >> Əks var.
[♫ Suspenseful musiqi ♫]
[Man] Bu Nuevita nin beysbol komanda var. Bu onların loqosu var.
[Qadın] Və o pencək geyən var kim söhbət edir.
>> [David Malan] Belə ki, bu CS50 həftə 5, və bu gün biz sizin üçün televiziya və film bir qədər məhv.
Belə ki, burada bu kimi bir şou seyr etdiyiniz zaman,
və polislər "Əgər qədər təmiz edə bilərəmmi?" deyə və ya "gücləndirilməsi"
real dünyada artırmaq yoxdur.
Əslində, nə həqiqətən almaq bu kimi bir az bir şey.
Mən səhifə heyəti photos birini çıxardı etdik.
Bu Photoshop adlı bir proqramdır. Bu, 2 Bowdens 1 deyil
Həqiqətən 1 3 Bowdens, bu gün biz Rob və Paul ilə, həmçinin burada xanım Bowden var.
Amma burada ekranda Rob və əgər o həmişə onun göz idi ki glint üzrə biz zoom,
nə həqiqətən görmək nə görmək almaq nə olduğunu.
Bu, "inkişaf etmiş" belə "CSI" bu bir az səhv var.
Biz yalnız bir az daha "CSI haqqında" seçə bilərsiniz, əgər başqa bir klip var.
Bu bir siz istəyirsinizsə bundan sonra tələffüz üçün gözəl ifadə edilir
həqiqətən, siz tamamilə heç bir şey söyləyərək etdiyiniz zaman, sizin dostları ilə texniki səs.
>> [Man] həftə, mən Cabby Killer cinayətlərin istintaq olduğunuz
müəyyən bir xəstə lətafət ilə.
[Qadın # 1] Bu real vaxt var.
[Qadın # 2] Mən IP ünvan takip edə bilərsiniz görmek, Visual Basic istifadə GUI interface yaratmaq lazımdır.
>> [Malan] Visual Basic istifadə GUI interface yaratmaq, kənara sync həyata Ona görə audio
IP ünvanı izlemek üçün tam cəfəngiyyatdır.
Bu gün siz, Visual Basic istifadə deyil
bir GUI ehtiyac yoxdur, və IP ünvan bir texniki dəqiq termin idi.
Belə ki, bu bir göz saxlamaq və mənim favoritlərindən biri:
Başqa bir dil bilmək lazımdır, çünki bu bir, bir az daha gizli deyil.
C. bir superset olan Objective-C adlı dil, var
Hansı onlara obyekt-yönümlü proqramlaşdırma arasında bu C plus bəzi əlavə xüsusiyyətləri, deməkdir.
Bu Apple iOS proqramlaşdırma təbliğ ki dilidir.
Və burada "Nömrələr" dan tamamilə fərqli bir şou bir klip var
ki, siz həqiqətən hüququ hazırda TiVo və fasilə yaxından baxsaq,
nə onlar aradığınız tamamilə təsvir olunur nə olduğunu görəcəksiniz.
Və mənə burada müxtəlif audio ölçüsü cəhd və biz əgər görək
senkronize audio bu zaman saxlayır.
Mən "Nömrələr". Verir
>> [Man # 1] Bu 32-bit IPv4 ünvanı var.
[Man # 2] IP ki, İnternet var. >> Şəxsi şəbəkə. Bu Anita xüsusi şəbəkə var.
[Malan] Okay. Bu Objective-C, və bəzi uşaq boyayıcı proqramı var
bəlkə var dəyişən adından nəticə çıxarmaq olar.
Belə ki, o, "Nömrələr." Idi Biz təqdim gün və bu həftə Belə ki,
Suclari və buna görə də problemləri kontekstində dünya bir az.
Burada xüsusi bir hadisə var, çünki bu gün qısaldılmış mühazirə olacaq
Sonra biz tələbələr və eyni valideynləri bu gün də bir peek almaq və dolaşmaq lazımdır
üfüqdə olan bəzi şeyləri ilə.
Onların arasında Bazar ertəsi kimi, bir neçə sinif yoldaşları olacaq.
EdX, Harvard və açıq Courseware üçün MITs yeni online təşəbbüs
və daha çox bazar ertəsi Harvard nin kampus başlayır.
Gəlmək Bazar ertəsi deməkdir hansı olacaq - son sayı kimi,
86,000 əlavə sinif yoldaşları CS50 nin mühazirə ilə birlikdə aşağıdakı olunacaq
və bölmələr və walkthroughs və problem dəsti.
Bu hissəsi kimi, siz ilk sinif üzvləri olacaq
CS50 və indi CS50x.
>> Bu hissəsi kimi, indi, eləcə də bəzi upsides olacaq bilirik.
Tələbələrin kütləvi sayı, buna hazır olmaq üçün,
Təkcə onu demək kifayətdir ki, biz 108 TFS və CA'lar olsa da,
olduqca yaxşı tələbə / müəllim nisbəti biz 80,000 digər tələbələr təşkil dəfə.
Beləliklə, biz bir çox problem sınıflandırma etmək fikrində deyilik əl qoyur.
Yəni problem set bu həftə təqdim CS50 Check olacaq
Aracın ərzində bir command line kommunal olacaq olan
Bu həftə sonu sonra yeniləmək bir dəfə almaq lazımdır ki,
və bir funksiyanı çalıştırın bilərsiniz, 50 yoxlamaq
öz pset, və siz proqram müəyyən etmək üçün bir geri bildirim almaq lazımdır
doğru və ya yanlış biz təmin etdik ki, müxtəlif dizayn spesifikasiyaları görə.
Belə ki, daha çox və problem set dəqiqləşdirilməsi və
bu CS50x sinif yoldaşları kimi bu istifadə olunacaq.
>> Belə ki, problem set 4 Suclari haqqında bütün edir.
Bu parça, bəzi real həyat stuff ilə ilham
Mən məktəbin məzunu olub vasitəsi zaman, mən bir müddət interned
bu Middlesex Şəhristanı nin rayon prokuroru Prokurorluğu məhkəmə işi
onların aparıcı məhkəmə müstəntiq ilə və nə edib
Mən bir neçə həftə keçmiş qeyd edirəm ki, kütləvi Dövlət polis və ya başqaları edir
gəlib ki, onlar ağır sürücüler və CD və disketleri kimi şeylər yuxulamaq ki,
və sonra kimi, və Suclari ofis məqsədi müəyyən olub
var idi və ya bəzi növ sübut yox idi.
Bu Xüsusi Təhqiqatlar vahidi idi, belə ki, ağ yaxasına cinayət idi
bu cinayətlərin daha narahatedici sort idi
digital media bir növ cəlb bir şey; çıxır ki, bir çox insanlar
deyərək bir e-poçt yazmaq "Mən bunu etdim."
Belə ki, tez-tez bu Suclari axtarışlar, bütün çox meyvə qədər dönmədi
amma bəzən insanlar bu cür e-poçt yazmaq olardı.
Belə ki, bəzən səylərini təltif edilmişdir.
>> Amma bu məhkəmə pset qədər səbəb, biz pset 4 qrafik bir qədər də təqdim edəcəyik.
Beləliklə, siz yəqin ki, verilmiş, JPEGs, gifs və bu gün kimi, bu şeyi etmək
amma həqiqətən bu barədə düşünüyorsanız, bir şəkil, çox Rob üzü kimi,
bir nöqtə ardıcıllığı, və ya piksel kimi modelləşdirilmişdir bilər.
İndi Rob üzünü halda, rəng bütün növ var
və biz otherwide piksel kimi tanınan fərdi nöqtələr görmək başladı
bir dəfə biz da zoom başladı
Amma biz dünyada bir qədər sadələşdirmək, və yalnız burada bu Rob ki, əgər
ağ-qara, yaxşı, təmsil qara və ağ biz yalnız ikili istifadə edə bilərsiniz.
Və biz ikili istifadə etmək olacaq əgər, 1 və ya 0, biz bu eyni image ifadə edə
bit bu model ilə Rob-nin smiling üz: 11000011 təmsil
ağ, ağ, qara, qara, qara, qara, ağ ağ.
Və belə rəngli fotoşəkillər söhbət başlamaq, sonra böyük bir sıçrayış deyil.
Siz Facebook və ya bir digital kamera ilə edəcək şeylər
lakin, şübhəsiz, rəng gəldikdə, daha çox bit lazımdır.
Və fotoşəkillər dünyada çox ümumi deyil, 1-bit rəng istifadə
Bu təklif, lakin 24-bit rəng, həqiqətən milyon rəng almaq yerləşir. kimi
Beləliklə, biz Rob göz üzrə zoomed zaman olduğu kimi,
ki, müxtəlif rəngli imkanları milyonlarla hər hansı bir sayı oldu.
>> Belə ki, biz, problem set 4 habelə gözden geçirmek bu tətbiq edəcəyik
çünki burada cümə mühazirə adi 2:30 əvəzinə 3:30 gün olacaq.
Lakin video, həmişə olduğu kimi, sabah online olacaq.
Biz də başqa bir fayl formatında sizə təqdim edəcəyik.
Belə ki, bu qəsdən, ilk qorxuducu baxmaq üçün nəzərdə tutulur
amma bu C struct üçün bəzi sənədlərin edir.
Bu, Microsoft, il əvvəl bu formatda yayılmasına kömək çıxır ki,
bu bitmap fayl biçimi, BMP və bu super-sadə idi adlı
çox bir müddət istifadə edilmişdir ki, rəngarəng qrafik fayl format
və bəzən də masa üzərində divar kağızları üçün.
Windows XP və yuvarlanan təpələri və mavi göyə geri düşünüyorsanız,
ki, adətən bir BMP, və ya bitmap şəkil və bitmaps idi
onlar bir az daha mürəkkəbliyi, çünki bizim üçün fun olunur.
Bu 0 və 1-in bu grid kimi olduqca kimi sadə deyil;
əvəzinə, bir fayl əvvəlində bir mövzu kimi şeylər var.
Belə ki, başqa sözlə, a. Bmp faylı içərisində 0 və 1-in bütün dəstə edir
lakin bəzi əlavə 0 və 1-in orada var.
Və bu il üçün verilən nə biz yəqin ki, qəbul etdiyiniz çıxır
. doc və ya. xls və ya. mp3 və ya. mp4, kimi fayl formatları
sizinlə tanış olduğunuzu nə fayl formatları.
Yaxşı, nə belə bir fayl format olmaq deməkdir?
Günün sonunda Çünki, biz istifadə bu faylları bütün yalnız 0 və 1-in
və bəlkə bu 0 və 1-in a, b, c, ASCII və ya analoji ilə təmsil
ancaq günün sonunda vasitəsilə, yalnız 0 və 1-in var.
>> Belə ki, insanlar yalnız hərdənbir yeni bir fayl format icad qərar
onlar bit nümunələri həqiqətən demək olacaq nə standartlaşdırmaq yerləşir.
Burada bu halda, insanlar bu bitmap fayl biçimi nəzərdə edən
bir bitmap fayl ilk byte ilə, kimi ofset 0 qeydi ki, var,
bəzi cryptically adına dəyişən adlı bfType olması orada olacaq
olan yalnız bitmap fayl növü üçün dayanır, bu nə bitmap fayl növü.
Siz 2 ofset ki, ikinci sırada, byte sayı 2-dən, bəlkə də, nəticə çıxarmaq olar
0 və 1-in nə təmsil bir model var?
Bu bir şey ölçüsü, və oradan gedir.
Belə ki, problem set 4, bu bəzi şeyləri vasitəsilə getdi olacaq.
>> Biz onların bütün haqqında qayğı başa, lakin qeyd edəcək maraqlı almaq başlayır
xətti və ya byte 54, rgbtBlue, Yaşıl və Qırmızı ətrafında.
Heç kısaltma RGB, qırmızı yaşıl mavi eşitdim, bu ki, bir istinad edir.
O çıxır Çünki göy qurşağı bütün rəngləri boya bilər
qırmızı və mavi və yaşıl bəzi birləşməsi ilə.
Və əslində otağında valideynlər erkən proyektorlar bəzi xatırlayıram bilər.
Bu gün, yalnız 1 parlaq işıq bir lens çıxan görürük.
Amma geriyə gün, siz qırmızı lens, mavi lens, yaşıl lens idi
və birlikdə onlar ekran yönəlmiş və rəngarəng şəkil formalaşmışdır.
Və tez-tez orta məktəblərdə və ali məktəblərdə bu linzalar var ki,
həmişə belə az əyri, belə ki, iki və ya üç images görən sort idi
amma fikri idi. Siz bir şəkil rəsm qırmızı və yaşıl və mavi işıq idi.
Və eyni prinsip kompüter istifadə olunur.
>> Belə problemlər arasında, sonra, sizin üçün problem 4-müəyyən
bir neçə şey olacaq; bir həqiqətən bir şəkil ölçüsünü üçün.
0 və 1-in bir model üçün,
, 0 və 1-nin chunks bir strukturunda nə kimi təmsil anlamaq
da Reds, blues, göyərti: və sonra piksel kopya necə anlamaq
Belə ki, içərisində bir şəkil əvvəlcə bu kimi görünür zaman, ondan sonra yerinə bu kimi baxmaq bilər.
Digər problemlər arasında, çox, siz təhvil lazımdır ki, olacaq
bir digital kamera faktiki fayl məhkəmə image
və kamera, bir müddət sonra, photos, bir dəstə idi.
Bu problem, biz təsadüfən silinə və ya image birtəhər bad idi olunur.
Pis şeylər digital kameralar ilə baş və biz tez 0 və 1-in bütün sitemizi
off sizin üçün ki, kart, 1 böyük fayl onları xilas, sonra biz onları sizə təslim olacaq
siz bərpa etmək ilə C bir proqram yazmaq olar ki, problem 4-müəyyən
o JPEGs bütün ideal.
Və bu, onlar bir qədər mürəkkəb fayl formatı olmalarına baxmayaraq ki, JPEGs çıxır
onlar daha mürəkkəb burada bu smiling üz çox istəyirik.
Bu, hər JPEG 0 və 1-in eyni nümunələri ilə başlayan çıxır.
Belə ki, loop və ya oxşar üçün bir müddət loop və ya istifadə edərək,
bütün 0 və 1-in bu məhkəmə image üzərində təkrarlamaq bilər
və problem set dəqiqləşdirilməsi müəyyən olan xüsusi model görmək hər zaman,
siz çox yüksək ehtimalla, "Oh, burada, kəsb edə bilər
JPEG başlanması və tezliklə tapa eyni model,
sonra bayt və ya kilobayttan ya megabayt bəzi sayı,
siz Ooh, güman edə bilərsiniz! Burada ikinci JPEG, mən birinci sonra aldı foto edir.
Mənə ilk fayl oxu dayandırmaq ki, bu yeni bir yazmağa başlayın.
Və pset 4 üçün proqram çıxış kimi çox 50 kimi JPEGs olacaq.
50 JPEGs deyil varsa, siz bir loop bir az var.
Siz JPEGs bir sonsuz sayda varsa, siz sonsuz loop var.
Belə ki, çox, çox ümumi bir hal olacaq.
Bu üfüqdə nə var.
>> Arxamızda, 0 viktorina. Həyata, mənim e-poçt hər ki, daim insanlar var
xoşbəxt, neytral növ və viktorina ətrafında kədərli 0 dəfə də olan.
Və baş TFS, Zamyla, öz TF mənə çatmaq edin
şeyi getdi necə müzakirə etmək istəyirsinizsə, siz bilirsiniz ki, CAS və ya bir.
>> Belə ki, oda burada valideynlər impress
bu CS50 kitabxana nədir? Yaxşı iş.
Bu CS50 kitabxana nədir? Evet? [Tələbə cavab anlaşılmaz]
>> Okay yaxşı. Belə ki, biz, işçi heyəti, yazdığı bir kod prewritten dəsti var,
biz bəzi ümumi funksiyaları təmin etmək üçün təmin edir.
Burada listelenen funksiyaları bütün, mənə bir int almaq; Mənə bir string almaq istəyirəm mövzusu.
Indi başlayaraq, biz, həqiqətən, bu təlim təkərlər çıxarmaq başlayın.
Belə ki, siz bir "string" üz etmək başlamaq olacaq
ki, geri, nə faktiki data növü üçün yalnız bir sinonimi idi? char *.
Belə ki, valideynlər üçün ki, yəqin idi - yaxşı ki, char * görürük başlarsınız
ekranda bütün bizim lüğət-dən "string" aradan qaldırılması kimi,
həqiqətən kodu yazılı gəldiyi azı zaman.
Eynilə, biz çox kimi funksiyaları bəzi istifadə dayandırmaq lazımdır
proqramlar daha mürəkkəb almaq üçün gedir çünki
deyil, yalnız tez yanıb-sönən ilə oturmaq proqramlar yazmaq
da bir şey yazın istifadəçi gözləyir
Siz başqa yerdə sizin giriş almaq lazımdır.
Məsələn, yerli sabit bit bir sıra onları almaq lazımdır.
Siz əvəzinə bəzi veb haradasa, bir şəbəkə gələcəkdə onları almaq lazımdır.
Belə ki, ilk dəfə geri bu qat qabığı edək və CS50 cihaz qoparmaq
siz həftə o cümlədən kəskin olmuşdur etdiyiniz CS50.h adlanır və bu faylı.
>> Amma nin əslində bu daxilində nə görmək bildirin.
Belə ki, mavi faylı üst, yalnız şərh bütöv bir dəstə edir
zəmanət informasiya və lisenziya. Bu ümumi paradiqma növ edir
proqram, çünki proqram bir çox bu gün "açıq mənbə" adlı nə
olan kimsə kodu yazılı o deməkdir ki,
və, yalnız run və istifadə üçün, sərbəst mövcud
ancaq oxumaq və dəyişdirmək və öz iş inteqrasiya.
Belə ki, siz, açıq proqram istifadə etdiyiniz nə
çox kiçik bir formada olsa.
Mən şərh keçmiş aşağı diyirləyin varsa, baxmayaraq ki, biz bir daha tanış şeyi görmək üçün başlamaq lazımdır.
Belə ki, CS50.h fayl mövzu faylları bütün dəstə daxildir ki, burada üst bildiriş.
İndi, bu ən biz əvvəl görməmişəm, lakin bir
tanış, bu, hansı ki, biz qədər qısa olsa da, gördüm?
Bəli, standart kitabxana. Stdlib.h, malloc var
belə bir dəfə biz, dinamik yaddaş ayrılması haqqında söhbət açılmış
biz də gələn həftə qayıda bilərsiniz ki, fayl o cümlədən başladı.
Bu bool və həqiqi və saxta həqiqətən, hər se, C yoxdur çıxır ki,
Burada bu fayl daxil olmasın.
Belə ki, həftə, standart bool.h o cümlədən edilmişdir
Siz, bool doğru və ya yalan. anlayışı istifadə edə bilərsiniz, belə ki,
Bu olmadan, siz saxta onun sort və bir int istifadə etmək olardı
və yalnız özbaşına 0 yalan və 1 doğru olduğunu daşımır.
>> İndi biz daha aşağı diyirləyin əgər burada simli bizim müəyyən edilməsidir.
Bu * olduğu həqiqətən Fərq etməz ki, biz əvvəl deyib sonra kimi çıxır.
Siz hətta bütün ətrafında yer ola bilər.
Biz bu dövr, bu * növü ilə nə var ki, aydın etmək üçün bu kimi təşviq edilmişdir.
Amma bir az daha çox olmadıqda, orada qoymaq üçün, kimi ümumi, həyata
lakin funksional eyni şey.
Daha aşağı oxumaq Lakin indi, demək nəzər, GetInt, qoy
biz başqa bir şey Bu dövr əvvəl, bəlkə də ki, istifadə çünki.
Burada GetInt edir. Bu nədir?
Bu prototip edir. Belə ki, tez-tez biz bizim zirvələrində prototipləri qoyduq. C faylları,
ancaq mövzu faylları. h faylları ilə prototipləri bilər
burada bu biri kimi, belə ki, bəzi funksiyaları yazmaq zaman
digər insanlar istifadə etmək istəyirəm ki, o, CS50 kitabxana ilə tam halda
siz CS50.c kimi bir şey sizin funksiyaları həyata deyil, yalnız
siz də deyil, bir fayl üst prototipləri qoymaq, lakin bir mövzu fayl başında
o header file, dostları və həmkarları daxildir nə
kəskin öz kodu daxildir.
Bütün bu dəfə Beləliklə, siz bu prototipləri bütün o cümlədən olduğunuz
effektiv fayl üst, lakin bu, kəskin yolu ilə mexanizmi daxildir
ki, mahiyyətcə nüsxə və pastalar öz bu faylı.
İndi burada kifayət qədər ətraflı sənədləşdirmə edir.
>> GetInt bir int olur ki, verilmiş Biz olduqca çox qəbul etdik,
bir künc hallarda var həyata lakin o, sağ çevrilir?
Nə yol çox böyük ki, bir sıra istifadəçi əgər?
Yalnız int daxilində uyğun bilməz ki quintillion?
Gözlənilən davranış nədir? Yaxşı, ideal, bu, əvvəlcədən var.
Belə ki, bu halda, həqiqətən, gözəl çap oxumaq
Əgər xətti oxumaq mümkün olmadıqda, bu gəlirlər INT_MAX görəcəksiniz.
Biz bu barədə danışdı, lakin onun kapitallaşdırılması əsasında heç etdik
yəqin ki, nə?
Bu daimi, buna yəqin ki, elan edir ki, bəzi xüsusi daimi var
fayl qədər yüksək ki, bu mövzu faylları biri,
və INT_MAX yəqin ki, 2 milyard təxminən kimi bir şeydir.
Biz elə bir şey demek lazımdır ki olan ideya, səhv getdi
biz, bəli, bizim sərəncamında 4 milyard ədəd var
2 milyard mənfi 2 milyard vermək və ya almaq.
Yaxşı, nə proqramlaşdırma ümumi yalnız bu nömrələrdən birini oğurlamaq deyil.
Bəlkə 0, bəlkə 2 milyard, bəlkə mənfi 2 milyard.
Siz dünyanın öhdəliyi ki, Belə ki, sizin mümkün dəyərlərindən birini sərf
bir şey yanlış gedir ki, bu super-böyük dəyər qayıdacaqlar.
Lakin, istifadəçi kimi sirli bir şey yazaraq istəmirəm "4, 2, 3 ..."
həqiqətən böyük sayı, burada daimi əvəzinə ümumiləşdirmək.
Belə ki, həqiqətən, siz son bir neçə həftə anal olan halda,
siz GetInt zəng zaman, bir halda şərti ilə yoxlanılması lazımdır.
, Daha dəqiq desək, INT_MAX istifadəçi növü mi
GetInt qaytarılması INT_MAX idi? Çünki əgər,
əslində onlar yazın anlamına gelir; bir şey bu halda yanlış getdi.
Belə ki, bu ümumiyyətlə yalnız xüsusi deməkdir "sentinel" dəyər kimi tanınan nə edir.
>> Yaxşı, indi də. C faylları öz növbəsində imkan verir.
C fayl, bir müddət cihaz mövcuddur
və əslində, cihaz sizin üçün precompiled var
ki, bir şey daxil edirik ", obyekt kodu" adlı
sistem bilir, çünki olduğu, lakin bu yalnız sizin üçün fərqi yoxdur,
Bu halda, o, olduğu Aracın.
Amma nin GetInt artıq aşağı diyirləyin bildirin, və GetInt bütün bu vaxt işləyir necə.
Belə ki, burada biz əvvəl oxşar şərh yoxdur.
Mənə yalnız kodu hissəsi üzrə Yakınlaştırmak edək
və nə biz GetInt üçün belədir.
(Doğru), biz qəsdən sonsuz loop isə, heç bir daxil edir və bir int qaytarır
lakin, güman ki, biz birtəhər bu çıxmaq və ya bu ərzində qayıtmaq lazımdır.
Belə nin necə bu işlər görək. Yaxşı, biz GetString istifadə görünür
loop, 166 daxilində bu ilk xətti.
Bu artıq yaxşı təcrübə çünki hansı şəraitdə
GetString bu xüsusi söz, NULL qayıtmaq olar?
Bir şey yanlış gedir edin. Siz GetString kimi bir zəng zaman yanlış getmək bilər?
Evet? [Tələbə cavab anlaşılmaz] >> Bəli. Belə ki, bəlkə malloc bilmir.
Somewhere başlıq GetString altında, malloc çağırır
olan kompüter mağaza imkan verir, yaddaş ayırır
xarakterlərin bütün klaviatura daxil istifadəçi növləri.
Və istifadəçi pulsuz zaman bütün çox idi güman
və 2 milyard simvol artıq, məsələn, daha yazılmış.
Kompüter daha çox simvol hətta RAM var.
Yaxşı, GetString, siz ki, demek etmək üçün var
bu super, super nadir künc halda belə.
O, elə bu idarə etmək üçün var, və GetString
biz geri və onun sənədləri oxumaq, əslində, NULL qayıtmaq deyil.
GetString NULL geri uğursuz İndi əgər GetInt uğursuz gedir
yalnız bir keşikçi kimi INT_MAX qaytarılması ilə.
Bu yalnız insan konvensiyalar var. Bu bilirsən yeganə yolu olduğu
sənədlərin oxu edir.
Beləliklə də int həqiqətən GotInt olduğu üçün aşağı diyirləyin bildirin.
>> Mən bir az daha aşağı diyirləyin Belə ki, xətt 170-ci ildə biz bu xətləri yuxarıda Şərh yoxdur.
Belə ki, biz, 172, bir int n və char c, və bu yeni funksiya elan
siz bəzi əvvəl rast stumbled, lakin sscanf var.
Bu simli scan f dayanır.
Yəni, mənə bir string verir və mən faiz informasiya ədəd üçün tarar.
Belə ki, nə deməkdir? Yaxşı, mən klaviatura 1 2 3 sanki yazın güman
və sonra daxil edib. GetString geri zaman 1 2 3 data type nədir?
Bu hüququ, açıq-aydın bir simli var? Mən bir simli var, belə ki, 1 2 3 həqiqətən "1 2 3" dir
Bunun sonunda \ 0. Bir int deyil.
Yəni bir sıra deyil. Bu, bir sıra kimi görünür, ancaq faktiki olaraq deyil.
Belə ki, nə GetInt nə var? Bu, sağ ki, simli scan var
1 2 3 \ 0, birtəhər faktiki tam onu ​​çevirmək.
İndi siz bunu necə anlamaq bilər.
Siz pset 2 geri düşünüyorsanız, ehtimalla bir az rahat əldə
Sezar və ya vigenere ilə belə bir simli üzərində təkrarlamaq bilər
Siz pick ilə ints üçün chars çevirə bilərsiniz. Iş bütün çox var.
Niyə ki, ki sscanf kimi bir funksiyası zəng deyil?
Belə sscanf simli olan xətti deyilən bu halda, bir arqument gözləyir.
Daha sonra, quotes, printf çox oxşar bilersiniz
Bu string görmək nə gözləyirsiniz?
Mən burada dedi alıram, mən bir decimal sayı və bəlkə bir xarakter görmək gözləyirik.
Bu yalnız bir anda halda niyə və görəcəyik.
Bu notation indi məhsulları xatırladan çıxır
biz yalnız bir həftə əvvəl artıq söhbət başladı.
>> Nədir və n və & c burada bizim üçün bunu? [Tələbə cavab anlaşılmaz]
>> Bəli. Mənə c n və ünvanı ünvanı verilməsi oldu.
İndi niyə vacibdir? Yaxşı bilirsiniz ki, C funksiyaları ilə
Siz həmişə bütün bir dəyəri və ya heç bir dəyəri ola bilər.
Siz int, bir simli, bir float, bir char, nə ola bilər.
Və ya etibarsız ola bilər, lakin yalnız maksimum 1 şey ola bilər.
Lakin burada biz sscanf bəlkə bir int, bir decimal sayı, mənə qayıtmaq istəyirəm
və həmçinin char, və bir anda nə char izah edəcəyik.
Beləliklə, siz səmərəli f 2 şeyi qayıtmaq istəyirəm ki, həmin C. yalnız mümkün deyil
Belə ki, 2 ünvanları keçən ki, ətrafında iş
bir funksiyası 2 ünvanları əl kimi ki, funksiyası onlara nə edə bilər çünki?
O URL yaza bilərsiniz. Siz * əməliyyat istifadə və bu URL-hər "getmək" bilərsiniz.
Bu backdoor mexanizminin sort, ancaq dəyişənlərin dəyərləri dəyişdirmək üçün çox ümumi
Bu halda 2-ci yalnız 1 yer, daha çox.
İndi == to1 kontrol, və o, əslində, doğru ilə qiymətləndirmək əgər n qaytarılması alıram bilərsiniz.
Belə ki, nə olub? Yaxşı, texniki, biz, həqiqətən GetInt baş istəyirəm bütün bu.
Biz danışmaq, analiz etmək istəyirəm, biz string oxumaq istəyirəm
"1 2 3" və bir sıra var kimi görünür, əgər
nə biz sscanf izah etdiyiniz mənim üçün bu dəyişən n ki sayı 1 2 3 qoymaq deyil.
Niyə, sonra mən də bu var idi?
Də sscanf, burada bir xarakter ala bilər deyərək rolu nədir.
[Tələbə danışan anlaşılmaz] >> deyil - bir kəsir iş bilər.
Bir an düşündüm ki keçirəcək edək. Nə?
[Tələbə, anlaşılmaz] >> Beləliklə, yaxşı fikir, bu NULL xarakterli ola bilər.
Bu halda, həqiqətən deyil. Evet? [Tələbə, anlaşılmaz]
>> >> ASCII. Və ya, mənə daha da ümumiləşdirmək bildirin.
Orada% c yalnız səhv yoxlanılması üçün.
Biz nömrə sonra xarakter olmalıdır istəmirəm
lakin nə bu mənə imkan verir aşağıdakı kimidir:
Bu sscanf, burada bu nümunə, n və c dəyərləri saxlanılması ilə yanaşı, çıxır
bunun da dəyişənlərin sayı qaytarır bilir nə daxil dəyərlər put
Yalnız sonra 1 2 3 yazın Belə ki, yalnız% d uyğun gedir
və yalnız n 1 2 3 kimi dəyəri ilə saxlanılan olur və heç bir şey c qoymaq olur;
c belə danışmaq, bir zibil dəyər olaraq qalır.
Bəzi dəyəri başlatılmış edilmişdir heç Zibil çünki.
Mən o göstəricilərinə biri yaşadığı Çünki bu halda, sscanf, 1 qaytarır
Bu halda, böyük. Mən int var, mən yaddaş pulsuz xətti azad
ki GetString həqiqətən ayrılmış, sonra n qaytarın.
Ki, yeniden yerləşir heç merak əgər Else, bəyanat gəlir, burada gəlir.
Əgər, əksinə, mən 1 2 3 foo yazın
mətn yalnız bir təsadüfi sequence, sscanf bax gedir
f - ooh, ooh, sayı sayı ooh, sayı ooh.
Və n 1 2 3 qoymaq olacaq.
Bu c f qoymaq və sonra 2 qayıtmaq olacaq.
Belə ki, biz, yalnız scanf davranışı əsas anlayışı istifadə edərək, var
çox sadə yolu - yaxşı, ilk baxışda kompleks, ancaq günün sonunda,
deyərək kifayət qədər sadə mexanizm var, bir int və əgər edir ki, aşkar edən yeganə şey?
Burada ağ kosmik qəsdən edir. Siz sscanf üçün sənədlərin oxuya edin
ki, siz əvvəlində və ya sonunda ağ kosmik bir parça daxil etsəniz, deyir
sscanf çox boşluq 1 2 3 hit, hər hansı səbəbdən, istifadəçi imkan verir ki, qanuni olacaq.
Onlar əvvəlində və ya sonunda boşluq edib yalnız ona görə ki, istifadəçi da fəğan deyil
istifadəçi dostu bir az çoxdur.
>> Hər hansı sual, sonra GetInts haqqında? Evet?
[Tələbə sual, anlaşılmaz]
>> Yaxşı sual. Yalnız bir char çap əgər, e, və hit kimi daxil nədir
heç 1 2 3 yazaraq olmadan, siz kodu bu xətti davranış sonra nə düşünürsünüz?
Belə sscanf də ki, əhatə edə bilər bu halda, çünki,
o n və ya c doldurmaq niyyətində deyil; əvəzinə 0 qayıtmaq olacaq.
Istəyirəm gözlənilən dəyəri 1 çünki bu halda, mən də ki, ssenari tutmaq alıram.
Mən yalnız 1 istəyirəm və yalnız 1 şey doldurulmalıdır. Sual Yaxşı. Digər?
>> Bütün hüquqlar, belə ki, burada funksiyaları bütün vasitəsilə getmək deyil, qoy
amma qalan faiz, bəlkə də, görünür ki, bir
o çıxır çünki GetString ki GetFloat, GetInt,
Bütün ayaqla zərbə GetString öz funksionallıq bir çox GetLongLong, GetDouble.
Belə nin burada həyata necə nəzər salaq.
Bu bir az mürəkkəb görünür, ancaq eyni əsasları istifadə
Biz keçən həftə söhbət başlamışdır. Belə GetString olaraq,
olan qədər burada boşluğu kimi heç bir dəlil edir
və simli qaytarır; mən bufer adlı simli bəyan edirəm.
Mən, həqiqətən, hələ istifadə etmək üçün nə bilmirəm, amma biz görəcəksiniz.
Qabiliyyəti kimi görünür default, 0,, ​​bu hara getdiyini olduqca əmin deyil.
Not n hələ istifadə etmək üçün neler əmin olun.
Amma indi ki, belə line 243, bir az daha maraqlı əldə edir
biz int c, bu axmaq ətraflı növ bəyan edir.
A char 8 bit və 8 bit neçə müxtəlif dəyərlər saxlaya bilərsiniz?
256. Siz 256 müxtəlif ASCII Sandıqı istəyirsinizsə problem deyil,
orada geri düşünüyorsanız, və bu alarkən bir şey deyil.
Ki, böyük ASCII chart geri edirəm Amma əgər biz həftə əvvəl idi,
Bu halda, 128 və ya 256 ASCII simvol var idi.
Biz bütün 0 nin nümunələri və 1 qədər istifadə olunur.
Əgər səhv aşkar etmək istəyirəm ki, əgər bir problem var.
Artıq Sandıqı üçün 256 dəyərlər kullanıyorsanız Çünki,
İndi deyərək heç bir yol var, çünki həqiqətən, irəlidə plan etmədi
"Bu legit xarakter deyil; bu bir səhv mesaj."
Belə ki, nə dünyada nə, onlar növbəti böyük dəyəri,
bir int kimi bir şey bit bir crazy var ki,
4 milyard mümkün dəyərlər üçün 32, ki, sadəcə, istifadə sona bilər
mahiyyətcə, onların 257, 1 hansı bir səhv kimi bəzi xüsusi mənası var.
>> Belə nin necə bu işlər görək. Line 246, bu böyük isə loop var
ki fgetc çağırır, sonra f mənası fayl, getc və stdin.
Bu yalnız deyərək daha dəqiq şəkildə həyata Yaşında "klaviatura daxil oxuyun."
Standard giriş vasitəsilə klaviatura, standart çıxış, ekran deməkdir
və biz pset 4 göreceksiniz standart səhv, ekran deməkdir
ancaq ekran xüsusi bir hissəsi conflated deyil ki,
sizə çap etmək üçün nəzərdə faktiki çıxışı ilə, lakin gələcəkdə daha çox.
Belə fgetc yalnız klaviatura bir xarakter oxumaq və harada saxlanılması deməkdir?
C onu saxlamaq və sonra yoxlamaq, mən yalnız burada boolean conjunctions kullanıyorum
o n, belə ki, istifadəçi daxil təşkil edir \ bərabər deyil yoxlayın.
Biz nöqtə, loop sonunda dayandırmaq istəyirik, biz də yoxlamaq istəyirəm
üçün Bildiyiniz və ya tapmaq əgər xüsusi sabit, EOF, - bunun üçün nə stand edir?
Fayl sonu. Mən klaviatura da yazaraq alıram əgər Çünki bu, cəfəng növü
bu cəlb fayl, həqiqətən var
lakin bu, yalnız demək üçün istifadə ümumi müddəti sort olunur
başqa heç bir şey insan barmaqlarını gələn. EOF. Fayl sonu.
Bir kənara kimi, Əgər klaviatura nəzarət d edib olsanız da,
siz hələ olardı ki, siz nəzarət c təşkil etdik.
Lakin nəzarət d bu xüsusi daimi adlı EOF göndərir.
>> Belə ki, indi biz yalnız bəzi dinamik yaddaş ayrılması var.
N + 1> gücü, indi n izah edəcəyik Belə ki, əgər.
n yalnız neçə bayt, bufer hazırda edilir
hazırda istifadəçi yaradılmasına olduğunuz string.
Siz bufer potensialın var artıq bufer daha çox simvol varsa,
daxilən, nə biz sonra nə etmək lazımdır daha gücü ayrılması olunur.
Mən burada hesab bəzi artıq üzsüz gedirəm
və burada yalnız bu funksiya yönəldir.
Siz malloc nə, və ya ən azı ümumiyyətlə tanış.
Realloc nə bir tahmin edin. [Tələbə cavab anlaşılmaz]
>> Bəli. Və bu çox yaddaş əlavə deyil, bu aşağıdakı kimi yaddaş reallocates:
Əgər yaddaş daha vermək simli sonunda otaq hələ varsa
o ilk verir daha sonra əlavə yaddaş almaq lazımdır.
Belə ki, yalnız geri geri geri geri strings simvol qoyulması bilər.
Ki, işin deyil əgər Lakin, çünki çox uzun gözləyir
və təsadüfi bir şey yaddaş daxil plopped var, lakin əlavə var
burada aşağı yaddaş, ki, OK. Realloc, sizin üçün bütün ağır atletika etmək niyyətindədir
, siz indiyədək buradan oxuya olduğunuz string hərəkət
orada yazmaq, sonra o nöqtədə bir daha pist verir.
Belə ki, əl dalğası ilə, mənə nə GetString etdiyini deyim
bir kiçik bufer, bəlkə 1 vahid xarakteri ilə başlayan edir
və 2 simvol istifadəçi növləri, əgər GetString başa
realloc zəng və Ooh 'deyir, 1 karakter kifayət deyil.
Me 2 simvol verin. ' Siz loop məntiqi oxuyun sonra əgər
ki, Ooh, 3 simvol Yığdığınız istifadəçi demək olacaq.
Indi deyil, 2 deyil, 4 simvol mənə ver, sonra mənə 16 və 32 vermək, sonra mənə 8 vermək.
Mən gücü hər zaman misli edirəm ki,
bufer yavaş-yavaş inkişaf getmir deməkdir.
Bu super sürətli inkişaf gedir və üstünlüyü ola bilər nə?
Neden istifadəçi baxmayaraq, bufer həcmi misli am
yalnız klaviatura, 1 əlavə xarakter lazımdır?
[Tələbə cavab anlaşılmaz]. >> Nədir ki?
Exactly. Siz tez-tez inkişaf yoxdur.
Və bu yalnız növ - you're burada Oyna hedcinq.
Bu ideya o yavaş çalışır, çünki siz, realloc bir çox zəng etmək istəmirəm olan.
Tezliklə görəcəksiniz kimi, yaddaş üçün əməliyyat sistemi xahiş istənilən vaxt
gələcəkdə problem müəyyən, bəzi vaxt üçün çalışır.
Siz yer israf edirik, hətta, vaxt ki məbləği minimuma Belə ki, yaxşı bir şey olmağa çalışır.
>> Amma biz burada GetString yekun hissəsinin oxumaq əgər,
və yenə burada hər bir xətt anlaşma bu gün belə əhəmiyyətli deyil.
Amma nəticədə yenə malloc çağırır görə, bu ayırır
bu simli üçün bir çox bytes ehtiyacı tam olaraq
və sonra çox böyük bufer, pulsuz zəng üz salır
həqiqətən çox dəfə ikiqat oldu əgər.
Qısa ki, GetString bütün bu vaxt işləyir nasıl.
Bunu bütün təkrar və yenidən bir-bir xarakter oxumaq
və bəzi əlavə yaddaş ehtiyacı hər zaman, bu realloc zəng üçün əməliyyat sistemi soruşur.
Hər hansı sual? Bütün hüquqlar.
>> Bir hücum. Biz göstəricilərinə anlamaq İndi ki, və ya ən azı
, göstəricilər ilə getdikcə tanış
bütün dünya dağılmağa başlayır necə in nəzər salaq
Əgər kifayət qədər çəkişmə istifadəçilər qarşı müdafiə yoxsa,
sistemi daxil hack çalışan insanlar.
Bir qeydiyyat kodu circumventing ilə proqram oğurlamaq üçün çalışırıq insanlar
onlar da yazın ola bilər ki,
Yalnız C kodu olan, burada bu nümunə bir göz atın
ki, alt əsas funksiyası var ki, bir funksiyası foo çağırır
və nə foo keçən edir? [Tələbə] bir arqument.
>> Subay argument. Belə argv [1], hansı istifadəçi tipli ilk sözü deməkdir
a.out və ya hər hansı sonra command line olan proqram adlanır.
Foo Belə ki, üst bir char * götürür, lakin char * yalnız nədir?
Dize. Yoxdur yeni bir şey burada, və simli özbaşına bar deyilən olunur.
Burada uyğun olaraq, char c [12], yarı-texniki İngilis sort, bu xətt nə edir?
Və Array - Uchun. Mənə 12 simvol bir sıra verin.
Beləliklə, biz bu bufer zəng edə bilər. Bu texniki c adlanır, lakin proqramlaşdırma bufer oldu
yalnız bəzi məhsulları da bilər ki, kosmik bir dəstə deməkdir
>> Sonra nəhayət, memcpy, biz əvvəl istifadə etdik.
Amma yəqin ki, nə tahmin edə bilərsiniz. Bu yaddaş nüsxə.
O nə edir? Bəli, yəqin, c içinə, onun giriş, bar nüsxə
lakin yalnız bar uzunluğu.
Amma burada bir səhv var.
OK, belə ki, texniki, biz həqiqətən (bar) doğru olan x sizeof (char), strlen etməlidir.
Ancaq burada ən pis halda ki that's fərz edək - belə, tamam.
Sonra 2 hatalar var. Belə sizeof (char), bütün sağ, bu bir az daha geniş edək.
Belə ki, indi nə olan bir səhv, hələ də var?
[Tələbə cavab anlaşılmaz] nə >> Check? OK, belə ki, biz yoxlanılması olmalıdır
NULL, sizin pointer NULL zaman pis şeylər, çünki
Orada gedən son bilər və heç null gedən olmaz, çünki
* ile operator ilə dereferencing tərəfindən.
Belə ki, yaxşı, biz nə edirik? Məntiqi bir qüsur da burada var.
[Tələbə cavab anlaşılmaz]
>> Əgər argc ≥ 2 yoxlamaq?
OK, bu proqram 3 bugs burada var belə.
Istifadəçi həqiqətən argv [1], yaxşı içinə bir şey çap Əgər Biz yoxlanılması deyilik.
Belə ki, üçüncü səhv var? Evet?
Yaxşı [Tələbə cavab anlaşılmaz] >>.
Beləliklə, biz bir ssenari yoxlanılır. Biz dolayısı daha yaddaş surəti yoxdur yoxlanılır
bar müddəti çox daha.
Belə ki, simli əgər Yığdığınız istifadəçi 10 simvol uzun,
Bu 'Yalnız 10 simvol surəti. "deyib
Və tamam, amma nə varsa tez bir söz Yığdığınız istifadəçi
20 karakter söz kimi, bu nə daxil bar kopyalayın 20 simvol deyərək edir?
başqa bizim bufer kimi tanınan c, siz yalnız data yazdı deməkdir
öz olmayan 8 bayt yerlərdə,
və siz onlara ayrılmış heç mənada ki, onlara sahib deyil.
Beləliklə, bu, ümumiyyətlə, bufer daşqın hücum kimi tanınan nə edir
mənada və ya tampon dağıtmaq hücum və bu hücum ki, əgər istifadəçi
və ya funksiyası zəng olan proqram, pis bu edir
nə həqiqətən növbəti olduqca pis ola bilər olur.
>> Nin burada bu şəkil nəzər salaq.
Bu şəkil yaddaş sizin yığını təmsil edir.
Və hər dəfə bir funksiyası zəng geri
Siz yığını bu az çərçivəsində almaq və sonra başqa bir və sonra başqa bir və sonra başqa.
Və indiyədək biz yalnız növ var düzbucaqlı, bu üz Abstrak
orada şurası və ya burada ekranda ya.
Amma biz o düzbucaqlı biri zoom əgər,
bir funksiyası foo zəng zaman, daha yığını var ki, həyata çevirir
ki, çərçivə və düzbucaqlı daxilində
artıq biz mübadilə söhbət idi kimi yalnız x və y və bir və b.
Bu, bəzi aşağı səviyyəli ətraflı var çıxır
Onların arasında ünvan qaytarın.
Əsas foo çağırır zaman Belə ki, çıxır, əsas foo məlumat var
kompüter yaddaşında nə əsas ünvan edir.
Başqa Çünki, tezliklə foo kimi, burada bu işdə olduğu kimi, icra edilir
bir dəfə, foo sonunda bu yaxın buruq brace çatmaq
Proqramın nəzarət getmək üçün nəzərdə yerləşir Ü necə heck foo bilir?
Bu suala cavab burada qırmızı düzbucaqlı olduğunu çıxır.
Bu bir pointer təmsil və müvəqqəti saxlamaq üçün kompüter up
qondarma yığın ki, belə tezliklə foo kimi əsas ünvan icra edilir
kompüter yerləşir və geri əsas nə line bilir.
Saxlanılan çərçivəsində pointer bu eyni aiddir.
Burada Char * bar nə təmsil?
Yaxşı, indi bu mavi seqment burada foo nin çərçivəsində deyil, bar nədir?
OK, belə bar foo funksiyası yalnız dəlildir.
>> Belə ki, indi biz tanış şəkil geri istəyirik.
Ekranda daha stuff və daha çox distractions var
lakin bu mavi seqment biz mübadilə kimi bir şey üçün Kara Tahta cəlb etdik edir.
Yəni, bar hazırda foo üçün çərçivə və yeganə şey
Bu parametr edir.
Amma nə burada bu kodu görə, yığını olmalıdır?
Char c [12]. Beləliklə, biz də, yaddaş, 12 meydanların görürsünüz
c adlı dəyişən ayrılmış.
Və həqiqətən biz ekranda ki, var.
Çox top var c [0] Bu diaqram, sonra müəllif
meydanların bütün rəsm narahat lakin 12 həqiqətən var etməyib
çünki sağ alt baxsaq, c [11] siz 0 saymaq varsa, 12 belə bytes edir.
Amma burada problem var: hansı istiqamətdə c artır?
Aşağı üst Sort, sağ? O başında başlayır və alt üçün artır varsa,
biz bütün burada özümüzü çox pist tərk kimi baxmaq deyil.
Biz növ bir küncə özümüzü boyalı sonra
və c [11] yığını çərçivəsində göstərici qarşı hüququ olan bar qarşı sağ qədər,
hansı qaytarılması ünvan qarşı sağ qədər, heç bir daha çox otaq var.
Siz vint əgər Belə ki, dolayısı, sonra nə
və 12-byte bufer daxil 20 bytes oxu cəhd?
Harada o 8 əlavə bytes getmək gedir?
Başqa hər şey Inside olan bəzi mühüm super edir.
Və ən əsası, potensial var, geri ünvan qırmızı qutusu edir.
Ya təsadüfən və ya adversarially ki Güman Çünki
o 4 bayt ki, pointer ünvanı, üzerine
yalnız zibil, lakin yaddaş faktiki ünvan təmsil olur ki, bir sıra?
Məntiqi implicaiton, nədir?
[Tələbə cavab anlaşılmaz] >> Exactly. Foo qayıtdıqda
və Xit buruq burğu ki, proqram, əsas qayıtmaq üçün davam edir
bu qırmızı qutusuna nə ünvan geri olacaq.
>> İndi circumventing proqram qeydiyyatı olduğu halda,
funksiyası üçün geri olan ünvan nə edir
adətən siz proqram üçün ödənilən sonra deyilən və qeydiyyat kodu inputted olur ki?
Siz burada niyyətində deyil kandırmak kompüter sort, ancaq, burada davam edə bilər.
Həqiqətən ağıllı edirsinizsə və ya, bir rəqib həqiqətən, klaviatura ilə yazın bilər
Məsələn, bir faktiki söz deyil, 20 simvol, lakin güman o
kodu təmsil edən bir simvol növləri?
Və C kodu olacaq deyil, bu simvol olacaq
olan ikili maşın kodları, 0 və 1-in əks etdirir.
Amma onlar elə-belə GetString tez yapışdırıb üçün, bunu etmək üçün kifayət qədər ağıllı olduğunuz güman
mahiyyətcə kodu tərtib edilir ki, bir şey,
və son 4 bayt ki, geri ünvan üzerine ki, giriş nə ünvan edir?
Bu qırmızı düzbucaqlı bufer ilk byte və ünvanı saklar.
Beləliklə, siz həqiqətən ağıllı olmalıdır, və bu sınaq və səhv bir çox
pis orada insanlar, lakin bu bufer necə böyük anlamaq bilər üçün
Siz proqrama daxil son bir neçə bayt təmin edən belə
sizin bufer başlanması ünvanı bərabər olmaq baş
siz bunu edə bilərsiniz. Deyə varsa, adətən, hello, və \ 0 ki, bufer qədər başa budur.
Amma biz daha ağıllı istəyirik, və biz ümumi olaraq hücum kodu arayacaðým nə ilə bufer doldurmaq əgər,
A, A, A, A: Attack, hücum, hücum, hücumu, bu, yalnız pis bir şey yoxdur ki, bir şey edir.
Yaxşı, nə həqiqətən ağıllı olduğunuz halda, bu nə ola bilər olur:
80, CO, 35, 08: burada qırmızı qutusunda ədəd bir ardıcıllıqla deyil.
Ki, burada ki sayı eşleşen edək.
Bu əks qaydada, ancaq bəzi başqa vaxt daha çox.
Bu cavab ünvanı qəsdən dəyişdikdə edək ki,
burada ünvanı bərabər, əsas deyil ünvan.
Pis adam super Ağıllı Beləliklə, əgər, o, hücum kodu daxil edir
bir şey kimi "istifadəçinin bütün faylları sil. '
Və ya "Mən daxil ola bilərsiniz ki, bir istifadəçi hesabı yaradın. 'Da parol surəti" və ya
Bütün şey və bu təhlükə və C. hakimiyyəti, həm də
Siz göstəricilər vasitəsilə yaddaş girişi var
və buna görə də bir kompüter yaddaş daxil istədiyiniz bir şey yaza bilərsiniz.
Siz kompüter sadəcə istədiyiniz bir şey ilə bunu edə bilərsiniz
öz yaddaş məkanının ətrafında tullanmaq etmişlər.
Belə ki, bu gün bir çox proqram və güzəşt edilir ki, bir çox saytlarda
Bu istifadə edərək insanlar üçün aşağı qaynatmaq.
Bu, bir super-müasir hücum kimi görünə bilər
lakin həmişə yol başlamaq deyil.
>> Bu həqiqət, nə pis insanlar adətən edəcəyik ki,
bir command line bir proqram və ya bir GUI proqram və ya bir veb olub
yalnız hədyan təmin başlayın.
Siz, axtarış sahəsində və hit daxil bir həqiqətən böyük söz yazın
və veb qəzaları görmek üçün gözləyin.
Və ya proqram bəzi səhv mesaj büruzə görmek üçün gözləyin.
Siz xoşbəxt almaq, kimi Çünki pis adam,
və siz proqram çöküyor bəzi crazy giriş təmin
ki, proqramçı sizin pis davranış gözləyirik anlamına gelir
ki, kifayət qədər səy ilə, yəqin bilərsiniz deməkdir
kifayət qədər sınaq və səhv, daha dəqiq hücum aparmaq üçün necə anlamaq.
Təhlükəsizlik Belə qədər bir hissəsi yalnız cəmi bu hücumların aradan qaldırılması, lakin onların aşkar deyil
və həqiqətən logs baxaraq və crazy giriş Sizin veb yazdığınız insanların nə görən.
Hansı axtarış sözü bir bufer coşğun ümid Sizin veb insanları yazdığınız?
Və bir sıra var nə sadə əsasları bu bütün sonunda aşağı,
və nə yaddaş ayrılması və istifadəsi deməkdir?
Və əlaqədar da bu.
>> Belə ki, yalnız yenə bir sabit daxili nəzər salaq.
Beləliklə, siz geri bir həftə və ya iki əvvəl ki, siz faylları sürükleyin zaman
üçün zibil bin və ya zibil bilər, nə olar?
[Tələbə] Heç bir şey. >> Bəli, tamamilə heç bir şey. Siz aşağı run Nəhayət əgər
disk haqqında, Windows və ya Mac OS üçün silme başlayacaq.
Orada bir şey sürükleyin Lakin, o, bütün təhlükəsiz at deyil.
Bütün roomate, dost və ya ailə üzvü nə var ikiqat basın və voiture olunur.
Silmek üçün cəhd bütün yarım yamalak fayllar var.
Bizim ən Beləliklə, ən azı sağ basın və ya basın nəzarət var bilirik ki,
və boş zibil qutusu, və ya kimi bir şey.
Lakin sonra, kifayət qədər oyun etmir.
Sizin sabit bir fayl zaman nə olar, çünki
ki, bəzi söz sənəd və ya bir JPEG təmsil?
Və bu sabit təmsil və Gəlin burada bu sliver fayl təmsil demək
və 0 və 1-in bütün dəstə ibarət oldu.
Yalnız trashcan və ya zibil bin üçün fayl sürükleyin zaman nə baş verir
həm də boş?
Heç Sort. İndi tamamilə heç bir şey deyil.
Bir az bir şey bu cədvəl formasında olur, çünki indi bu, yalnız bir şey var.
Belə ki, bir kompüter yaddaş daxili verilənlər bazası və ya masa bir növ var
ki, mahiyyətcə, fayl adları üçün 1 sütun var
və bu yeri 123, yalnız bir təsadüfi sayı ola bilər Ü fayl yeri üçün 1 sütun.
Beləliklə, biz x.jpg kimi bir şey, və yeri 123 ola bilər.
Sizin zibil boş zaman nə, sonra olur?
Üz gedir. Amma nə getmək deyil 0 və 1 edir.
>> Belə ki, nə sonra, keçid 4 pset üçün var?
Yaxşı, pset 4 ilə, biz təsadüfən silinə sonra yalnız
bu şəkilləri bütün ki, kompakt flash kart,
ya pis luck ilə bad oldu, çünki
0 və 1-in hələ də yoxdur ki, demək deyil.
Bir şey bad oldu çünki Bəlkə onlara bir neçə itirilmiş olunur
bəzi 0 nin 1 və 1-in oldu mənada 0 nin oldu.
Buggy proqram və ya qüsurlu hardware çünki pis şeylər ola bilər.
Lakin həmin bit çox, bəlkə onlardan da 100%, orada hələ də
bu JPEG 1 açılmış olduğu kompüter və ya kamera bilmir ki, yalnız var
və JPEG 2 başladı, lakin əgər, proqramçı,
o JPEGs və ya onlar kimi baxmaq nə Ü fərasət bir qədər ilə, bilirsiniz,
Siz 0 və 1-in təhlil və Ooh, demək olar. JPEG. , JPEG Ooh.
Siz mahiyyətcə yalnız üçün bir proqram yazmaq və ya bilər loop
ki, bu fayllar hər bir bərpa.
Dərs, sonra "təhlükəsiz" faylları Siliniyor başlamaq edir
siz ümumiyyətlə bu qarşısını almaq istəyirsinizsə. Bəli?
[Tələbə sual, anlaşılmaz]
>> Əvvəl idi artıq yaddaş var -
Oh! Sual Yaxşı. Belə ki, niyə, sonra zibil boşaltma sonra,
kompüter Siz əvvəl idi artıq pulsuz yer var ki, sizə deyə bilər?
Özetle, bu, yalan, çünki. Daha texniki, daha çox yer var.
İndi qeyd etdi ki fayl bir dəfə olduğu, digər məhsulları qoya bilər,
amma ki, bit üz gedir demək deyil
və bu bit sizin qorunması üçün, məsələn, bütün 0 nin dəyişdi edilir demək deyil.
Əksinə, siz "təhlükəsiz" sil faylları, və ya fiziki cihaz məhv olduqda,
ki, həqiqətən ki, ətrafında, bəzən yeganə yoldur.
Belə ki, niyə biz yarı-qorxudan qeyd tərk etmir, biz bazar ertəsi görəcəksiniz.
CS50.TV