1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Həftə 5] 2 00:00:02,860 --> 00:00:04,860 [David J. Malan - Harvard Universiteti] 3 00:00:04,860 --> 00:00:07,260 [Bu CS50 edir. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> Bu CS50, həftə 5. 5 00:00:09,740 --> 00:00:12,900 Bu gün və bu həftə biz Suclari dünya bir az tətbiq 6 00:00:12,900 --> 00:00:14,850 Problem kontekstində 4 seçin. 7 00:00:14,850 --> 00:00:18,480 Burada xüsusi bir hadisə sonra var, çünki bu gün qısaldılmış mühazirə olacaq. 8 00:00:18,480 --> 00:00:21,940 Beləliklə, biz bir peek almaq və tələbələr və eyni valideynləri bu gün də dolaşmaq lazımdır 9 00:00:21,940 --> 00:00:24,600 üfüqdə olan bəzi şeyləri ilə. 10 00:00:24,600 --> 00:00:29,050 >> Onların arasında Bazar ertəsi kimi, bir neçə sinif yoldaşları olacaq. 11 00:00:29,050 --> 00:00:32,980 edX, Harvard və OpenCourseWare və daha çox MİT yeni online təşəbbüsü 12 00:00:32,980 --> 00:00:36,730 Bazar ertəsi gəlmək deməkdir Bazar ertəsi, haqqında Harvard nin kampus edir 13 00:00:36,730 --> 00:00:40,930 siz, son sayı kimi, 86,000 əlavə sinif yoldaşları olacaq 14 00:00:40,930 --> 00:00:43,680 CS50 nin mühazirə və bölmələr ilə kim yanaşı aşağıdakı olunacaq 15 00:00:43,680 --> 00:00:45,890 və walkthroughs və problem dəsti. 16 00:00:45,890 --> 00:00:51,870 Bu hissəsi kimi, CS50 və indi CS50x və ilk sinfi üzvləri olacaq. 17 00:00:51,870 --> 00:00:56,150 Bu hissəsi kimi, indi həmçinin bəzi upsides olacaq bilirik. 18 00:00:56,150 --> 00:01:00,620 Tələbələrin kütləvi sayı, buna hazır olmaq üçün, 19 00:01:00,620 --> 00:01:03,820 Təkcə onu demək kifayətdir ki, biz 108 TFS və CA'lar olsa da, 20 00:01:03,820 --> 00:01:07,560 biz tələbələr 80,000 təşkil edib ki, bu da olduqca yaxşı tələbə-müəllim nisbəti deyil. 21 00:01:07,560 --> 00:01:09,830 Biz, əl qoyur bir çox problem sınıflandırma etmək fikrində deyilik 22 00:01:09,830 --> 00:01:13,050 belə problem set bu həftə təqdim CS50 Check olacaq 23 00:01:13,050 --> 00:01:15,410 Aracın ərzində bir komanda-line kommunal olacaq olan 24 00:01:15,410 --> 00:01:17,880 Bu həftə sonu sonra yeniləmək bir dəfə almaq lazımdır ki,. 25 00:01:17,880 --> 00:01:21,030 Siz, öz pset bir komanda, check50, run edə bilərsiniz 26 00:01:21,030 --> 00:01:24,770 və siz proqram doğru və ya yanlış olduğunu müəyyən etmək üçün ani rəy almaq lazımdır 27 00:01:24,770 --> 00:01:27,980 biz təmin etdik ki, müxtəlif dizayn spesifikasiyaları görə. 28 00:01:27,980 --> 00:01:30,310 Problem set dəqiqləşdirilməsi ki, daha çox. 29 00:01:30,310 --> 00:01:34,220 Bu CS50x sinif yoldaşları kimi bu istifadə olunacaq. 30 00:01:34,220 --> 00:01:36,170 >> Problem Set 4, bütün Suclari haqqında 31 00:01:36,170 --> 00:01:38,630 və bu pset həqiqətən bir real həyat stuff ilə ilham 32 00:01:38,630 --> 00:01:41,210 elə mən məktəbin məzunu olanda mən bir müddət interned 33 00:01:41,210 --> 00:01:45,270 Middlesex Şəhristanı nin rayon prokuroru ofisində məhkəmə işi ilə 34 00:01:45,270 --> 00:01:47,660 onların aparıcı məhkəmə müstəntiq ilə. 35 00:01:47,660 --> 00:01:50,280 Mən bir neçə həftə keçmiş qeyd edirəm kimi nə bu, edib 36 00:01:50,280 --> 00:01:52,720 Kütləvi Dövlət Polis və ya digər olacaq olunur 37 00:01:52,720 --> 00:01:56,150 onlar ağır sürücüler və CD və disketleri və bu kimi şeylər yuxulamaq ki, 38 00:01:56,150 --> 00:01:58,770 və sonra Suclari ofis məqsədi müəyyən oldu 39 00:01:58,770 --> 00:02:01,470 var idi və ya bir növ sübutu deyildir olub. 40 00:02:01,470 --> 00:02:04,730 Bu Xüsusi Təhqiqatlar vahidi idi, belə ki, ağ yaxasına cinayət idi. 41 00:02:04,730 --> 00:02:10,949 Bu cinayətlərin daha narahatedici sort, digital media bir növ cəlb bir şey idi. 42 00:02:10,949 --> 00:02:16,450 Bu bir çox insanlar deyərək bir e-poçt yazmaq deyil ki, "Mən etdim". Çıxır ki, 43 00:02:16,450 --> 00:02:20,490 Belə ki, tez-tez, bu məhkəmə axtarışlar, bütün çox meyvə qədər dönmədi 44 00:02:20,490 --> 00:02:22,820 amma bəzən insanlar bu cür e-poçt yazmaq olardı. 45 00:02:22,820 --> 00:02:25,240 Belə ki, bəzən səylərini təltif edilmişdir. 46 00:02:25,240 --> 00:02:31,210 >> Amma bu məhkəmə pset, biz pset4 qrafik bir qədər təqdim olacaq qədər səbəb. 47 00:02:31,210 --> 00:02:35,410 Siz yəqin ki, verilən bu şeylər almaq - JPEGs, gifs və kimi - bu gün. 48 00:02:35,410 --> 00:02:38,320 Amma həqiqətən bu barədə düşünüyorsanız, bir şəkil, çox Rob üzü kimi, 49 00:02:38,320 --> 00:02:41,270 nöqtələr və ya piksel sequence kimi modelləşdirilmişdir bilər. 50 00:02:41,270 --> 00:02:43,380 Rob üzünü halda, rəng bütün növ var 51 00:02:43,380 --> 00:02:46,760 və biz başqa piksel kimi tanınan fərdi nöqtələr görmək başladı 52 00:02:46,760 --> 00:02:48,610 bir dəfə biz da zoom başladı 53 00:02:48,610 --> 00:02:54,660 Amma biz dünyada bir qədər sadələşdirmək və yalnız burada qara və ağ Rob ki, əgər 54 00:02:54,660 --> 00:02:57,490 ağ-qara təmsil, yalnız ikili istifadə edə bilərsiniz. 55 00:02:57,490 --> 00:03:01,660 Və biz ikili istifadə etmək olacaq əgər, 1 və ya 0, biz bu eyni image ifadə edə 56 00:03:01,660 --> 00:03:06,140 bit bu model ilə Rob-nin smiling üz. 57 00:03:06,140 --> 00:03:12,100 11000011 ağ, ağ, qara, qara, qara, qara, ağ ağ təmsil edir. 58 00:03:12,100 --> 00:03:16,150 Və belə, rəngli foto söhbət başlamaq üçün sonra böyük bir sıçrayış deyil 59 00:03:16,150 --> 00:03:18,600 siz Facebook və ya bir digital kamera ilə almaq istədiyiniz şeyi. 60 00:03:18,600 --> 00:03:21,410 Amma əlbəttə ki, bu rənglər gəldikdə, daha çox bit lazımdır. 61 00:03:21,410 --> 00:03:25,690 Və fotoşəkillər dünyada çox ümumi deyil, 1-bit rəng istifadə 62 00:03:25,690 --> 00:03:29,560 Bu təklif, lakin 24-bit rəng, həqiqətən milyon rəng almaq yerləşir. kimi 63 00:03:29,560 --> 00:03:32,250 Beləliklə, biz Rob göz üzrə zoomed zaman olduğu kimi, 64 00:03:32,250 --> 00:03:36,370 ki, müxtəlif rəngli imkanları milyonlarla hər hansı bir sayı oldu. 65 00:03:36,370 --> 00:03:39,040 Belə ki, Problem Set 4 habelə gözden geçirmek bu tətbiq edəcəyik 66 00:03:39,040 --> 00:03:43,370 çünki burada cümə mühazirə adi 2:30 əvəzinə 3:30 gün olacaq. 67 00:03:43,370 --> 00:03:46,620 Lakin video adi sabah kimi online olacaq. 68 00:03:46,620 --> 00:03:48,820 >> Biz də başqa bir fayl formatında sizə təqdim edəcəyik. 69 00:03:48,820 --> 00:03:51,270 Bu qəsdən, ilk qorxuducu baxmaq üçün nəzərdə tutulur 70 00:03:51,270 --> 00:03:55,670 amma bu C struct üçün bəzi sənədlərin edir. 71 00:03:55,670 --> 00:03:58,940 Microsoft il əvvəl bu formatda yayılmasına kömək çıxır ki, 72 00:03:58,940 --> 00:04:05,150 bu bitmap fayl biçimi, bmp, və bu super sadə, rəngarəng qrafik formatında idi çağırıb 73 00:04:05,150 --> 00:04:10,150 ki, masa üstü haqqında divar kağızları üçün bəzən hələ çox vaxt üçün istifadə edilmişdir. 74 00:04:10,150 --> 00:04:14,760 Windows XP və yuvarlanan təpələri və mavi göyə geri düşünüyorsanız, 75 00:04:14,760 --> 00:04:17,170 ki, adətən bmp və ya bitmap image idi. 76 00:04:17,170 --> 00:04:19,959 Onlar bir az daha mürəkkəbliyi, çünki bitmaps bizim üçün fun olunur. 77 00:04:19,959 --> 00:04:22,610 Bu olduqca 0s və 1s Bu grid kimi sadə deyil. 78 00:04:22,610 --> 00:04:27,510 Bunun yerine, bir fayl əvvəlində bir mövzu kimi şeylər var. 79 00:04:27,510 --> 00:04:31,990 Belə ki, içərisində. Bmp faylı başqa sözlə, bu 0s və 1s bütün dəstə edir 80 00:04:31,990 --> 00:04:34,910 lakin bəzi əlavə 0s və 1s var. 81 00:04:34,910 --> 00:04:38,220 Və bu il üçün verilən nə biz yəqin ki, qəbul etdiyiniz çıxır - 82 00:04:38,220 --> 00:04:45,170 . doc və ya. xls və ya. mp3, kimi fayl formatları. mp4, nə fayl formatları 83 00:04:45,170 --> 00:04:48,480 sizinlə tanış olduğunu - nə, hətta bir fayl format olmaq deməkdir 84 00:04:48,480 --> 00:04:52,480 Günün sonunda bu faylları bütün biz yalnız 0s və 1s var istifadə çünki. 85 00:04:52,480 --> 00:04:56,810 Və bəlkə o 0s və 1s ASCII vasitəsilə ABC və ya kimi təmsil 86 00:04:56,810 --> 00:04:58,820 lakin gün sonunda, o, hələ yalnız 0s və 1s var. 87 00:04:58,820 --> 00:05:02,100 Belə ki, insanlar yalnız hərdənbir yeni bir fayl format icad qərar 88 00:05:02,100 --> 00:05:06,420 onlar bit nümunələri həqiqətən demək olacaq nə standartlaşdırmaq yerləşir. 89 00:05:06,420 --> 00:05:09,220 Burada bu halda, insanlar bu bitmap fayl biçimi nəzərdə edən 90 00:05:09,220 --> 00:05:15,620 bir bitmap fayl ilk byte ilə, kimi ofset 0 qeydi ki, 91 00:05:15,620 --> 00:05:18,940 bəzi cryptically adına dəyişən adlı bfType olması orada gedir 92 00:05:18,940 --> 00:05:23,080 yalnız bitmap fayl növü üçün dayanır ki, nə bitmap fayl növü bu. 93 00:05:23,080 --> 00:05:27,700 Siz 2 ofset ki, ikinci sırada, byte sayı 2, bəlkə nəticə çıxarmaq olar 94 00:05:27,700 --> 00:05:33,740 nə təmsil 0s və 1s bir model var? Bir şey ölçüsü. 95 00:05:33,740 --> 00:05:35,310 Və oradan gedir. 96 00:05:35,310 --> 00:05:37,410 Belə ki, Problem Set 4, bu bəzi şeyləri vasitəsilə getdi olacaq. 97 00:05:37,410 --> 00:05:39,520 Biz onların bütün haqqında qayğı son deyil. 98 00:05:39,520 --> 00:05:47,510 Amma byte 54 ətrafında maraqlı almaq başlayır Qeyd: rgbtBlue, Yaşıl, və Red. 99 00:05:47,510 --> 00:05:52,110 Əgər eşitdim Əgər kısaltma RGB - qırmızı, yaşıl, mavi - Bu ki, bir istinad edir 100 00:05:52,110 --> 00:05:54,610 o çıxır çünki Rainbow bütün rəngləri boya bilər 101 00:05:54,610 --> 00:05:58,180 qırmızı və mavi və yaşıl bəzi birləşməsi ilə. 102 00:05:58,180 --> 00:06:03,320 Və əslində, oda valideynlərin ən proyektorlar bəzi xatırlayıram bilər. 103 00:06:03,320 --> 00:06:05,890 Bu gün, yalnız bir parlaq işıq bir lens çıxan bax 104 00:06:05,890 --> 00:06:09,800 lakin geri gün siz, qırmızı lens, mavi lens, yaşıl lens idi 105 00:06:09,800 --> 00:06:13,380 və birlikdə onlar ekran yönəlmiş və rəngarəng şəkil formalaşmışdır. 106 00:06:13,380 --> 00:06:16,270 Və tez-tez, orta məktəblərdə və ali məktəblərdə bu linzalar var ki, 107 00:06:16,270 --> 00:06:19,720 heç belə az əyri, belə ki, ikiqat və ya üçqat images görən cür idi. 108 00:06:19,720 --> 00:06:24,100 Amma bu fikir idi. Siz bir şəkil rəsm qırmızı və yaşıl və mavi işıq idi. 109 00:06:24,100 --> 00:06:26,590 Və eyni prinsip kompüter istifadə olunur. 110 00:06:26,590 --> 00:06:30,230 >> Belə ki, Problem sizin üçün sonra çətinliklər arasında Set 4 bir neçə şey olacaq. 111 00:06:30,230 --> 00:06:34,800 Bir həqiqətən bir şəkil ölçüsünü etmək, 0s və 1s bir model etmək, 112 00:06:34,800 --> 00:06:40,200 , 0s və 1s chunks bir strukturunda nə kimi təmsil anlamaq 113 00:06:40,200 --> 00:06:43,630 da Reds, blues, göyərti - və sonra piksel kopya necə anlamaq - 114 00:06:43,630 --> 00:06:46,660 içərisində belə bir şəkil əvvəlcə bu kimi görünür zaman, 115 00:06:46,660 --> 00:06:49,210 ki, sonra əvəzinə bu kimi baxmaq bilər. 116 00:06:49,210 --> 00:06:53,640 Digər problemlər arasında çox bir məhkəmə image təhvil lazımdır ki, olacaq 117 00:06:53,640 --> 00:06:56,030 bir digital kamera faktiki fayl. 118 00:06:56,030 --> 00:06:58,960 Və kamera, bir müddət sonra, photos, bir dəstə idi. 119 00:06:58,960 --> 00:07:03,760 Problemi biz təsadüfən silinə və ya image birtəhər bad idi olunur. 120 00:07:03,760 --> 00:07:05,750 Pis şeylər digital kameralar ilə baş verir. 121 00:07:05,750 --> 00:07:09,150 Və biz tez, sizin üçün ki, kart 0s və 1s off bütün sitemizi 122 00:07:09,150 --> 00:07:13,610 4 göstərilməyib böyük bir fayl onları xilas, sonra biz Problem siz onlara təslim olacaq 123 00:07:13,610 --> 00:07:19,320 siz ideal, bu JPEGs bütün bərpa etmək ilə C bir proqram yazmaq olar ki. 124 00:07:19,320 --> 00:07:23,330 Və onlar bir kompleks formatında qədər olmalarına baxmayaraq ki, JPEGs çıxır - 125 00:07:23,330 --> 00:07:26,360 onlar daha mürəkkəb burada bu smiling üz çox istəyirik - 126 00:07:26,360 --> 00:07:31,160 hər JPEG 0s və 1s eyni nümunələri ilə başlayan çıxır. 127 00:07:31,160 --> 00:07:35,630 Belə ki, istifadə edərək, nəhayət, loop və ya oxşar üçün bir müddət loop və ya, 128 00:07:35,630 --> 00:07:38,880 Əgər bu məhkəmə image bütün 0s və 1s üzərində təkrarlamaq bilər 129 00:07:38,880 --> 00:07:43,150 və problem set dəqiqləşdirilməsi müəyyən olan xüsusi model görmək hər zaman, 130 00:07:43,150 --> 00:07:47,880 siz çox yüksək ehtimalı ilə, JPEG başlanğıc burada bilərik. 131 00:07:47,880 --> 00:07:51,230 Və tezliklə eyni model bytes bəzi sıra tapmaq kimi 132 00:07:51,230 --> 00:07:55,430 və ya kilobayt megabayt və ya sonra, siz burada kəsb edə bilər, ikinci JPEG edir 133 00:07:55,430 --> 00:07:57,380 Foto Mən ilk sonra aldı. 134 00:07:57,380 --> 00:08:01,370 Mənə ilk fayl oxu dayandırmaq ki, bu yeni bir yazı başlamaq 135 00:08:01,370 --> 00:08:06,310 və pset4 üçün proqram çıxış kimi çox 50 kimi JPEGs olacaq. 136 00:08:06,310 --> 00:08:09,270 50 JPEGs deyil varsa, siz bir loop bir az var. 137 00:08:09,270 --> 00:08:12,490 Siz JPEGs bir sonsuz sayda varsa, siz sonsuz loop var. 138 00:08:12,490 --> 00:08:14,910 Belə ki, olduqca ümumi bir hal olacaq. 139 00:08:14,910 --> 00:08:16,600 Belə ki üfüqdə nə var. 140 00:08:16,600 --> 00:08:21,310 >> Arxamızda 0 İlke, xoşbəxt də olan insanlar daim var ki, mənim e-poçt hər həyata 141 00:08:21,310 --> 00:08:23,640 neytral və viktorina ətrafında kədərli 0 dəfə növ. 142 00:08:23,640 --> 00:08:26,800 Və baş TF Zamyla, öz TF, mənə həyata çatmaq edin 143 00:08:26,800 --> 00:08:31,180 şeyi getdi necə müzakirə etmək istəyirsinizsə, siz bilirsiniz ki, CAS və ya bir. 144 00:08:31,180 --> 00:08:35,539 >> Belə ki, oda burada valideynlər impress üçün, CS50 kitabxana nədir? 145 00:08:36,429 --> 00:08:40,390 [Gülüş] Yaxşı iş. 146 00:08:40,390 --> 00:08:48,340 Bu CS50 kitabxana nədir? Bəli. >> [Tələbə] Bu kodu əvvəlcədən yazılı set var [işitilemez] 147 00:08:48,340 --> 00:08:49,750 OK, yaxşı. 148 00:08:49,750 --> 00:08:53,240 Biz heyət yazdı kodu əvvəlcədən yazılı dəsti var, biz sizə təqdim 149 00:08:53,240 --> 00:08:55,030 ki, bəzi ümumi işlevselliği təmin edir 150 00:08:55,030 --> 00:08:59,020 Mənə bir string almaq kimi mövzusu, mənə almaq bir int - burada listelenen funksiyaları bütün. 151 00:08:59,020 --> 00:09:02,260 >> Indi başlayaraq, biz, həqiqətən, bu təlim təkərlər çıxarmaq başlayın. 152 00:09:02,260 --> 00:09:05,050 Biz sizə bir string üz etmək başlamaq olacaq 153 00:09:05,050 --> 00:09:08,870 olan geri nə faktiki data növü üçün yalnız bir sinonimi idi? >> [Neçə tələbə] Char *. 154 00:09:08,870 --> 00:09:12,730 Char *. Valideynlər ki, yəqin ki, [edir whooshing səs] idi. Bu yaxşı. 155 00:09:12,730 --> 00:09:17,550 Char * biz bizim lüğət olan string aradan qaldırılması kimi çox ekranda görmək başlamaq lazımdır 156 00:09:17,550 --> 00:09:19,730 həqiqətən kodu yazılı gəldiyi azı zaman. 157 00:09:19,730 --> 00:09:22,840 Eynilə, biz bu funksiyaların bir çox kimi istifadə dayandırmaq lazımdır 158 00:09:22,840 --> 00:09:25,280 proqramlar daha mürəkkəb almaq üçün gedir çünki. 159 00:09:25,280 --> 00:09:28,480 Daha çox yalnız tez yanıb-sönən ilə oturmaq proqramlar yazmaq 160 00:09:28,480 --> 00:09:31,870 bir şey yazın istifadəçi gözləyir, siz başqa yerdə sizin giriş almaq lazımdır. 161 00:09:31,870 --> 00:09:35,490 Məsələn, yerli sabit bit bir sıra onları almaq lazımdır. 162 00:09:35,490 --> 00:09:38,580 Siz əvəzinə, şəbəkə bağlantısı gələcəkdə onları almaq lazımdır 163 00:09:38,580 --> 00:09:40,230 haradasa bir haqqinda. 164 00:09:40,230 --> 00:09:44,110 >> Belə ki, ilk dəfə geri bu qat qabığı edək və CS50 Aracı qoparmaq 165 00:09:44,110 --> 00:09:49,010 siz # həftə o cümlədən etdiyiniz cs50.h adlanır və bu fayl, 166 00:09:49,010 --> 00:09:51,140 amma nin əslində bu daxilində nə görmək bildirin. 167 00:09:51,140 --> 00:09:54,430 Mavi faylı üst yalnız şərh bütöv bir dəstə edir: 168 00:09:54,430 --> 00:09:57,050 zəmanət informasiya və lisenziya. 169 00:09:57,050 --> 00:09:59,050 Bu proqram bir vahid paradiqma növ edir 170 00:09:59,050 --> 00:10:01,580 proqram bir çox bu gün açıq mənbə deyirlər nə, çünki 171 00:10:01,580 --> 00:10:05,220 olan kimsə kodu yazılı və sərbəst mövcud olmuşdur o deməkdir ki, 172 00:10:05,220 --> 00:10:10,470 yalnız run və istifadə üçün ancaq oxumaq və dəyişdirmək və öz iş inteqrasiya. 173 00:10:10,470 --> 00:10:14,660 Belə ki, bir çox kiçik formada olsa da, açıq proqram istifadə etdiyiniz budur. 174 00:10:14,660 --> 00:10:18,560 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. 175 00:10:18,560 --> 00:10:25,010 Bu cs50.h fayl mövzu faylları bütün dəstə daxildir ki, burada üst bildiriş. 176 00:10:25,010 --> 00:10:28,560 Bu çox, biz əvvəl görmədim, amma bir tanış edir. 177 00:10:28,560 --> 00:10:32,270 Bu Hansı beləliklə qədər qısa olsa da, gördüm? >> [Tələbə] Standard kitabxana. 178 00:10:32,270 --> 00:10:35,810 Bəli, standart kitabxana. stdlib.h malloc var. 179 00:10:35,810 --> 00:10:38,320 Sonra biz, dinamik yaddaş ayrılması haqqında söhbət açılmış 180 00:10:38,320 --> 00:10:41,650 biz də gələn həftə qayıda bilərsiniz ki, fayl o cümlədən başladı. 181 00:10:41,650 --> 00:10:46,640 Bu bool və həqiqi və saxta həqiqətən C özlüyündə mövcud olmayan çıxır ki, 182 00:10:46,640 --> 00:10:49,440 Burada bu fayl daxil olmasın. 183 00:10:49,440 --> 00:10:52,710 Biz həftə stdbool.h o cümlədən edilmişdir 184 00:10:52,710 --> 00:10:55,620 Siz, bool doğru və ya yalan. anlayışı istifadə edə bilərsiniz, belə ki, 185 00:10:55,620 --> 00:10:58,620 Bu olmadan, siz saxta onun sort və bir int istifadə etmək olardı 186 00:10:58,620 --> 00:11:02,610 və yalnız özbaşına 0 yalan və 1 doğru olduğunu daşımır. 187 00:11:02,610 --> 00:11:07,150 Daha aşağı diyirləyin varsa, burada bir simli bizim müəyyən edilməsidir. 188 00:11:07,150 --> 00:11:11,390 Bu ulduz olduğu həqiqətən Fərq etməz ki, biz əvvəl deyib sonra kimi çıxır. 189 00:11:11,390 --> 00:11:13,720 Siz hətta bütün ətrafında yer ola bilər. 190 00:11:13,720 --> 00:11:16,740 Biz bu dövr aydın etmək üçün bu kimi təşviq edilmişdir 191 00:11:16,740 --> 00:11:18,620 ulduz, növü nə var ki, 192 00:11:18,620 --> 00:11:21,700 bir az daha çox olmadıqda isə, yalnız ümumi həyata 193 00:11:21,700 --> 00:11:24,430 orada qoymaq, lakin funksional eyni şey. 194 00:11:24,430 --> 00:11:27,720 Daha aşağı oxumaq Amma əgər İndi GetInt nəzər edək 195 00:11:27,720 --> 00:11:32,190 biz başqa bir şey Bu dövr əvvəl ki, bəlkə də ilk istifadə çünki. 196 00:11:32,190 --> 00:11:37,440 Burada GetInt edir. Bu nədir? >> [Tələbə] A prototip. >> Bu yalnız bir prototip deyil. 197 00:11:37,440 --> 00:11:41,410 Tez-tez biz bizim zirvələrində prototipləri qoyduq. C faylları, 198 00:11:41,410 --> 00:11:46,690 amma burada bu kimi mövzu faylları. h faylları ilə prototipləri bilər 199 00:11:46,690 --> 00:11:50,840 Belə ki, bəzi funksiyaları yazmaq zaman, digər insanlar istifadə etmək istəyirəm ki, 200 00:11:50,840 --> 00:11:53,550 olan, tam CS50 kitabxana olduğu 201 00:11:53,550 --> 00:11:57,040 siz cs50.c kimi bir şey sizin funksiyaları həyata deyil, yalnız 202 00:11:57,040 --> 00:12:02,790 Siz də ki, fayl üst lakin bir mövzu fayl üst prototipləri qoydu. 203 00:12:02,790 --> 00:12:07,170 Sonra ki, header fayl dostları və həmkarları daxildir nə 204 00:12:07,170 --> 00:12:09,760 saylı öz kodu daxildir. 205 00:12:09,760 --> 00:12:12,210 Bütün bu zaman Belə ki, bu prototipləri bütün o cümlədən olduğunuz 206 00:12:12,210 --> 00:12:16,580 effektiv fayl üst lakin bu yolu # mexanizmi daxildir 207 00:12:16,580 --> 00:12:20,070 Öz dilinə olan mahiyyətcə nüsxə və pastalar bu faylı. 208 00:12:20,070 --> 00:12:23,070 Burada bəzi ədalətli ətraflı sənədləşdirmə edir. 209 00:12:23,070 --> 00:12:25,640 GetInt bir int olur ki, verilmiş Biz olduqca çox qəbul etdik, 210 00:12:25,640 --> 00:12:27,640 bir künc halları var həyata lakin bu çevrilir. 211 00:12:27,640 --> 00:12:31,810 Nə quintillion, yol çox böyük ki, bir sıra istifadəçi əgər, 212 00:12:31,810 --> 00:12:35,490 ki, yalnız bir int daxilində uyğun deyil? Gözlənilən davranış nədir? 213 00:12:35,490 --> 00:12:38,020 Ideal, bu, əvvəlcədən var. 214 00:12:38,020 --> 00:12:40,280 Belə ki, bu halda, həqiqətən, gözəl çap oxumaq 215 00:12:40,280 --> 00:12:44,500 həqiqətən ki line oxumaq mümkün olmadıqda, bu gəlirlər INT_MAX görəcəksiniz. 216 00:12:44,500 --> 00:12:48,320 Biz bu barədə danışdı, lakin onun kapitallaşdırılması əsasında nə yəqin ki, heç etdik? 217 00:12:48,320 --> 00:12:50,640 [Tələbə] A daimi. >> Bu daimi deyil. 218 00:12:50,640 --> 00:12:54,770 Yəqin ki, bu mövzu faylları bir elan edir ki, bəzi xüsusi daimi var 219 00:12:54,770 --> 00:13:00,090 ki, fayl ildə ali ve INT_MAX təxminən 2 milyard kimi yəqin ki, bir şey 220 00:13:00,090 --> 00:13:04,990 biz elə bir şey demek lazımdır ki olan ideya, səhv getdi 221 00:13:04,990 --> 00:13:10,700 biz, bəli, bizim sərəncamında 4 milyard ədəd var: -2 milyard 2 milyard üzrə vermək və ya almaq. 222 00:13:10,700 --> 00:13:14,710 Yaxşı, nə proqramlaşdırma ümumi deyil, yalnız nömrələrdən birini oğurlamaq deyil 223 00:13:14,710 --> 00:13:18,920 bəlkə 0, bəlkə 2 milyard, bəlkə -2 milyard 224 00:13:18,920 --> 00:13:23,280 Siz dünyanın öhdəliyi ki, belə sizin mümkün dəyərlərindən birini sərf 225 00:13:23,280 --> 00:13:26,820 bir şey yanlış gedir ki, bu super böyük dəyər qayıdacaqlar. 226 00:13:26,820 --> 00:13:31,030 Amma istifadəçi 234 kimi sirli bir şey yazaraq istəmirəm ..., həqiqətən, böyük nömrəsi. 227 00:13:31,030 --> 00:13:34,060 Siz daimi olaraq yerine ümumiləşdirmək. 228 00:13:34,060 --> 00:13:38,060 Siz son bir neçə həftə anal olan halda ki, həqiqətən, heç bir zaman, GetInt adlı 229 00:13:38,060 --> 00:13:42,900 vəziyyəti INT_MAX istifadəçi növü əgər bir ilə yoxlanılması idi, 230 00:13:42,900 --> 00:13:46,590 və ya, daha dəqiq desək, bunu əgər, çünki GetInt qaytarılması INT_MAX etdi 231 00:13:46,590 --> 00:13:51,830 əslində onlar yazın anlamına gelir. Something bu halda yanlış getdi. 232 00:13:51,830 --> 00:13:56,080 Belə ki, bu ümumiyyətlə yalnız xüsusi deməkdir sentinel dəyər kimi tanınan nə edir. 233 00:13:56,080 --> 00:13:58,120 >> Edir. C fayl çevirmək indi edək. 234 00:13:58,120 --> 00:14:01,340 C fayl bir müddət cihaz mövcuddur. 235 00:14:01,340 --> 00:14:06,840 Və əslində, cihaz önceden tərtib biz obyekt kodu adlı şey daxil sizin üçün var 236 00:14:06,840 --> 00:14:09,540 sistem bilir, çünki olduğu, lakin bu yalnız sizin üçün fərqi yoxdur 237 00:14:09,540 --> 00:14:11,730 Bu halda harada: Aracın. 238 00:14:11,730 --> 00:14:17,400 Bütün bu vaxt GetInt və GetInt işləyir necə indi aşağı diyirləyin edək. 239 00:14:17,400 --> 00:14:19,460 Burada əvvəl oxşar şərh yoxdur. 240 00:14:19,460 --> 00:14:21,660 Mənə yalnız kodu hissəsi üzrə Yakınlaştırmak edək. 241 00:14:21,660 --> 00:14:23,900 Və nə biz GetInt üçün belədir. 242 00:14:23,900 --> 00:14:25,700 Bu, heç bir daxil edir. 243 00:14:25,700 --> 00:14:29,510 Bu, (əsl) isə, bir int qaytarır, biz qəsdən sonsuz loop var 244 00:14:29,510 --> 00:14:33,180 lakin güman ki, biz birtəhər bu çıxmaq və ya bu ərzində qayıtmaq lazımdır. 245 00:14:33,180 --> 00:14:34,870 >> Nin necə bu işləri görmək edək. 246 00:14:34,870 --> 00:14:39,240 Biz, loop daxilində bu ilk line 166 GetString istifadə görünür. 247 00:14:39,240 --> 00:14:43,780 Hansı şərtlər altında GetString qayıtmaq bilər, çünki bu artıq yaxşı təcrübə 248 00:14:43,780 --> 00:14:47,660 xüsusi söz NULL? >> [Tələbə] bir şey yanlış gedir edin. 249 00:14:47,660 --> 00:14:51,630 Bir şey yanlış gedir edin. Və GetString kimi bir zəng zaman yanlış getmək bilər nə? 250 00:14:54,960 --> 00:14:57,640 Bəli. >> [Tələbə] Malloc bu ints vermək bilmir. 251 00:14:57,640 --> 00:14:59,150 Bəli. Bəlkə malloc bilmir. 252 00:14:59,150 --> 00:15:03,190 Somewhere başlıq altında, GetString yaddaş ayırır olan malloc, zəng 253 00:15:03,190 --> 00:15:06,020 olan simvol bütün kompüter mağaza imkan verir 254 00:15:06,020 --> 00:15:07,750 ki, klaviatura daxil istifadəçi növləri. 255 00:15:07,750 --> 00:15:11,590 Və istifadəçi pulsuz zaman bütün çox idi və məsələn, daha çox çap güman 256 00:15:11,590 --> 00:15:16,160 kompüter daha çox simvol, daha 2 milyard simvol hətta RAM var. 257 00:15:16,160 --> 00:15:19,250 GetString sizə demek etmək üçün var. 258 00:15:19,250 --> 00:15:22,560 Bu super, super nadir künc halda, belə 259 00:15:22,560 --> 00:15:24,340 o, elə bu idarə etmək üçün var 260 00:15:24,340 --> 00:15:28,750 və biz geri getdi və sənədləri oxumaq, əgər GetString, əslində qaytarılması NULL də yoxdur. 261 00:15:28,750 --> 00:15:34,460 GetString NULL geri uğursuz Beləliklə, əgər GetInt INT_MAX qaytarılması ilə uğursuz gedir 262 00:15:34,460 --> 00:15:37,690 yalnız bir keşikçi kimi. Bu yalnız insan konvensiyalar var. 263 00:15:37,690 --> 00:15:41,450 Bu halda bilirik ki, yalnız yol sənədlərin oxu edir. 264 00:15:41,450 --> 00:15:45,040 >> Bu int həqiqətən əldə yerləşir aşağı hərəkət edək. 265 00:15:45,040 --> 00:15:51,160 Mən bir az daha aşağı diyirləyin varsa, line 170, biz bu xətlər yuxarıda Şərh yoxdur. 266 00:15:51,160 --> 00:15:55,100 Biz 172 sonra bir int, n və char, c, və bu yeni funksiyası, bəyan 267 00:15:55,100 --> 00:15:58,930 siz bəzi sscanf əvvəl boyunca stumbled var. 268 00:15:58,930 --> 00:16:00,870 Bu simli scanf qısaltmasıdır. 269 00:16:00,870 --> 00:16:05,700 Yəni, mənə bir string verir və mən faiz informasiya ədəd üçün tarar. 270 00:16:05,700 --> 00:16:07,360 Ki, nə deməkdir? 271 00:16:07,360 --> 00:16:11,800 Mən Enter sonra klaviatura da 123, sözün yazın və güman edirlər. 272 00:16:11,800 --> 00:16:16,470 GetString geri zaman 123-veri növü nədir? >> [Tələbə] Dize. 273 00:16:16,470 --> 00:16:18,380 Bu hüququ, açıq-aydın bir simli var? Mən bir simli var. 274 00:16:18,380 --> 00:16:23,220 Belə ki, 123, həqiqətən quote-dırnağı bağlamaq, bunun sonunda \ 0 ilə 123 edir. 275 00:16:23,220 --> 00:16:27,110 Bir int deyil. Yəni bir sıra deyil. Bu, bir sıra kimi görünür, ancaq faktiki olaraq deyil. 276 00:16:27,110 --> 00:16:29,080 Belə ki, nə GetInt nə var? 277 00:16:29,080 --> 00:16:35,750 123 \ 0 - - və elə bir faktiki tam çevirmək Bu sağ ki, simli scan var. 278 00:16:35,750 --> 00:16:37,850 Siz bunu necə anlamaq bilər. 279 00:16:37,850 --> 00:16:41,450 Siz pset2 geri düşünüyorsanız, güman Caesar ilə bir az rahat əldə 280 00:16:41,450 --> 00:16:44,820 və ya Vigenere, belə bir simli üzərində təkrarlamaq bilərsiniz ints üçün chars çevirə bilərsiniz. 281 00:16:44,820 --> 00:16:46,710 Lakin heck, bu iş bütün çox var. 282 00:16:46,710 --> 00:16:49,860 Niyə ki, ki sscanf kimi bir funksiyası zəng deyil? 283 00:16:49,860 --> 00:16:54,230 Belə sscanf mübahisə gözləyir - bu halda xətti simli olan çağırıb. 284 00:16:54,230 --> 00:17:01,840 Daha sonra bu simli görmək üçün gözləmək, nə çox oxşar üçün printf, quotes daxil. 285 00:17:01,840 --> 00:17:09,000 Və nə mən burada dedi alıram mən decimal nömrəsi və bəlkə bir xarakter görmək üçün gözləmək deyil. 286 00:17:09,000 --> 00:17:12,000 Bu yalnız bir anda halda niyə və görəcəyik. 287 00:17:12,000 --> 00:17:15,869 Və bu notation indi məhsullarının xatırladan çıxır ki, söhbət açılmış 288 00:17:15,869 --> 00:17:17,619 yalnız bir həftə əvvəl artıq. 289 00:17:17,619 --> 00:17:21,740 Nədir və n və & c burada bizim üçün bunu? >> [Tələbə] n Ünvan və c ünvan. 290 00:17:21,740 --> 00:17:25,400 Bəli. Mənə c n və ünvanı ünvanı verilməsi oldu. Niyə vacibdir? 291 00:17:25,400 --> 00:17:30,220 Siz C funksiyaları ilə, siz həmişə bütün bir dəyəri və ya heç bir dəyəri ola bilər ki, bilirik. 292 00:17:30,220 --> 00:17:34,530 Siz int, bir simli, bir float, bir char, nə, və ya etibarsız ola bilər, ola bilər 293 00:17:34,530 --> 00:17:38,030 lakin yalnız maksimum bir şey ola bilər. 294 00:17:38,030 --> 00:17:42,760 Lakin burada biz sscanf bəlkə bir int, bir decimal sayı, mənə qayıtmaq istəyirəm 295 00:17:42,760 --> 00:17:46,220 və həmçinin char, və bir anda nə char izah edəcəyik. 296 00:17:46,220 --> 00:17:51,460 Siz səmərəli sscanf iki şeyi qayıtmaq istəyirəm, ancaq ki, C. yalnız mümkün deyil 297 00:17:51,460 --> 00:17:55,200 Siz iki URL keçən ki, ətrafında iş 298 00:17:55,200 --> 00:17:57,370 tez bir funksiyası iki URL əl kimi, çünki 299 00:17:57,370 --> 00:18:00,470 ki funksiyası onlara nə edə bilər? >> [Tələbə] həmin ünvanlara yazın. 300 00:18:00,470 --> 00:18:02,010 O URL yaza bilərsiniz. 301 00:18:02,010 --> 00:18:05,770 Siz star əməliyyat istifadə və bu URL-hər, orada bilərsiniz. 302 00:18:05,770 --> 00:18:11,260 Bu dəyişənlər dəyərlər dəyişdirmək üçün sort bu geri qapı mexanizminin lakin çox yaygın 303 00:18:11,260 --> 00:18:14,870 bu halda, iki - yalnız bir yer çoxdur. 304 00:18:14,870 --> 00:18:21,340 İndi == 1 yoxlanılması və o, əslində, doğru ilə qiymətləndirmək əgər n qaytarılması alıram bilərsiniz. 305 00:18:21,340 --> 00:18:26,170 Belə ki, nə olub? Texniki, biz, həqiqətən GetInt baş istəyirəm bütün bu. 306 00:18:26,170 --> 00:18:30,740 Quote-dırnağı bağlamaq 123 - Biz danışmaq, analiz etmək istəyirəm ki, biz string oxumaq istəyirəm - 307 00:18:30,740 --> 00:18:34,560 və biz sscanf izah ne var, bir sıra var kimi görünür, əgər 308 00:18:34,560 --> 00:18:38,190 Bu dəyişən n mənim üçün - 123 - ki sayı qoyulur. 309 00:18:38,190 --> 00:18:42,090 Belə ki, niyə mən, həqiqətən, bu həmçinin var idi? 310 00:18:42,090 --> 00:18:48,220 Burada bir xarakter ala bilər deyərək sscanf rolu nədir? 311 00:18:48,220 --> 00:18:53,470 [Işitilemez tələbə cavab] >> A kəsir həqiqətən iş bilər. 312 00:18:53,470 --> 00:18:56,330 Bir an düşündüm ki keçirəcək edək. Nə? 313 00:18:56,330 --> 00:18:59,270 [Tələbə] Bu NULL ola bilər. >> Yaxşı fikir. Bu null xarakterli ola bilər. 314 00:18:59,270 --> 00:19:01,660 Bu halda faktiki olaraq deyil. Bəli. >> [Tələbə] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Və ya mənə daha da ümumiləşdirmək bildirin. 316 00:19:04,340 --> 00:19:06,640 Orada% c yalnız səhv yoxlanılması üçün. 317 00:19:06,640 --> 00:19:09,300 Biz sıra sonra bir xarakter olmalıdır istəmirəm 318 00:19:09,300 --> 00:19:11,870 lakin nə bu mənə imkan verir belədir. 319 00:19:11,870 --> 00:19:18,210 Bu sscanf, burada bu nümunə n və c dəyərləri saxlanılması ilə yanaşı, çıxır 320 00:19:18,210 --> 00:19:24,890 bunun da dəyişənlərin sayı qaytarır bilir nə daxil dəyərlər qoymaq 321 00:19:24,890 --> 00:19:30,260 Yalnız 123 yazın Belə ki, sonra yalnız% d, uyğun gedir 322 00:19:30,260 --> 00:19:33,880 və yalnız n, 123 kimi dəyəri ilə saxlanılan olur 323 00:19:33,880 --> 00:19:35,640 və heç bir şey c qoymaq olur. 324 00:19:35,640 --> 00:19:37,620 C belə danışmaq, bir zibil dəyər olaraq qalır - 325 00:19:37,620 --> 00:19:40,730 zibil çünki bəzi dəyəri üçün başlatılmış heç vaxt var. 326 00:19:40,730 --> 00:19:45,520 Mən bu göstəricilər 1 məskunlaşmış Çünki bu halda, sscanf 1 qaytarır 327 00:19:45,520 --> 00:19:50,190 Mən yaddaş pulsuz xətti azad belə böyük halda, mən int var 328 00:19:50,190 --> 00:19:54,000 ki GetString həqiqətən ayrılmış, sonra, n qayıtmaq 329 00:19:54,000 --> 00:19:58,500 ki, bəyanat gəlir Yeniden Dene yerləşir heç merak başqa, əgər burada gəlir. 330 00:19:58,500 --> 00:20:04,390 Belə ki, əgər, əksinə, mən 123foo yazın - mətn yalnız bir təsadüfi sequence - 331 00:20:04,390 --> 00:20:08,490 sscanf sayı, sayı,, f, görmək gedir 332 00:20:08,490 --> 00:20:16,410 və n-ci ildə 123 qoymaq olacaq ki, bu c f qoymaq və sonra 2 qayıtmaq olacaq. 333 00:20:16,410 --> 00:20:20,640 Beləliklə, biz yalnız sscanf davranışı, bir çox sadə şəkildə əsas anlayışı istifadə edərək, var - 334 00:20:20,640 --> 00:20:23,900 də, ilk baxışda ancaq gün olduqca sadə mexanizm sonunda kompleksi - 335 00:20:23,900 --> 00:20:28,320 deyərək bir int var və əgər, ki, mən tapdım ki, yalnız şey? 336 00:20:28,320 --> 00:20:29,860 Və burada ağ qəsdən edir. 337 00:20:29,860 --> 00:20:34,000 Siz sscanf üçün sənədlərin oxumaq varsa, bu ağ bir parça daxil əgər sizə deyir 338 00:20:34,000 --> 00:20:38,810 əvvəlində və ya sonunda, sscanf çox, hər hansı səbəbdən, istifadəçi imkan verir 339 00:20:38,810 --> 00:20:41,860 kosmik bar 123 hit və qanuni olacaq. 340 00:20:41,860 --> 00:20:44,150 Onlar yer bar hit yalnız çünki Siz istifadəçi fəğan deyil 341 00:20:44,150 --> 00:20:48,640 əvvəlində və ya sonunda, istifadəçi dostu bir az çoxdur. 342 00:20:48,640 --> 00:20:52,300 >> Sonra suallarınız GetInt haqqında? Bəli. >> [Tələbə] yalnız bir char qoymaq ne? 343 00:20:52,300 --> 00:20:54,030 Sual Yaxşı. 344 00:20:54,030 --> 00:20:59,890 Nə yalnız f kimi bir char ildə yazılmış və heç 123 yazaraq olmadan Enter əgər? 345 00:20:59,890 --> 00:21:02,420 Siz kodu bu xətti davranış sonra olacaq nə düşünürsünüz? 346 00:21:02,420 --> 00:21:04,730 [Işitilemez tələbə cavab] 347 00:21:04,730 --> 00:21:08,790 Bu halda, o, n və ya c doldurmaq niyyətində deyil, çünki Bəli, belə sscanf çox əhatə edə bilər. 348 00:21:08,790 --> 00:21:15,310 Bu halda olan mən də ssenari tutmaq alıram yerinə, 0 qayıtmaq olacaq 349 00:21:15,310 --> 00:21:18,750 istəyirəm gözlənilən dəyəri 1 çünki. 350 00:21:18,750 --> 00:21:22,000 Mən yalnız bir istəyirik və yalnız bir şey doldurulmalıdır. Sual Yaxşı. 351 00:21:22,000 --> 00:21:24,290 >> Digər? Bütün hüquqlar. 352 00:21:24,290 --> 00:21:26,250 >> Burada funksiyaları bütün vasitəsilə getmək edə edək, 353 00:21:26,250 --> 00:21:29,500 amma qalan faiz bəlkə də görünür ki, bir GetString edir 354 00:21:29,500 --> 00:21:32,790 bu GetLongLong, GetFloat, GetInt, GetDouble çıxır ki, çünki 355 00:21:32,790 --> 00:21:36,260 bütün ayaqla zərbə GetString onların funksionallığı bir çox. 356 00:21:36,260 --> 00:21:39,750 Belə nin burada həyata necə nəzər salaq. 357 00:21:39,750 --> 00:21:43,630 Bu bir az mürəkkəb görünür, ancaq eyni əsasları istifadə 358 00:21:43,630 --> 00:21:45,670 Biz keçən həftə söhbət başlamışdır. 359 00:21:45,670 --> 00:21:49,490 GetString, bu da qədər burada boşluğu kimi heç bir dəlil edir 360 00:21:49,490 --> 00:21:53,730 və mən yəqin bufer adlı simli bəyan edirəm, bir string qaytarır. 361 00:21:53,730 --> 00:21:56,270 Mən, həqiqətən, hələ istifadə etmək üçün nə bilmirəm, amma biz görəcəksiniz. 362 00:21:56,270 --> 00:21:58,390 Gücü default 0 kimi görünüyor. 363 00:21:58,390 --> 00:22:01,350 Tamamilə əmin bu n hələ istifadə etmək üçün gedir nə əmin deyil, gedir, 364 00:22:01,350 --> 00:22:03,590 amma indi bir az daha maraqlı əldə edir. 365 00:22:03,590 --> 00:22:06,520 Line 243, biz bir int, c bəyan edir. 366 00:22:06,520 --> 00:22:08,800 Bu axmaq ətraflı sortudur. 367 00:22:08,800 --> 00:22:15,820 A char 8 bit və 8 bit neçə müxtəlif dəyərlər saxlaya bilərsiniz? >> [Tələbə] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 Orada olan 256 müxtəlif ASCII simvol etmək istəyirsinizsə problem 369 00:22:20,730 --> 00:22:23,340 geri hesab - bu alarkən bir şey deyil. 370 00:22:23,340 --> 00:22:25,710 Ki, böyük ASCII chart geri edirəm Amma əgər biz həftə əvvəl idi, 371 00:22:25,710 --> 00:22:30,600 128 və ya 256 ASCII simvol bu halda idi. 372 00:22:30,600 --> 00:22:32,940 Biz 0s və 1s qədər bütün nümunələri istifadə etmişdir. 373 00:22:32,940 --> 00:22:36,210 Əgər səhv aşkar etmək istəyirəm ki, əgər bir problem 374 00:22:36,210 --> 00:22:40,190 artıq Sandıqı üçün 256 dəyərlər kullanıyorsanız, çünki 375 00:22:40,190 --> 00:22:43,050 İndi deyərək heç bir yol var, çünki həqiqətən, davam plan etmədi 376 00:22:43,050 --> 00:22:46,270 Bu legit xarakterli deyil, bu bir səhv mesaj. 377 00:22:46,270 --> 00:22:50,270 Belə ki, nə dünyada nə onların növbəti böyük dəyəri, bir int kimi bir şey, istifadə 378 00:22:50,270 --> 00:22:54,720 siz 4 milyard mümkün dəyərləri, bit, 32-crazy var ki, 379 00:22:54,720 --> 00:22:58,860 sadəcə mahiyyətcə 257 onlardan istifadə son bilər ki, 380 00:22:58,860 --> 00:23:01,720 1 olan bir səhv kimi bəzi xüsusi mənası var. 381 00:23:01,720 --> 00:23:03,120 >> Belə nin necə bu işlər görək. 382 00:23:03,120 --> 00:23:07,760 Line 246, mən, fgetc zəng ki, bu böyük isə loop var 383 00:23:07,760 --> 00:23:11,090 f mənası fayl, belə getc, sonra stdin. 384 00:23:11,090 --> 00:23:15,520 Bu yalnız klaviatura daxil oxumaq deyərək daha dəqiq şəkildə həyata çevirir. 385 00:23:15,520 --> 00:23:19,300 Standard giriş vasitəsilə klaviatura, standart çıxış, ekran deməkdir 386 00:23:19,300 --> 00:23:23,310 və biz pset4 görmək bilərsiniz standart səhv, ekran deməkdir 387 00:23:23,310 --> 00:23:27,490 lakin faktiki çıxışı ilə ekranın xüsusi bir hissəsi conflated deyil ki, 388 00:23:27,490 --> 00:23:30,750 sizə çap etmək üçün nəzərdə edir. Gələcəkdə o, lakin daha çox. 389 00:23:30,750 --> 00:23:34,440 Belə fgetc yalnız klaviatura bir xarakter oxumaq və harada saxlanılması deməkdir? 390 00:23:34,440 --> 00:23:37,350 C ildə Store. 391 00:23:37,350 --> 00:23:41,360 Və sonra yoxlamaq - mən yalnız burada Boolean conjunctions kullanıyorum - 392 00:23:41,360 --> 00:23:46,000 bərabər deyil əmin - \ n, belə ki, istifadəçi daxil təşkil edir, biz o nöqtədə dayandırmaq istəyirəm, 393 00:23:46,000 --> 00:23:49,850 loop sonuna - və biz də xüsusi daimi EOF kontrol istəyirsinizsə, 394 00:23:49,850 --> 00:23:53,610 Bildiyiniz və ya tapmaq, bu nə olan durmaq bilər? Fayl >> [tələbə] Axırıncı. Fayl >> Sona. 395 00:23:53,610 --> 00:23:56,560 Bu cür cəfəng çünki klaviatura da yazaraq alıram əgər, 396 00:23:56,560 --> 00:23:58,870 bu cəlb fayl, həqiqətən var 397 00:23:58,870 --> 00:24:01,150 lakin bu, yalnız demək üçün istifadə ümumi müddəti sort olunur 398 00:24:01,150 --> 00:24:04,220 başqa heç bir şey insan barmaqlarını gələn. 399 00:24:04,220 --> 00:24:06,460 EOF - fayl sonu. 400 00:24:06,460 --> 00:24:09,920 Əgər sizin klaviatura ilə nəzarət D hit olduğunuz halda bir kənara, siz hələ olardı ki, kimi - 401 00:24:09,920 --> 00:24:15,230 Siz Control C təşkil etdik - Control D EOF adlı bu xüsusi daimi göndərir. 402 00:24:15,230 --> 00:24:19,850 Belə ki, indi biz yalnız bəzi dinamik yaddaş ayrılması var. 403 00:24:19,850 --> 00:24:23,440 >> Beləliklə, əgər (n + 1> gücü). İndi n izah edəcəyik. 404 00:24:23,440 --> 00:24:26,100 N yalnız neçə bayt, bufer hazırda edilir 405 00:24:26,100 --> 00:24:28,620 hazırda istifadəçi yaradılmasına olduğunuz string. 406 00:24:28,620 --> 00:24:33,450 Siz bufer potensialın var artıq bufer daha çox simvol varsa, 407 00:24:33,450 --> 00:24:37,410 daxilən biz sonra nə etmək lazımdır daha gücü ayrılması olunur. 408 00:24:37,410 --> 00:24:43,330 Mən burada hesab bəzi artıq üzsüz və burada yalnız bu funksiya diqqət gedirəm. 409 00:24:43,330 --> 00:24:46,070 Siz malloc nə və ya ən azı ümumiyyətlə tanışdır. 410 00:24:46,070 --> 00:24:48,970 Realloc nə bir tahmin edin. >> [Tələbə] yaddaş edər. 411 00:24:48,970 --> 00:24:52,920 Bu olduqca yaddaş əlavə deyil. Bu aşağıdakı kimi yaddaş reallocates. 412 00:24:52,920 --> 00:24:57,220 Əgər yaddaş daha vermək simli sonunda otaq hələ varsa 413 00:24:57,220 --> 00:25:00,000 o ilk verir daha sonra əlavə yaddaş almaq lazımdır. 414 00:25:00,000 --> 00:25:03,460 Belə ki, yalnız geri geri geri geri string in simvol qoyulması saxlaya bilərsiniz. 415 00:25:03,460 --> 00:25:05,830 Iddia deyil, lakin çox uzun gözləyirdi, çünki 416 00:25:05,830 --> 00:25:07,940 və təsadüfi bir şey yaddaşında plopped oldu 417 00:25:07,940 --> 00:25:10,290 lakin əlavə yaddaş burada var ki, OK. 418 00:25:10,290 --> 00:25:13,100 Realloc, sizin üçün bütün ağır atletika etmək niyyətindədir 419 00:25:13,100 --> 00:25:16,750 , siz indiyədək buradan oxuya olduğunuz string hərəkət orada yazmaq, 420 00:25:16,750 --> 00:25:19,460 və sonra o nöqtədə bir daha pist verir. 421 00:25:19,460 --> 00:25:22,550 >> Belə ki, əl dalğası ilə, mənə nə GetString etdiyini deyim 422 00:25:22,550 --> 00:25:26,330 bir kiçik bufer, bəlkə bir xarakter ilə başlayan edir 423 00:25:26,330 --> 00:25:30,820 və iki simvol istifadəçi növləri, əgər GetString realloc zəng başa və deyir 424 00:25:30,820 --> 00:25:33,150 bir xarakter kifayət deyil, mənə iki simvol verir. 425 00:25:33,150 --> 00:25:35,950 Siz loop məntiqi oxuyun sonra, o demək olacaq 426 00:25:35,950 --> 00:25:39,600 3 simvol Yığdığınız istifadəçi; indi deyil, 2 deyil, 4 simvol mənə vermək 427 00:25:39,600 --> 00:25:42,320 sonra mənə 16 və 32 vermək, sonra mənə 8 verir. 428 00:25:42,320 --> 00:25:45,000 Mən gücü hər zaman misli edirəm ki, 429 00:25:45,000 --> 00:25:48,570 bufer yavaş-yavaş inkişaf etmək niyyətində deyil o deməkdir ki, bu super sürətli inkişaf gedir. 430 00:25:48,570 --> 00:25:51,380 Və nə üstünlüyü ola bilər? 431 00:25:51,380 --> 00:25:54,600 Niyə bufer həcmi misli am 432 00:25:54,600 --> 00:25:58,020 istifadəçi yalnız klaviatura bir əlavə karakter oluna bilər baxmayaraq? 433 00:25:58,020 --> 00:26:01,750 [Işitilemez tələbə cavab] >> ki, nə var? >> [Tələbə] Siz tez-tez inkişaf yoxdur. 434 00:26:01,750 --> 00:26:03,300 Exactly. Siz tez-tez inkişaf yoxdur. 435 00:26:03,300 --> 00:26:05,510 Və bu yalnız növ, burada Oyna hedcinq edirik 436 00:26:05,510 --> 00:26:10,850 ideyası o yavaş çalışır, çünki siz realloc bir çox zəng etmək istəmirəm olan. 437 00:26:10,850 --> 00:26:12,910 Siz yaddaş üçün əməliyyat sistemi xahiş istənilən vaxt 438 00:26:12,910 --> 00:26:16,990 tezliklə gələcək problem müəyyən görəcəksiniz kimi, bəzi vaxt üçün çalışır. 439 00:26:16,990 --> 00:26:20,010 Beləliklə, siz yer israf edirik, hətta, vaxt ki məbləği minimuma endirilməsi, 440 00:26:20,010 --> 00:26:21,900 yaxşı bir şey olmağa çalışır. 441 00:26:21,900 --> 00:26:24,060 >> Amma biz burada GetString yekun hissəsinin oxumaq əgər - 442 00:26:24,060 --> 00:26:27,950 və burada hər bir xətt anlaşma bu gün vacib deyil - 443 00:26:27,950 --> 00:26:30,530 nəticədə yenə malloc çağırır görə 444 00:26:30,530 --> 00:26:33,880 bu simli üçün lazımdır və bir çox bytes kimi dəqiq ayırır 445 00:26:33,880 --> 00:26:38,060 və sonra azad çox böyük bufer zəng üz salır 446 00:26:38,060 --> 00:26:40,080 həqiqətən çox dəfə ikiqat oldu əgər. 447 00:26:40,080 --> 00:26:42,730 Belə ki, qısa ki, GetString bütün bu vaxt işləyir nasıl. 448 00:26:42,730 --> 00:26:47,060 Bütün bu təkrar-təkrar bir-bir xarakter oxumaq deyil 449 00:26:47,060 --> 00:26:50,750 və bəzi əlavə yaddaş lazımdır hər dəfə, o, bunun üçün əməliyyat sistemi soruşur 450 00:26:50,750 --> 00:26:53,670 realloc zəng. 451 00:26:53,670 --> 00:26:57,890 >> Hər hansı sual? Bütün hüquqlar. 452 00:26:57,890 --> 00:26:59,270 >> Bir hücum. 453 00:26:59,270 --> 00:27:04,060 İndi biz göstəricilərinə başa düşürəm ki, və ya ən azı göstəricilər ilə getdikcə tanış 454 00:27:04,060 --> 00:27:06,700 bütün dünya dağılmağa başlayır necə in nəzər salaq 455 00:27:06,700 --> 00:27:10,030 Əgər kifayət qədər çəkişmə istifadəçilər qarşı müdafiə yoxsa, 456 00:27:10,030 --> 00:27:11,850 sistemi daxil hack çalışan insanlar, 457 00:27:11,850 --> 00:27:16,890 bir qeydiyyat kodu circumventing ilə proqram oğurlamaq üçün çalışırıq insanlar 458 00:27:16,890 --> 00:27:19,090 onlar da yazın ola bilər ki, 459 00:27:19,090 --> 00:27:22,990 >> Alt əsas funksiyası var ki, yalnız C kodu olan, burada bu nümunə bir göz atın 460 00:27:22,990 --> 00:27:26,380 bir funksiya foo çağırır. Və nə foo keçən edir? 461 00:27:26,380 --> 00:27:29,680 [Tələbə] bir arqument. >> [Malan] bir arqument. 462 00:27:29,680 --> 00:27:33,450 Belə argv [1], hansı istifadəçi command line da yazdığınız ilk söz deməkdir 463 00:27:33,450 --> 00:27:36,360 a.out və ya hər hansı sonra proqram adlanır. 464 00:27:36,360 --> 00:27:41,680 Üst foo bir char * götürür belə. Amma char * yalnız nədir? >> [Tələbə] A string. 465 00:27:41,680 --> 00:27:43,350 [Malan] A simli, yeni bir şey burada var belə. 466 00:27:43,350 --> 00:27:45,420 Bu simli özbaşına bar deyilən olunur. 467 00:27:45,420 --> 00:27:51,430 Burada uyğun olaraq, char c [12]; yarı-texniki İngilis sort, bu xətt nə edir? 468 00:27:51,430 --> 00:27:55,220 Və [tələbə] Bir sıra - nin >> Array? >> [Tələbə] uchun. >> Uchun. 469 00:27:55,220 --> 00:27:58,870 Mənə 12 simvol bir sıra verin. Beləliklə, biz bu bufer zəng edə bilər. 470 00:27:58,870 --> 00:28:02,920 Bu texniki c adlanır, lakin proqramlaşdırma bufer yalnız kosmik bir dəstə deməkdir oldu 471 00:28:02,920 --> 00:28:04,800 bəzi məhsulları da bilər ki, 472 00:28:04,800 --> 00:28:07,940 Sonra nəhayət, memcpy biz əvvəl istifadə etdik, ancaq yəqin ki, nə tahmin edə bilərsiniz. 473 00:28:07,940 --> 00:28:10,480 Bu yaddaş nüsxə. O nə edir? 474 00:28:10,480 --> 00:28:19,270 Bu yəqin c içinə, onun giriş, bar nüsxə lakin yalnız bar uzunluğu. 475 00:28:19,270 --> 00:28:24,930 Amma burada bir səhv var. >> [Tələbə] Siz sizeof xarakter lazımdır. Okay. >> 476 00:28:24,930 --> 00:28:30,860 Texniki, biz, həqiqətən strlen etmək (bar) * sizeof (char)). Etməlidir Bu doğru deyil. 477 00:28:30,860 --> 00:28:33,930 Ancaq burada ən pis halda ki that's fərz edək - 478 00:28:33,930 --> 00:28:35,950 Okay. Sonra iki bugs var. 479 00:28:35,950 --> 00:28:39,160 Belə sizeof (char)); 480 00:28:39,160 --> 00:28:41,290 Bu bir az daha geniş edək. 481 00:28:41,290 --> 00:28:44,910 Belə ki, indi nə olan bir səhv, hələ də var? >> [Işitilemez tələbə cavab] 482 00:28:44,910 --> 00:28:46,990 Nə yoxlayın? >> [Tələbə] NULL yoxlayın. 483 00:28:46,990 --> 00:28:50,270 Pis şeylər Çünki ümumiyyətlə NULL kontrol olmalıdır 484 00:28:50,270 --> 00:28:53,200 siz, orada gedən son bilər, çünki sizin pointer NULL zaman 485 00:28:53,200 --> 00:28:57,630 və siz heç ulduz operator ilə dereferencing tərəfindən null gedən olmaz. 486 00:28:57,630 --> 00:29:01,050 Belə ki, yaxşı. Və biz nə edirik? Məntiqi bir qüsur da burada var. 487 00:29:01,050 --> 00:29:04,450 [Tələbə] argc> = 2 olduğunu yoxlayın. 488 00:29:04,450 --> 00:29:10,550 Argc> = 2 Belə yoxlayın. OK, bu proqram üç bugs burada var belə. 489 00:29:10,550 --> 00:29:16,630 Istifadəçi həqiqətən argv daxil şey yazdığınız əgər Biz kontrol edirik [1]. Yaxşı. 490 00:29:16,630 --> 00:29:20,950 Belə ki, üçüncü səhv var? Bəli. >> [Tələbə] C kifayət qədər böyük ola bilər. 491 00:29:20,950 --> 00:29:23,320 Yaxşı. Biz bir ssenari yoxlanılır. 492 00:29:23,320 --> 00:29:29,520 Biz dolayısı bar müddəti çox daha çox yaddaş surəti yoxdur yoxlanılır. 493 00:29:29,520 --> 00:29:32,510 Belə ki, simli əgər Yığdığınız istifadəçi 10 simvol uzun, 494 00:29:32,510 --> 00:29:36,020 bu yalnız 10 simvol surəti deyib. Və ki, OK. 495 00:29:36,020 --> 00:29:39,940 Lakin istifadəçi 20-karakter söz kimi tez bir söz nə tipli əgər? 496 00:29:39,940 --> 00:29:44,900 Bu nə daxil bar kopyalayın 20 simvol deyib? 497 00:29:44,900 --> 00:29:49,750 Başqa bizim bufer kimi tanınan C, siz yalnız data yazdı deməkdir 498 00:29:49,750 --> 00:29:52,540 öz olmayan 8 bayt yerlərdə, 499 00:29:52,540 --> 00:29:54,870 və siz onlara ayrılmış heç mənada ki, onlara sahib deyil. 500 00:29:54,870 --> 00:30:00,370 Belə ki, bu ümumiyyətlə bufer daşqın hücum və ya tampon dağıtmaq hücum kimi tanınan nə edir. 501 00:30:00,370 --> 00:30:05,580 Və bu mənada bir hücum var ki, əgər istifadəçi və ya funksiyası zəng olan proqram 502 00:30:05,580 --> 00:30:10,490 həqiqətən gələn nə olur, pis bu etdiyini həqiqətən olduqca pis ola bilər. 503 00:30:10,490 --> 00:30:12,450 >> Belə nin burada bu şəkil nəzər salaq. 504 00:30:12,450 --> 00:30:16,060 Bu şəkil yaddaş sizin yığını təmsil edir. 505 00:30:16,060 --> 00:30:19,580 Bir funksiyası zəng hər zaman yığını bu az çərçivəsində almaq Xatırladaq ki, 506 00:30:19,580 --> 00:30:21,520 və sonra başqa bir və sonra başqa və başqa. 507 00:30:21,520 --> 00:30:24,300 Və beləliklə, uzaq, biz yalnız növ var bu düzbucaqlı kimi Abstrak 508 00:30:24,300 --> 00:30:26,290 şurası və ya burada ekranda ya. 509 00:30:26,290 --> 00:30:30,580 Amma biz bir funksiyası foo zəng zaman o düzbucaqlı biri üzrə Yakınlaştırmak əgər, 510 00:30:30,580 --> 00:30:35,880 daha ki, düzbucaqlı ki çərçivə yığını daxilində olduğunu çıxır 511 00:30:35,880 --> 00:30:40,060 artıq biz mübadilə söhbət idi kimi yalnız x və y və bir və b. 512 00:30:40,060 --> 00:30:44,410 Bəzi aşağı səviyyədə ətraflı qayıt Ünvan onların arasında olduğunu çıxır. 513 00:30:44,410 --> 00:30:49,550 Əsas foo çağırır zaman Belə ki, çıxır, əsas foo məlumat var 514 00:30:49,550 --> 00:30:53,520 nə əsas ünvan kompüter yaddaşında edir 515 00:30:53,520 --> 00:30:57,770 başqa, çünki tezliklə foo kimi, burada bu işdə olduğu kimi, icra edilir 516 00:30:57,770 --> 00:31:00,830 bir dəfə, foo sonunda bu qapalı buruq brace çatmaq 517 00:31:00,830 --> 00:31:05,310 Proqramın nəzarət getmək nəzərdə yerləşir Ü necə heck foo bilir? 518 00:31:05,310 --> 00:31:08,970 Bu suala cavab burada bu qırmızı düzbucaqlı olduğunu çıxır. 519 00:31:08,970 --> 00:31:12,670 Bu göstərici təmsil və müvəqqəti saxlamaq üçün kompüter up 520 00:31:12,670 --> 00:31:17,030 qondarma yığın ki, belə tezliklə foo kimi əsas ünvan icra edilir 521 00:31:17,030 --> 00:31:21,120 kompüter yerləşir və geri əsas nə line bilir. 522 00:31:21,120 --> 00:31:23,940 Saxlanılan Frame pointer bu eyni aiddir. 523 00:31:23,940 --> 00:31:26,310 Burada Char * bar nə təmsil? 524 00:31:26,310 --> 00:31:31,350 İndi bu mavi seqment burada foo nin çərçivəsində edir. Bar nədir? 525 00:31:31,570 --> 00:31:35,010 Bar yalnız foo funksiyası dəlildir. 526 00:31:35,010 --> 00:31:37,500 Belə ki, indi biz tanış şəkil növ geri istəyirik. 527 00:31:37,500 --> 00:31:39,850 Ekranda daha stuff və daha çox distractions var 528 00:31:39,850 --> 00:31:43,380 lakin bu mavi seqment yalnız biz Kara Tahta cəlb olduğunuz nə 529 00:31:43,380 --> 00:31:45,790 svop kimi bir şey. Bu foo üçün çərçivə edir. 530 00:31:45,790 --> 00:31:51,490 Və bu yeganə şey indi bu göstərici olan bar edir. 531 00:31:51,490 --> 00:31:55,220 Amma nə burada bu kodu görə yığını olmalıdır? 532 00:31:55,220 --> 00:31:57,760 [Tələbə] char c [12]. >> [Malan] char c [12]. 533 00:31:57,760 --> 00:32:02,810 Biz, həmçinin, c adlı dəyişən ayrılmış yaddaş, 12 meydanların görürsünüz 534 00:32:02,810 --> 00:32:04,970 və həqiqətən biz ekranda ki, var. 535 00:32:04,970 --> 00:32:08,480 Çox top var c [0] Bu diaqram, sonra müəllif 536 00:32:08,480 --> 00:32:11,850 meydanların bütün rəsm narahat, lakin 12 həqiqətən var etməyib 537 00:32:11,850 --> 00:32:16,590 çünki sağ alt baxsaq, c [11] siz 0 saymaq əgər 12-ci belə byte edir. 538 00:32:16,590 --> 00:32:18,400 Amma burada problem var. 539 00:32:18,400 --> 00:32:22,390 C hansı istiqamətdə inkişaf edir? 540 00:32:22,390 --> 00:32:27,080 Sort o başında başlayır və alt artır əgər aşağı üst. 541 00:32:27,080 --> 00:32:30,110 Biz bütün burada özümüzü çox pist tərk kimi baxmaq deyil. 542 00:32:30,110 --> 00:32:32,090 Biz növ bir küncə özümüzü boyalı sonra 543 00:32:32,090 --> 00:32:36,940 və c [11] Saxlanılan Frame göstərici qarşı hüququ olan bar qarşı sağ qədər, 544 00:32:36,940 --> 00:32:39,960 olan qayıt Ünvan qarşı sağ qədər. Çox otaq var. 545 00:32:39,960 --> 00:32:42,810 Siz vint əgər Belə ki, dolayısı sonra nə 546 00:32:42,810 --> 00:32:46,500 və 12-byte bufer daxil 20 bytes oxu cəhd? 547 00:32:46,500 --> 00:32:50,060 Harada o 8 əlavə bytes getmək gedir? >> [Tələbə] Inside - 548 00:32:50,060 --> 00:32:53,200 Başqa hər şey Inside olan bəzi mühüm super edir. 549 00:32:53,200 --> 00:32:57,260 Və ən əsası, potensial, orada qayıt Ünvan qırmızı qutusunda 550 00:32:57,260 --> 00:33:03,560 çünki, ya təsadüfən və ya adversarially o 4 bayt üzerine güman 551 00:33:03,560 --> 00:33:07,260 zibil, lakin bir sıra yalnız o pointer ünvanı, 552 00:33:07,260 --> 00:33:09,810 ki, yaddaş faktiki ünvan təmsil olur. 553 00:33:09,810 --> 00:33:13,880 Məntiqi dolayısı, nədir? >> [Tələbə] Function fərqli bir yerdə geri gedir. 554 00:33:13,880 --> 00:33:15,250 Exactly. 555 00:33:15,250 --> 00:33:19,170 Foo yekunları və Xit buruq burğu ki, proqram davam edir zaman 556 00:33:19,170 --> 00:33:25,060 əsas qayıtmaq üçün deyil, bu qırmızı qutusuna nə ünvan geri olacaq. 557 00:33:25,060 --> 00:33:28,600 >> Circumventing proqram qeydiyyat halda, 558 00:33:28,600 --> 00:33:32,260 üçün geri olan ünvan normal adlı olur ki, funksiyası nə əgər 559 00:33:32,260 --> 00:33:35,690 Əgər proqram üçün ödənilmiş və qeydiyyat kodu inputted? sonra 560 00:33:35,690 --> 00:33:39,870 Siz burada niyyətində deyil kandırmak kompüter düzmək əvəzinə burada qədər davam edə bilər. 561 00:33:39,870 --> 00:33:45,100 Həqiqətən ağıllı olduğunuz halda və ya bir rəqib həqiqətən, məsələn, klaviatura ilə yazın bilər 562 00:33:45,100 --> 00:33:50,690 bir real söz deyil, 20 simvol, lakin o, həqiqətən növ güman 563 00:33:50,690 --> 00:33:52,770 kodu təmsil edən bir simvol. 564 00:33:52,770 --> 00:33:55,320 Və C kodu olacaq deyil, faktiki simvol olacaq 565 00:33:55,320 --> 00:33:59,290 ki 0s və 1s ikili maşın kodu təmsil edir. 566 00:33:59,290 --> 00:34:01,290 Lakin, onlar bunu etmək üçün kifayət qədər ağıllı olduğunuz güman 567 00:34:01,290 --> 00:34:06,500 elə mahiyyətcə tərtib kodu ki GetString tez bir yapışdırıb üçün, 568 00:34:06,500 --> 00:34:09,980 və son 4 bayt ki, geri ünvan üzerine. 569 00:34:09,980 --> 00:34:13,360 Və giriş nə ünvan edir? 570 00:34:13,360 --> 00:34:18,630 Bu, faktiki olaraq bu qırmızı düzbucaqlı bufer ilk byte və ünvanı saklar. 571 00:34:18,630 --> 00:34:23,070 Belə ki, siz həqiqətən ağıllı olmalıdır, və bu orada pis insanlar üçün sınaq və səhv bir çox 572 00:34:23,070 --> 00:34:25,639 ancaq bu bufer necə böyük anlamaq bilər 573 00:34:25,639 --> 00:34:28,820 giriş son bir neçə bayt proqram təmin edir ki, bu cür 574 00:34:28,820 --> 00:34:33,540 sizin bufer başlanması ünvana bərabər baş, siz bunu edə bilərsiniz. 575 00:34:33,540 --> 00:34:39,320 Biz adətən salam və \ 0 demək, bu bufer qədər başa budur. 576 00:34:39,320 --> 00:34:44,420 Amma biz daha ağıllı olduğunuz və biz ümumi olaraq hücum kodu arayacaðým nə ilə bufer doldurmaq əgər - 577 00:34:44,420 --> 00:34:48,860 AAA, hücum, hücum, hücumu - bu yalnız pis bir şey yoxdur ki, bir şey olduğu, 578 00:34:48,860 --> 00:34:51,820 həqiqətən ağıllı olduğunuz halda nə olur, siz bunu edə bilər. 579 00:34:51,820 --> 00:34:58,610 80, C0, 35, 08 - burada qırmızı qutusunda ədəd bir ardıcıllıqla deyil. 580 00:34:58,610 --> 00:35:01,610 Ki, burada ki sayı eşleşen edək. 581 00:35:01,610 --> 00:35:04,430 Bu əks qaydada, ancaq bəzi başqa vaxt daha çox. 582 00:35:04,430 --> 00:35:08,140 Bu cavab ünvanı qəsdən dəyişdikdə edək ki, 583 00:35:08,140 --> 00:35:12,020 burada ünvanı bərabər, əsas deyil ünvan. 584 00:35:12,020 --> 00:35:17,500 Pis adam super Ağıllı Beləliklə, əgər, o, hücum kodu daxil edir 585 00:35:17,500 --> 00:35:20,930 istifadəçinin bütün faylları silin və ya parol surəti bir şey kimi 586 00:35:20,930 --> 00:35:24,680 və ya sonra daxil edə bilərsiniz ki, bir istifadəçi hesabı yaratmaq - bir bütün. 587 00:35:24,680 --> 00:35:26,950 >> Və bu təhlükə və C. hakimiyyəti, həm də 588 00:35:26,950 --> 00:35:29,840 Siz göstəricilər vasitəsilə yaddaş girişi var 589 00:35:29,840 --> 00:35:32,520 və buna görə də, bir kompüter yaddaş daxil istədiyiniz bir şey yaza bilərsiniz 590 00:35:32,520 --> 00:35:35,080 bir kompüter istədiyiniz bir şey edə 591 00:35:35,080 --> 00:35:39,550 sadəcə onu öz yaddaş məkanının ətrafında tullanmaq etmişlər. 592 00:35:39,550 --> 00:35:44,650 Və bu gün bir çox proqram və bir çox saytlarda güzəşt ki, 593 00:35:44,650 --> 00:35:46,200 Bu istifadə edərək insanlar üçün aşağı qaynatmaq. 594 00:35:46,200 --> 00:35:50,760 Bu super müasir hücum kimi görünə bilər, lakin həmişə yol başlamaq deyil. 595 00:35:50,760 --> 00:35:53,560 Bu həqiqət, nə pis insanlar adətən edəcəyik ki, 596 00:35:53,560 --> 00:35:58,200 bir command line bir proqram və ya bir GUI proqram və ya bir veb olub 597 00:35:58,200 --> 00:35:59,940 yalnız hədyan təmin başlamaq. 598 00:35:59,940 --> 00:36:03,980 Siz, axtarış sahəsində və hit daxil edin bir həqiqətən böyük söz yazın 599 00:36:03,980 --> 00:36:05,780 və veb çökerse görmək üçün gözləmək 600 00:36:05,780 --> 00:36:09,990 və ya proqram bəzi səhv mesaj büruzə əgər görmək üçün gözləmək 601 00:36:09,990 --> 00:36:14,330 siz pis oğlan kimi uğurlu olmaq və əgər bəzi crazy giriş təmin çünki 602 00:36:14,330 --> 00:36:18,980 proqramçı sizin pis davranış təxmin etməyib deməkdir ki, proqram, çöküyor ki, 603 00:36:18,980 --> 00:36:23,630 ki, siz kifayət qədər səy, kifayət qədər sınaq və səhv ilə yəqin edə bilərsiniz deməkdir 604 00:36:23,630 --> 00:36:26,650 daha dəqiq hücum aparmaq üçün necə anlamaq. 605 00:36:26,650 --> 00:36:31,410 Təhlükəsizlik Belə qədər bir hissəsi yalnız cəmi bu hücumların qarşısını deyil 606 00:36:31,410 --> 00:36:34,100 lakin onların aşkar və həqiqətən logs baxaraq 607 00:36:34,100 --> 00:36:36,780 və crazy giriş Sizin veb yazdığınız insanların nə görən, 608 00:36:36,780 --> 00:36:38,960 hansı axtarış sözü veb insanları yazdığınız 609 00:36:38,960 --> 00:36:42,870 bir bufer coşğun ümid. 610 00:36:42,870 --> 00:36:45,500 Və nə sadə əsasları bu bütün sonunda aşağı bir sıra var 611 00:36:45,500 --> 00:36:49,080 və nə yaddaş ayrılması və istifadə etmək deməkdir. 612 00:36:49,080 --> 00:36:51,710 >> Sonra da bu əlaqədar. 613 00:36:51,710 --> 00:36:54,280 Nin yalnız yenə bir sabit daxili nəzər salaq. 614 00:36:54,280 --> 00:36:58,440 Siz əvvəl bir həftə və ya iki Xatırladaq ki, sizin zibil qutusu və ya zibil bilər faylları sürükleyin zaman 615 00:36:58,440 --> 00:37:03,710 nə olar? >> [Tələbə] Heç bir şey. >> Absolutely heç bir şey, sağ? 616 00:37:03,710 --> 00:37:05,740 Siz disk space aşağı run Nəhayət əgər 617 00:37:05,740 --> 00:37:08,190 Windows və ya Mac OS üçün silme başlayacaq. 618 00:37:08,190 --> 00:37:10,390 Orada bir şey sürükleyin Amma əgər ki, bütün təhlükəsiz deyil. 619 00:37:10,390 --> 00:37:13,800 Bütün roommate və ya dost və ya ailə üzvü nə var ikiqat basın və voiture, edir 620 00:37:13,800 --> 00:37:16,310 Silmek üçün cəhd bütün yarım yamalak fayllar var. 621 00:37:16,310 --> 00:37:19,590 Bizim ən azı sağ basın və ya basın nəzarət var bilirik ki, 622 00:37:19,590 --> 00:37:22,310 və belə zibil və ya bir şey boş. 623 00:37:22,310 --> 00:37:25,000 Lakin sonra olduqca oyun etmir ki, 624 00:37:25,000 --> 00:37:28,010 sizin sabit bir fayl zaman nə olar, çünki 625 00:37:28,010 --> 00:37:32,770 ki, bir Word sənəd və ya bir JPEG təmsil və bu sabit təmsil 626 00:37:32,770 --> 00:37:35,350 və Gəlin burada bu sliver ki, fayl təmsil demək 627 00:37:35,350 --> 00:37:38,390 və 0s və 1s bütün dəstə ibarət oldu. 628 00:37:38,390 --> 00:37:42,470 Nə yalnız zibil ki, fayl sürükleyin zaman olur və ya bin yeniden bilər 629 00:37:42,470 --> 00:37:48,020 həm də boş? Heç Sort. 630 00:37:48,020 --> 00:37:49,640 İndi tamamilə heç bir şey deyil. 631 00:37:49,640 --> 00:37:54,290 Bir az bir şey bu cədvəl formasında olur, çünki İndi yalnız bir şey var. 632 00:37:54,290 --> 00:37:58,370 Belə ki, bir kompüter yaddaş daxili verilənlər bazası və ya masa bir növ var 633 00:37:58,370 --> 00:38:03,850 ki, mahiyyətcə, faylları üçün bir sütun adları və faylları üçün bir sütun "yeri var 634 00:38:03,850 --> 00:38:07,720 bu yeri 123, yalnız bir təsadüfi sayı ola bilər. 635 00:38:07,720 --> 00:38:14,560 Beləliklə, biz x.jpeg və yeri 123 kimi bir şey ola bilər. 636 00:38:14,560 --> 00:38:18,800 Siz həqiqətən, sizin zibil boşaltmaq ne sonra olur? 637 00:38:18,800 --> 00:38:20,330 Üz gedir. 638 00:38:20,330 --> 00:38:23,610 Amma nə getmək deyil 0s və 1s edir. 639 00:38:23,610 --> 00:38:26,270 >> Belə pset4 keçid sonra nə var? 640 00:38:26,270 --> 00:38:31,240 Yaxşı, pset4 ilə, yalnız biz təsadüfən kompakt flash kart silinə etdik çünki 641 00:38:31,240 --> 00:38:35,750 pis luck bu şəkilləri bütün və ya yalnız çünki ki bad oldu 642 00:38:35,750 --> 00:38:38,000 bu 0s və 1s hələ yoxdur demək deyil. 643 00:38:38,000 --> 00:38:40,410 Bir şey bad oldu çünki Bəlkə onlara bir neçə itirilmiş olunur 644 00:38:40,410 --> 00:38:43,320 bəzi 0s 1s oldu və 1s 0s oldu mənada. 645 00:38:43,320 --> 00:38:47,240 Buggy proqram və ya qüsurlu hardware çünki pis şeylər ola bilər. 646 00:38:47,240 --> 00:38:50,370 Lakin həmin bit çox, bəlkə onlardan da 100%, orada hələ də. 647 00:38:50,370 --> 00:38:55,050 Bu JPEG1 açılmış olduğu kompüter və ya kamera bilmir ki, yalnız var 648 00:38:55,050 --> 00:38:56,910 və harada JPEG2 başladı. 649 00:38:56,910 --> 00:39:01,070 Amma əgər, proqramçı, bu JPEGs olduğu fərasət bir qədər ilə bilmək 650 00:39:01,070 --> 00:39:06,010 və ya nə onlar kimi baxmaq belə 0s və 1s və demək JPEG, JPEG, analiz edə bilərsiniz 651 00:39:06,010 --> 00:39:09,440 Əgər mahiyyətcə yalnız üçün bir proqram yazmaq və ya bilər loop 652 00:39:09,440 --> 00:39:12,820 həmin faylların hər bir bərpa. 653 00:39:12,820 --> 00:39:16,030 Dərs sonra təhlükəsiz faylları Siliniyor başlamaq edir 654 00:39:16,030 --> 00:39:18,340 siz ümumiyyətlə bu qarşısını almaq istəyirsinizsə. Bəli. 655 00:39:18,340 --> 00:39:21,010 >> [Tələbə] necə gəlmək sizin kompüter deyir 656 00:39:21,010 --> 00:39:23,550 Siz əvvəl idi artıq yaddaş var ki? 657 00:39:23,550 --> 00:39:27,820 Əvvəl idi artıq yaddaş - >> [tələbə] Daha yaddaş. 658 00:39:27,820 --> 00:39:29,630 Oh. Sual Yaxşı. 659 00:39:29,630 --> 00:39:32,360 Belə ki, niyə sonra zibil boşaltma sonra kompüter demək deyil 660 00:39:32,360 --> 00:39:34,910 Siz əvvəl idi artıq pulsuz yer var ki? 661 00:39:34,910 --> 00:39:36,770 Özetle, bu, yalan, çünki. 662 00:39:36,770 --> 00:39:40,740 İndi deyib çünki daha texniki, daha çox yer var 663 00:39:40,740 --> 00:39:43,680 o fayl bir dəfə olduğu digər məhsulları qoya bilər. 664 00:39:43,680 --> 00:39:45,450 Amma ki, bit üz gedir demək deyil 665 00:39:45,450 --> 00:39:48,590 və bu bit, məsələn, bütün 0s dəyişib edilir demək deyil 666 00:39:48,590 --> 00:39:50,150 Sizin qorunması üçün. 667 00:39:50,150 --> 00:39:54,640 Belə ki, əksinə, siz təhlükəsiz faylları silmək və ya fiziki cihaz məhv olduqda, 668 00:39:54,640 --> 00:39:57,300 ki, həqiqətən ki, ətrafında bəzən yeganə yoldur. 669 00:39:57,300 --> 00:40:02,020 >> Belə ki, niyə biz yarı-qorxudan qeyd tərk etmir, biz bazar ertəsi görəcəksiniz. 670 00:40:02,020 --> 00:40:07,000 [Alqış] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]