1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [JAVA 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Universiteti i Harvardit] 3 00:00:04,760 --> 00:00:11,990 [Kjo është CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Gruaja] Ai është shtrirë, në lidhje me atë, unë nuk e di. 5 00:00:17,780 --> 00:00:20,300 [Man] Pra, çfarë dimë ne? 6 00:00:20,300 --> 00:00:24,120 [Gruaja] që në 9:15, Ray Santoya ishte në ATM. 7 00:00:24,120 --> 00:00:27,420 [Man] Pra, pyetja është, çfarë ishte ai bën në 09:16? 8 00:00:27,420 --> 00:00:29,980 [Gruaja] xhirimi i 9 mm në diçka. 9 00:00:29,980 --> 00:00:31,900 Ndoshta ai e pa snajper. 10 00:00:31,900 --> 00:00:34,000 [Man] Apo ai ishte duke punuar me të. 11 00:00:34,000 --> 00:00:36,330 [Gruaja] Prisni. Kthehu mbrapa një të tillë. 12 00:00:36,330 --> 00:00:38,330 [Man] Çfarë e shihni ju? 13 00:00:38,330 --> 00:00:44,520 [♫ ♫ muzikë suspenseful] 14 00:00:44,520 --> 00:00:48,320 [Gruaja] Sjellë fytyrën e tij deri. Ekran të plotë. 15 00:00:48,320 --> 00:00:51,230 [Man] syzet e tij. >> Ka një reflektim. 16 00:00:51,230 --> 00:01:00,810 [♫ ♫ muzikë suspenseful] 17 00:01:00,810 --> 00:01:03,580 [Man] Kjo është ekipi i Nuevita e baseball. Kjo është logo e tyre. 18 00:01:03,580 --> 00:01:07,790 [Gruaja] Dhe ai është duke folur për këdo që e veshur atë xhaketë. 19 00:01:07,790 --> 00:01:13,730 >> [David Malan] Pra, kjo është CS50 javë 5, dhe sot ne kemi prish pak televizion dhe film për ju. 20 00:01:13,730 --> 00:01:16,170 Pra, kur ju jeni duke shikuar një shfaqje si ky këtu, 21 00:01:16,170 --> 00:01:19,910 dhe policët thonë: "A mund të jeni të pastër se deri?" ose "Rritja" 22 00:01:19,910 --> 00:01:21,900 nuk ka asnjë të rritur në botën e vërtetë. 23 00:01:21,900 --> 00:01:25,220 Në fakt, ajo që ju të merrni të vërtetë është një diçka të vogël si kjo. 24 00:01:25,220 --> 00:01:27,570 Unë e kam tërhequr njërën nga fotot stafit nga faqe. 25 00:01:27,570 --> 00:01:30,980 Ky është një program i quajtur Photoshop. Kjo është 1 nga 2 Bowdens, 26 00:01:30,980 --> 00:01:36,300 1 e 3 Bowdens fakt, sot, sepse kemi znj Bowden si edhe këtu, me Rob dhe Palit. 27 00:01:36,300 --> 00:01:41,950 Por këtu është Rob në ekran, dhe nëse ne zoom në në atë shkëlqim ai e kishte gjithmonë në sy të tij, 28 00:01:41,950 --> 00:01:47,600 ajo që ju shikoni është fakt se ajo që ju shikoni është ajo që ju merrni. 29 00:01:47,600 --> 00:01:51,690 Kjo është "rritur", kështu që "CSI" kanë atë pak gabim. 30 00:01:51,690 --> 00:01:55,190 Ka një klip tjetër, në qoftë se ne mund të vini në "CSI", vetëm pak më të gjatë. 31 00:01:55,190 --> 00:01:58,500 Kjo është një frazë e mirë për të nxjerr tash e tutje në qoftë se ju doni të 32 00:01:58,500 --> 00:02:10,280 shëndosha teknike me miqtë tuaj, kur, me të vërtetë, ju jeni duke thënë absolutisht asgjë. 33 00:02:10,280 --> 00:02:12,970 >> [Man] Për javë unë kam qenë duke hetuar vrasjet shofer taksie Killer 34 00:02:12,970 --> 00:02:15,360 me një magjepsje të caktuar patologjik. 35 00:02:15,360 --> 00:02:17,160 [Woman # 1] Kjo është në kohë reale. 36 00:02:17,160 --> 00:02:22,930 [Woman # 2] Unë do të krijojë një ndërfaqe GUI duke përdorur Visual Basic, të shohim nëse unë mund të gjetur një adresë IP. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Pra audio nga sync mënjanë, duke krijuar një ndërfaqe GUI duke përdorur Visual Basic 38 00:02:29,570 --> 00:02:31,820 për të gjetur një adresë IP është e pakuptimtë të plotë. 39 00:02:31,820 --> 00:02:33,840 Këto ditë ju nuk do të përdorin Visual Basic, 40 00:02:33,840 --> 00:02:38,920 nuk ka nevojë për një GUI, dhe IP adresa ishte një term teknikisht të saktë. 41 00:02:38,920 --> 00:02:41,730 Kështu që të mbajë një sy jashtë për këto, dhe një nga të preferuarat e mia: 42 00:02:41,730 --> 00:02:45,070 Kjo është pak më e errët, sepse ju duhet të dini një gjuhë të ndryshme. 43 00:02:45,070 --> 00:02:47,860 Ka një gjuha quajtur Objektivi-C, i cili është një superset i C. 44 00:02:47,860 --> 00:02:51,960 Që do të thotë se është C plus disa karakteristika të tjera, në mesin e tyre object-oriented programimit. 45 00:02:51,960 --> 00:02:55,070 Dhe kjo është gjuha që Apple ka popullarizuar për programimin iOS. 46 00:02:55,070 --> 00:02:58,760 Dhe kështu që këtu është një klip nga një shfaqje krejt të ndryshme, nga "Numrat" 47 00:02:58,760 --> 00:03:02,450 se në qoftë se ju në të vërtetë të shikoni nga afër në TiVo tuaj dhe pauzë në momentin e duhur, 48 00:03:02,450 --> 00:03:07,700 ju do të shihni se çfarë ata janë duke kërkuar në nuk është krejt ajo që është duke u përshkruar. 49 00:03:07,700 --> 00:03:11,170 Dhe më lejoni të provoni një lidhës të ndryshme audio këtu dhe të shohim nëse ne nuk mund të 50 00:03:11,170 --> 00:03:13,780 mbajtur audio sync në këtë kohë. 51 00:03:13,780 --> 00:03:20,530 Unë ju jap "Numrat". 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] Kjo është një 32-bit adresa IPv4. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, që është në internet. Rrjeti >> Privat. Është rrjet privat e Anit. 54 00:03:38,930 --> 00:03:43,810 [Malan] Okay. Kjo është Objective-C, dhe kjo është për programin e disa kec për t'u ngjyrosur, 55 00:03:43,810 --> 00:03:51,140 si ju ndoshta mund të konkludoj nga emri i variablit atje. 56 00:03:51,140 --> 00:03:54,410 Kështu që, më pas, ishte "Numrat". Pra, sot dhe këtë javë kemi prezantuar 57 00:03:54,410 --> 00:03:57,740 pak e botës së mjekësinë ligjore dhe kontekstin në probleme prandaj. 58 00:03:57,740 --> 00:04:00,590 Sot do të jetë një leksion i shkurtuar për shkak se ka një ngjarje të veçantë këtu 59 00:04:00,590 --> 00:04:05,530 më pas, kështu që ne do të marrin një vështrim, dhe vë në lojë dy nxënësit dhe prindërit njësoj sot 60 00:04:05,530 --> 00:04:07,420 me disa nga gjërat që janë në horizont. 61 00:04:07,420 --> 00:04:12,240 Midis tyre, nga e hëna, ju do të keni një pak më shumë shokët e klasës. 62 00:04:12,240 --> 00:04:16,050 EDX, Harvardit dhe MITS re iniciativa në internet për të hapur Courseware 63 00:04:16,050 --> 00:04:19,120 dhe më shumë, ka nisur në kampus Harvardit të hënën. 64 00:04:19,120 --> 00:04:21,490 Që do të thotë e hënë vijnë ju do të keni - si të numërimin e fundit, 65 00:04:21,490 --> 00:04:26,210 86.000 shokët e klasës shtesë do të jetë pas së bashku me ligjërata CS50 së 66 00:04:26,210 --> 00:04:29,170 dhe seksione dhe walkthroughs dhe vendos problem. 67 00:04:29,170 --> 00:04:32,350 Dhe si pjesë e kësaj, ju do të bëhen anëtarë të klasës së përurimit 68 00:04:32,350 --> 00:04:35,090 CS50 dhe tani CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Si pjesë e kësaj, tani e kuptojnë se nuk do të ketë disa upsides si. 70 00:04:39,310 --> 00:04:43,790 Të marrë të gatshme për këtë, për numrin masiv të nxënësve, 71 00:04:43,790 --> 00:04:47,180 mjafton të themi se edhe pse ne kemi 108 TFS dhe CAS, 72 00:04:47,180 --> 00:04:50,790 jo mjaft të mirë nxënës / arsimtar dikur ne hit 80.000 studentë të tjerë. 73 00:04:50,790 --> 00:04:52,850 Pra, ne nuk do të jetë nota problemi kaq shumë vë dorë. 74 00:04:52,850 --> 00:04:55,920 Futur kështu këtë javë në setin e problemit do të jetë CS50 Check, 75 00:04:55,920 --> 00:04:58,450 e cila do të jetë një linjë komande të shërbimeve në kuadër të pajisjes 76 00:04:58,450 --> 00:05:01,200 që ju do të merrni një herë ju update it më vonë këtë fundjavë, 77 00:05:01,200 --> 00:05:03,200 dhe ju do të jetë në gjendje për të drejtuar një komandë, kontrolloni 50, 78 00:05:03,200 --> 00:05:06,500 më pset tuaj, dhe ju do të merrni disa reagime lidhur me atë nëse programi juaj është 79 00:05:06,500 --> 00:05:11,160 sakta ose të pasakta, sipas specifikimeve të projektimit të ndryshme që kemi dhënë. 80 00:05:11,160 --> 00:05:13,580 Pra, më shumë se dhe vendosur problemi specifikimet dhe 81 00:05:13,580 --> 00:05:17,240 shokët e klasës CS50x do të jetë duke përdorur këtë si. 82 00:05:17,240 --> 00:05:19,230 >> Pra, problemi set 4 është mbi të gjitha mjekësinë ligjore. 83 00:05:19,230 --> 00:05:21,940 Dhe kjo pjesë u frymëzua nga disa sende të vërtetë të jetës, 84 00:05:21,940 --> 00:05:24,620 ku kur isha në shkollën e diplomuar, unë internuar për një kohë me 85 00:05:24,620 --> 00:05:28,650 Zyrës së Prokurorit të Rrethit të qarkut MIDDLESEX-së e bërë punën ligjore 86 00:05:28,650 --> 00:05:31,650 me hetues të çojë mjeko-ligjor të tyre, dhe atë që ky arriti në 87 00:05:31,650 --> 00:05:35,260 po, unë mendoj se kam përmendur të kaluarën e një javë pak, është policia masive shtetërore ose të tjerët 88 00:05:35,260 --> 00:05:39,000 do të vijnë në, ata do të bjerë jashtë gjëra të tilla si hard drives dhe CD dhe floppy disqe 89 00:05:39,000 --> 00:05:42,340 dhe si, dhe pastaj qëllimi i zyrës mjeko-ligjore për të verifikuar nëse ishte 90 00:05:42,340 --> 00:05:44,600 nuk ishte apo nuk ishte dëshmi e disa lloj. 91 00:05:44,600 --> 00:05:48,010 Kjo ishte Njësiti i Hetimeve Speciale, kështu që ishte e bardhë-kular krimit, 92 00:05:48,010 --> 00:05:52,350 ajo ishte lloj më shqetësues i krimeve, 93 00:05:52,350 --> 00:05:55,990 çdo gjë që përfshin disa lloj të mediave digjitale, rezulton se nuk është se shumë njerëz 94 00:05:55,990 --> 00:05:59,370 shkruani një email duke thënë se "unë e bëri atë." 95 00:05:59,370 --> 00:06:03,290 Pra, mjaft shpesh këto kërkime mjeko-ligjore nuk kthehet deri të gjitha frutat që shumë, 96 00:06:03,290 --> 00:06:05,850 por ndonjëherë njerëzit do të shkruajnë email tilla. 97 00:06:05,850 --> 00:06:08,490 Pra, ndonjëherë përpjekjet u shpërblyen. 98 00:06:08,490 --> 00:06:14,420 >> Por për të çojë deri në këtë pset mjeko-ligjor, ne do të jetë futur në një pset 4 bit e graphics. 99 00:06:14,420 --> 00:06:18,260 Pra, ju ndoshta merrni këto gjëra për të dhënë, jpegs, gifs dhe si këto ditë, 100 00:06:18,260 --> 00:06:21,640 por në qoftë se jeni të vërtetë mendoni rreth saj, një imazh, ashtu si fytyra e Rob, 101 00:06:21,640 --> 00:06:24,430 mund të modeluar si një sekuencë të dots, ose pixels. 102 00:06:24,430 --> 00:06:26,680 Tani, në rastin e fytyrës Rob, ka të gjitha llojet e ngjyrave, 103 00:06:26,680 --> 00:06:29,940 dhe kemi filluar të shohim dots individuale, të njohura si otherwide pixels, 104 00:06:29,940 --> 00:06:31,610 sapo kemi filluar të zoom in 105 00:06:31,610 --> 00:06:35,590 Por nëse ne thjeshtojë botën një pak, dhe vetëm thonë se ky këtu është Rob 106 00:06:35,590 --> 00:06:40,560 në të zezë dhe të bardhë, të mirë, për të përfaqësuar zezë dhe e bardhë mund të përdorni vetëm binar. 107 00:06:40,560 --> 00:06:44,960 Dhe në qoftë se ne jemi duke shkuar për të përdorur binar, 1 ose 0, ne mund të shprehin këtë imazh të njëjtë 108 00:06:44,960 --> 00:06:51,970 e fytyrës qeshur Rob me këtë model të bit: 11000011 përfaqëson 109 00:06:51,970 --> 00:06:55,160 bardhë, e bardhë, e zezë, e zezë, e zezë, e zezë, e bardhë e bardhë. 110 00:06:55,160 --> 00:06:59,290 Dhe kështu që nuk është një hap i madh, pastaj, për të filluar duke folur për fotografitë shumëngjyrëshe. 111 00:06:59,290 --> 00:07:01,920 Gjëra që ju do të shihni në Facebook ose të marrë me një aparat fotografik dixhital, 112 00:07:01,920 --> 00:07:04,730 por, sigurisht, kur është fjala për ngjyra, ju keni nevojë për më shumë bit. 113 00:07:04,730 --> 00:07:08,470 Dhe mjaft e zakonshme në botën e fotografive është që të përdorin ngjyra jo 1-bit, 114 00:07:08,470 --> 00:07:12,730 si kjo sugjeron, por 24-bit ngjyra, ku ju në të vërtetë të merrni miliona të ngjyrave. 115 00:07:12,730 --> 00:07:15,430 Pra, si në rastin kur ne zoomed në në sy Rob, 116 00:07:15,430 --> 00:07:19,270 se ishte ndonjë numër të miliona mundësive të ndryshme ngjyra. 117 00:07:19,270 --> 00:07:22,260 >> Pra, ne do të prezantoj këtë grup Problem 4, si dhe në walkthrough, 118 00:07:22,260 --> 00:07:27,050 cila do të jetë sot në 03:30 në vend të zakonshme 2:30 shkak të leksionit premtes këtu. 119 00:07:27,050 --> 00:07:29,930 Por video do të jetë online, si zakonisht, nesër. 120 00:07:29,930 --> 00:07:31,880 Ne gjithashtu do të prezantoj me një tjetër format file. 121 00:07:31,880 --> 00:07:34,150 Pra, kjo është menduar qëllimisht për të parë frikësuese në fillim, 122 00:07:34,150 --> 00:07:38,980 por kjo është vetëm disa dokumentacioni për një struct C. 123 00:07:38,980 --> 00:07:42,280 Ajo rezulton se Microsoft, vite më parë, ka ndihmuar popullarizohen këtë format, 124 00:07:42,280 --> 00:07:46,630 quajtur format bitmap file, BMP, dhe kjo ishte një super-thjeshtë, 125 00:07:46,630 --> 00:07:50,390 colorful format grafike file që është përdorur për një kohë të 126 00:07:50,390 --> 00:07:53,640 dhe nganjëherë ende për Wallpapers në desktop. 127 00:07:53,640 --> 00:07:57,410 Nëse ju mendoni përsëri në Windows XP dhe kodra kodrina dhe qielli blu, 128 00:07:57,410 --> 00:08:00,660 që ishte zakonisht një BMP, ose imazhi bitmap, dhe bitmaps 129 00:08:00,660 --> 00:08:03,340 janë kënaqësi për ne, sepse ata kanë kompleksitetin pak më shumë. 130 00:08:03,340 --> 00:08:05,640 Kjo nuk është aq e thjeshtë si ky rrjet i të 0 dhe 1-shave; 131 00:08:05,640 --> 00:08:10,680 në vend të kësaj, ju keni gjëra të tilla si një goditje me kokë në fillim të një skedar. 132 00:08:10,680 --> 00:08:15,520 Pra, me fjalë të tjera, brenda një skedar. Bmp është një bandë e tërë e të 0 dhe 1-shave, 133 00:08:15,520 --> 00:08:18,070 por ka disa shtesë të 0 dhe 1-shave në atje. 134 00:08:18,070 --> 00:08:21,450 Dhe kjo rezulton se ajo që ne kemi marrë për të dhënë ndoshta për vite me rradhë, 135 00:08:21,450 --> 00:08:27,040 file formats si. doc ose. XLS ose. mp3 apo mp4,. 136 00:08:27,040 --> 00:08:29,910 çfarëdo file formats që ju jeni të njohur me të. 137 00:08:29,910 --> 00:08:31,900 E pra, çfarë e bën atë edhe do të thotë të jetë një format file? 138 00:08:31,900 --> 00:08:35,740 Sepse në fund të ditës, të gjitha këto dosje ne përdorim kemi vetëm 0 dhe e së 1 139 00:08:35,740 --> 00:08:39,950 dhe ndoshta ata të 0 dhe 1 të përfaqësojë a, b, c, përmes ASCII ose të ngjashme, 140 00:08:39,950 --> 00:08:42,030 por deri në fund të ditës, kjo është vetëm 0 dhe 1-shave. 141 00:08:42,030 --> 00:08:45,300 >> Pra, njerëzit vetëm herë pas here vendosin të shpikë një format të ri skedar 142 00:08:45,300 --> 00:08:49,420 ku ata standardizohet ajo modelet e copa të vërtetë do të thotë. 143 00:08:49,420 --> 00:08:52,790 Dhe në këtë rast këtu, folks që projektoi format bitmap fotografi 144 00:08:52,790 --> 00:08:58,260 tha se në bajt të parë në një skedar bitmap, pėrcaktuara nga ofset 0, atje, 145 00:08:58,260 --> 00:09:02,320 aty do të jenë disa quajtur cryptically bfType ndryshueshme quajtur, 146 00:09:02,320 --> 00:09:06,510 të cilat vetëm qëndron për lloj file bitmap, çfarë lloji i file bitmap kjo është. 147 00:09:06,510 --> 00:09:10,780 Ju mund të konkludoj, ndoshta, nga rreshtin e dytë që kompensuar 2, numri i bajt 2, 148 00:09:10,780 --> 00:09:15,980 ka një model të të 0 dhe 1 e që përfaqëson çfarë? 149 00:09:15,980 --> 00:09:18,320 Madhësia e diçka, dhe ajo vazhdon nga atje. 150 00:09:18,320 --> 00:09:20,660 Pra në grup Problem 4, ju do të ecte nëpër disa nga këto gjëra. 151 00:09:20,660 --> 00:09:24,480 >> Ne nuk do të përfundojë deri kujdeset për të gjithë ata, por vini re ajo fillon të marrë interesante 152 00:09:24,480 --> 00:09:30,780 rreth linjës apo byte 54, rgbtBlue, gjelbëra dhe të kuqe. 153 00:09:30,780 --> 00:09:35,280 Nëse ju keni dëgjuar ndonjëherë akronim RGB, e kuqe jeshile blu, kjo është një referencë për këtë. 154 00:09:35,280 --> 00:09:37,840 Sepse kjo rezulton nga ju mund të pikturoj të gjitha ngjyrat e ylberit 155 00:09:37,840 --> 00:09:41,580 me disa kombinim të kuqe dhe blu dhe të gjelbër. 156 00:09:41,580 --> 00:09:46,560 Dhe, në fakt, prindërit në dhomë mund të kujtojnë disa nga projektuesit më të hershme. 157 00:09:46,560 --> 00:09:49,360 Këto ditë, ju vetëm shikoni 1 dritë e ndritshme vjen nga një lente. 158 00:09:49,360 --> 00:09:52,870 Por mbrapa në ditë, keni pasur lente të kuqe, lente blu, dhe lente gjelbër 159 00:09:52,870 --> 00:09:56,620 dhe së bashku ata synojnë në ekran dhe ka formuar një tablo të gjallë. 160 00:09:56,620 --> 00:09:59,590 Dhe mjaft shpesh shkollat ​​e mesme dhe të mesme do të kenë këto lente 161 00:09:59,590 --> 00:10:02,680 gjithnjë aq pak shtrembër, kështu ju keni qenë lloj i shohim imazhe të dyfishta ose të trefishtë, 162 00:10:02,680 --> 00:10:07,500 por që ishte ideja. Keni pasur dritë të kuqe dhe të gjelbër dhe blu pikturë një foto. 163 00:10:07,500 --> 00:10:09,570 Dhe se parimi i njëjtë është përdorur në kompjuter. 164 00:10:09,570 --> 00:10:12,000 >> Pra, në mesin e sfidave, atëherë për ju në problemin vendosur 4 165 00:10:12,000 --> 00:10:16,080 do të jetë disa gjëra, njëra është që në fakt të resize një imazh. 166 00:10:16,080 --> 00:10:18,050 Për të marrë në një model të 0 dhe 1-shave, 167 00:10:18,050 --> 00:10:22,840 kuptoj se cila chunks e të 0 dhe 1 të përfaqësojnë atë në një strukturë si kjo, 168 00:10:22,840 --> 00:10:26,800 dhe pastaj të kuptoj se si për të replikuar piksele: Reds, dëshpëruar, zarzavate 169 00:10:26,800 --> 00:10:32,460 brenda në mënyrë që kur një foto duket si ky në fillim, mund të duket si ky vend pas kësaj. 170 00:10:32,460 --> 00:10:35,590 Ndër sfidat tjera, gjithashtu, do të jetë që ju do të dorëzohet 171 00:10:35,590 --> 00:10:38,900 një imazh mjeko-ligjor i një file aktual nga një aparat fotografik dixhital 172 00:10:38,900 --> 00:10:42,410 dhe në atë aparat fotografik, një herë e një kohë, ishin një bandë e tërë të fotografive. 173 00:10:42,410 --> 00:10:47,030 Problemi është, ne fshirë aksidentalisht ose kishte imazhin e korruptuar disi. 174 00:10:47,030 --> 00:10:51,040 Gjëra të këqija të ndodhë me kamera digjitale, dhe kështu që ne kopjuar shpejt të gjitha të 0 dhe 1 të 175 00:10:51,040 --> 00:10:55,410 off këtë kartë për ju, e shpëtuam ata të gjithë në 1 dosje të mëdha, dhe pastaj ne do të dorëzojë ato tek ju 176 00:10:55,410 --> 00:11:00,000 në problemin vendosur 4 në mënyrë që ju mund të shkruani një program në C me të cilin do të shërohen 177 00:11:00,000 --> 00:11:02,660 të gjitha ato JPEGs, ideale. 178 00:11:02,660 --> 00:11:06,280 Dhe kjo rezulton se jpegs, edhe pse ata janë disi e një format file komplekse, 179 00:11:06,280 --> 00:11:09,580 ata janë shumë më komplekse se kjo fytyrë të qeshur këtu. 180 00:11:09,580 --> 00:11:14,320 Ajo rezulton se çdo JPEG fillon me modelet e njëjta të të 0 dhe 1-shave. 181 00:11:14,320 --> 00:11:18,820 Pra, duke përdorur një lak, ndërsa për ose një lak ose të ngjashme, 182 00:11:18,820 --> 00:11:22,350 ju mund iterate mbi të gjitha të 0 dhe 1 në këtë imazh mjeko-ligjor 183 00:11:22,350 --> 00:11:26,670 dhe çdo herë që të shihni model të veçantë që është përcaktuar në specifikimet Set problemit, 184 00:11:26,670 --> 00:11:29,770 ju mund të supozojmë, 'Oh, këtu është, me probabilitet shumë të lartë, 185 00:11:29,770 --> 00:11:33,520 fillimi i një JPEG, 'dhe sa më shpejt që ju të gjeni të njëjtin model, 186 00:11:33,520 --> 00:11:36,050 disa Numri i bytes ose kilobytes ose megabajt më vonë, 187 00:11:36,050 --> 00:11:40,550 ju mund të marrë, "Ooh! Këtu është një JPEG dytë, foto mora pas një të parë. 188 00:11:40,550 --> 00:11:44,720 Më lejoni të mos e lexuar këtë skedar parë, filloni të shkruani këtë një të ri. " 189 00:11:44,720 --> 00:11:49,980 Dhe prodhimi i programit tuaj për pset 4 do të jetë sa më shumë si 50 jpegs. 190 00:11:49,980 --> 00:11:52,400 Dhe në qoftë se kjo nuk është 50 jpegs, ju keni një pak e një lak. 191 00:11:52,400 --> 00:11:55,580 Nëse ju keni një numër të pafund të JPEGs, ju keni një lak pafund. 192 00:11:55,580 --> 00:11:58,280 Kështu që, gjithashtu, do të jetë një rast mjaft të zakonshme. 193 00:11:58,280 --> 00:12:00,280 Kjo është ajo që është në horizont. 194 00:12:00,280 --> 00:12:03,740 >> Quiz 0, prapa nesh. Kuptojnë, per email tim, se pa ka folks 195 00:12:03,740 --> 00:12:06,820 të cilët janë të dy të lumtur, lloj neutral, dhe i trishtuar rreth quiz 0 koha. 196 00:12:06,820 --> 00:12:10,160 Dhe ju lutem mos arritur jashtë për mua, TFS kokë, Zamyla, TF tuaj 197 00:12:10,160 --> 00:12:14,120 ose një i CAS-it që ju e dini në qoftë se ju do të donte për të diskutuar se si gjërat shkuan. 198 00:12:14,120 --> 00:12:16,460 >> Pra, për të bërë përshtypje prindërit këtu në dhomë, 199 00:12:16,460 --> 00:12:23,990 çfarë është bibliotekë CS50? Good job. 200 00:12:23,990 --> 00:12:32,280 Çfarë është bibliotekë CS50? Po? [Student përgjigjet, pakuptueshëm] 201 00:12:32,280 --> 00:12:35,730 Mirë >>, mirë. Pra, kjo është një grup prewritten e kodit se ne, stafi, shkroi, 202 00:12:35,730 --> 00:12:38,460 që ne ofrojmë për ju, për të siguruar disa funksionalitete të përbashkëta. 203 00:12:38,460 --> 00:12:42,290 Stuff like merrni mua një varg; merrni mua një int, të gjitha funksionet që janë të listuara këtu. 204 00:12:42,290 --> 00:12:45,260 Duke filluar nga tani, ne të fillojë me të vërtetë të marrë këto rrota trajnimit jashtë. 205 00:12:45,260 --> 00:12:48,230 Pra, ne jemi duke shkuar për të filluar për të marrë larg një "varg" nga ju, 206 00:12:48,230 --> 00:12:52,790 cilat, risjell, ishte vetëm një sinonim për çfarë lloji të dhënave aktuale? * char. 207 00:12:52,790 --> 00:12:57,020 Pra, për prindërit, që ishte ndoshta - kjo është e mirë, kështu që * char ne do të fillojmë të shohim 208 00:12:57,020 --> 00:13:00,810 në ekran të gjithë më shumë si kemi hequr "string" nga fjalori ynë, 209 00:13:00,810 --> 00:13:02,760 të paktën kur është fjala për të vërtetë shkruar kodin. 210 00:13:02,760 --> 00:13:06,240 Në mënyrë të ngjashme, ne do të ndaluar përdorimin e disa prej këtyre funksioneve sa më shumë, 211 00:13:06,240 --> 00:13:08,390 sepse programet tona do të merrni më të sofistikuara 212 00:13:08,390 --> 00:13:11,370 në vend se të shkruani vetëm programe që rri atje me një keq të shpejtë, 213 00:13:11,370 --> 00:13:13,580 duke pritur për përdoruesit të tipit diçka in 214 00:13:13,580 --> 00:13:15,220 Ju do të merrni inputet tuaja nga diku tjetër. 215 00:13:15,220 --> 00:13:18,720 Për shembull, ju do të merrni ato nga një seri e copa në hard drive lokale. 216 00:13:18,720 --> 00:13:23,340 Ju do të merrni në vend të tyre në të ardhmen nga një lidhje të rrjetit, disa website diku. 217 00:13:23,340 --> 00:13:27,460 Pra, le të zhvishem mbrapa shtresë këtë për herë të parë, dhe tërheq lart aplikim CS50 218 00:13:27,460 --> 00:13:32,300 dhe ky file i quajtur CS50.h, të cilat ju keni qenë të mprehta, duke përfshirë për disa javë. 219 00:13:32,300 --> 00:13:34,380 >> Por le të shohim se çfarë është në të vërtetë në brendësi të kësaj. 220 00:13:34,380 --> 00:13:38,250 Kështu në krye të file në ngjyrë blu është vetëm një bandë e tërë e komenteve, 221 00:13:38,250 --> 00:13:41,340 Informacioni garanci dhe licencimit. Kjo është lloj i një paradigmë të përbashkët 222 00:13:41,340 --> 00:13:44,600 në software, sepse një shumë e softuerit këto ditë është ajo që quhet "burim i hapur", 223 00:13:44,600 --> 00:13:46,940 që do të thotë se dikush ka shkruar kodin 224 00:13:46,940 --> 00:13:50,060 dhe e bëri atë të lirë në dispozicion, jo vetëm për të drejtuar dhe për të përdorur, 225 00:13:50,060 --> 00:13:53,660 por në fakt lexuar dhe të ndryshojë dhe të integrohen në punën tuaj. 226 00:13:53,660 --> 00:13:55,790 Pra, kjo është ajo që ju keni qenë duke përdorur, software burim të hapur, 227 00:13:55,790 --> 00:13:58,030 megjithëse në një formë shumë të vogël. 228 00:13:58,030 --> 00:14:01,860 Nëse unë lëvizni poshtë e kaluara komenteve, edhe pse, ne do të fillojnë të shohin disa gjëra më të njohura. 229 00:14:01,860 --> 00:14:08,090 Pra, vërehet në krye këtu, se dosja CS50.h përfshin një bandë e tërë e dosjeve header. 230 00:14:08,090 --> 00:14:11,160 Tani, shumica e këtyre nuk kemi parë më parë, por një është 231 00:14:11,160 --> 00:14:15,640 njohur, se cili prej tyre kemi parë, megjithëse shkurtimisht, deri më tani? 232 00:14:15,640 --> 00:14:18,720 Po, bibliotekat standarde. Stdlib.h ka malloc, 233 00:14:18,720 --> 00:14:21,590 kështu që sapo kemi filluar duke folur për ndarjen e kujtesës dinamike, 234 00:14:21,590 --> 00:14:24,960 të cilat ne do të kthehen në javën e ardhshme, si edhe, duke përfshirë edhe kemi filluar këtë dosje. 235 00:14:24,960 --> 00:14:29,660 Ajo rezulton se bool dhe të vërteta dhe të rreme në fakt nuk ekzistojnë në C, në vetvete, 236 00:14:29,660 --> 00:14:32,460 nëse ju të përfshijë këtë skedë këtu. 237 00:14:32,460 --> 00:14:35,770 Kështu që ne kemi, për javë të tëra, janë përfshirë standarde bool.h 238 00:14:35,770 --> 00:14:39,020 kështu që ju mund të përdorni nocionin e një bool, e vërtetë apo e rreme. 239 00:14:39,020 --> 00:14:41,830 Pa këtë, ju do të keni për të zgjidhur të rreme saj dhe të përdorni një int 240 00:14:41,830 --> 00:14:45,920 dhe vetëm në mënyrë arbitrare të supozojmë se 0 është e rreme dhe 1 është e vërtetë. 241 00:14:45,920 --> 00:14:49,980 >> Tani, në qoftë se ne lëvizni poshtë më tej, këtu është përkufizimi ynë i një varg. 242 00:14:49,980 --> 00:14:54,820 Kjo rezulton nga, siç kemi thënë më parë, se ku kjo është * nuk ka me të vërtetë rëndësi. 243 00:14:54,820 --> 00:14:56,750 Ju mund edhe të ketë hapësirë ​​të gjithë rreth. 244 00:14:56,750 --> 00:15:01,550 Ne, këtë semestër, janë promovuar atë si kjo për të bërë të qartë se * ka të bëjë me llojin. 245 00:15:01,550 --> 00:15:05,370 Por e kuptojnë, ashtu si e zakonshme, nëse nuk është një pak më të zakonshme, është për të vënë atë atje 246 00:15:05,370 --> 00:15:07,480 por funksionalisht kjo është e njëjta gjë. 247 00:15:07,480 --> 00:15:11,070 Por tani, në qoftë se lexojmë poshtë më tej, le të marrin një vështrim në thonë, GetInt, 248 00:15:11,070 --> 00:15:15,350 sepse ne kemi përdorur që, ndoshta, para se çdo gjë tjetër këtë semestër. 249 00:15:15,350 --> 00:15:19,620 Dhe këtu është GetInt. Kjo është ajo? 250 00:15:19,620 --> 00:15:24,650 Kjo është prototip. Aq shpesh, ne kemi vënë prototypes në majat e tonë. Fotografi c, 251 00:15:24,650 --> 00:15:28,190 por ju gjithashtu mund të vënë prototypes në fotografi header. fotografi H, 252 00:15:28,190 --> 00:15:32,110 si ky këtu, kështu që kur ju shkruani disa funksione 253 00:15:32,110 --> 00:15:36,790 se ju dëshironi që njerëzit e tjerë të jenë në gjendje për t'u përdorur, i cili është pikërisht rasti me bibliotekën CS50, 254 00:15:36,790 --> 00:15:40,900 ju jo vetëm të zbatojë funksionet tuaja në diçka si CS50.c, 255 00:15:40,900 --> 00:15:46,720 ju gjithashtu vënë prototipa jo në krye të kësaj dosje, por në krye të një file header, 256 00:15:46,720 --> 00:15:50,810 atëherë kjo fotografi header është ajo që miqtë dhe kolegët përfshijnë, 257 00:15:50,810 --> 00:15:52,800 me të mprehta të përfshijë në kodin e tyre. 258 00:15:52,800 --> 00:15:55,440 Pra, gjithë kësaj kohe ju keni qenë i përfshirë të gjitha këto prototipa 259 00:15:55,440 --> 00:15:59,870 efektive në krye të dosjes suaj, por me mënyrën e kësaj mprehtë përfshijnë mekanizmin 260 00:15:59,870 --> 00:16:03,320 që në thelb kopje dhe pastat këtë skedë në tuaj. 261 00:16:03,320 --> 00:16:06,400 Tani, këtu është një dokumentacion mjaft të detajuar. 262 00:16:06,400 --> 00:16:08,880 >> Ne kemi shumë e shumë të marrë për të dhënë se GetInt merr një int, 263 00:16:08,880 --> 00:16:10,740 por ajo rezulton se ka disa raste qoshe, apo jo? 264 00:16:10,740 --> 00:16:14,320 Çfarë ndodh nëse përdoruesi lloje në një numër që është mënyrë shumë e madhe? 265 00:16:14,320 --> 00:16:17,350 Një quintillion, që thjesht nuk mund të përshtatet në brendësi të një int? 266 00:16:17,350 --> 00:16:21,180 Çfarë është sjellja e pritshme? E pra, në mënyrë ideale, kjo është e parashikueshme. 267 00:16:21,180 --> 00:16:23,460 Pra, në këtë rast, në qoftë se ju në të vërtetë lexuar shkruar gjobë, 268 00:16:23,460 --> 00:16:27,850 ju do të shihni se në qoftë se linja nuk mund të lexohet, këtë INT_MAX kthimit. 269 00:16:27,850 --> 00:16:30,800 Ne kurrë nuk kemi folur për këtë, por bazuar në kapitalizimin e saj, 270 00:16:30,800 --> 00:16:33,030 çfarë është ajo, ndoshta? 271 00:16:33,030 --> 00:16:36,610 Kjo është një konstante, kështu që kjo është një konstante e veçantë që është deklaruar ndoshta 272 00:16:36,610 --> 00:16:39,460 në një nga ato fotografi header që është më lart në dosjen, 273 00:16:39,460 --> 00:16:43,400 dhe INT_MAX është ndoshta diçka si, afërsisht, 2 miliardë. 274 00:16:43,400 --> 00:16:48,160 Ideja është se për shkak se ne kemi nevojë për të ditur se diçka disi shkoi keq, 275 00:16:48,160 --> 00:16:51,090 Ne, po, kanë 4 miliard numrat në dispozicionin tonë, 276 00:16:51,090 --> 00:16:53,980 negative mbi 2 miliard deri në 2 miliardë, të japë ose të marrë. 277 00:16:53,980 --> 00:16:58,030 E pra, ajo që është e zakonshme në programimin është që ju vjedhin vetëm një nga ato numra. 278 00:16:58,030 --> 00:17:02,250 Ndoshta 0, ndoshta 2 miliardë, ndoshta negative 2 miliardë. 279 00:17:02,250 --> 00:17:06,720 Kështu që ju kaloni një nga vlerat tuaja të mundshme në mënyrë që ju mund të angazhohen në botë 280 00:17:06,720 --> 00:17:10,089 se nëse diçka shkon keq, unë do të kthehem këtë vlerë super-madh. 281 00:17:10,089 --> 00:17:13,329 Por ju nuk doni të shtypni diçka përdorues fshehta si "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 e numrit të vërtetë të madhe, ku ju përgjithësoni në vend si një konstante. 283 00:17:17,079 --> 00:17:19,380 Pra me të vërtetë, në qoftë se ju ishin duke u anal javëve të fundit, 284 00:17:19,380 --> 00:17:23,800 në çdo kohë që ju e quani GetInt, ju duhet të keni qenë të kontrolluar me një kusht nëse. 285 00:17:23,800 --> 00:17:27,109 A llojin e përdoruesit në INT_MAX, ose më saktë, 286 00:17:27,109 --> 00:17:29,900 bëri INT_MAX GetInt kthehen? Sepse në qoftë se ai e bëri, 287 00:17:29,900 --> 00:17:35,140 që në fakt do të thotë se ata nuk e shkruani atë, diçka shkoi keq në këtë rast. 288 00:17:35,140 --> 00:17:38,970 Pra, kjo është ajo që është e njohur përgjithësisht si një vlerë "sentinel", që do të thotë vetëm të veçantë. 289 00:17:38,970 --> 00:17:41,020 >> E pra, le të kthehemi tani në të. Dosjet c. 290 00:17:41,020 --> 00:17:44,500 File C ka ekzistuar në aplikim për disa kohë, 291 00:17:44,500 --> 00:17:47,540 dhe, në fakt, ka të precompiled aplikim për ju 292 00:17:47,540 --> 00:17:49,720 në atë gjë që ne e quajtur "Kodi objekt," 293 00:17:49,720 --> 00:17:52,940 por ai thjesht nuk ka rëndësi për ju, ku ajo është për shkak se sistemi e di, 294 00:17:52,940 --> 00:17:54,780 në këtë rast, ku ajo është, aplikim. 295 00:17:54,780 --> 00:18:00,620 Por le të lëvizni poshtë tani në GetInt, dhe shikoni se si GetInt ka qenë duke punuar gjithë këtë kohë. 296 00:18:00,620 --> 00:18:02,380 Pra, këtu kemi komente të ngjashme nga më parë. 297 00:18:02,380 --> 00:18:04,930 Më lejoni të zoom në në vetëm pjesë të Kodit, 298 00:18:04,930 --> 00:18:07,410 dhe ajo që ne kemi për GetInt është në vijim. 299 00:18:07,410 --> 00:18:12,770 Ajo nuk merr të dhëna dhe ajo kthen një int, ndërsa (e vërtetë), kështu që ne kemi një lak të pafund të qëllimshme 300 00:18:12,770 --> 00:18:16,560 por, me sa duket, ne do të thyejnë nga kjo disi, ose kthehen nga brenda këtë. 301 00:18:16,560 --> 00:18:19,890 Pra, le të shohim se si punon kjo. E pra, ne duket të jetë duke përdorur getString 302 00:18:19,890 --> 00:18:22,550 në këtë linjë të parë brenda lak, 166. 303 00:18:22,550 --> 00:18:25,320 Kjo është tani praktikë e mirë, sepse në çfarë rrethanash 304 00:18:25,320 --> 00:18:30,820 mund getString kthyer këtë të veçantë, NULL fjalen? 305 00:18:30,820 --> 00:18:38,460 Nëse diçka shkon keq. Çfarë mund të shkojnë keq kur ju telefononi diçka si getString? 306 00:18:38,460 --> 00:18:42,550 Po? [Student përgjigje, pakuptueshëm] >> Yeah. Kështu që ndoshta malloc dështon. 307 00:18:42,550 --> 00:18:45,310 Diku nën getString individualitet është quajtur malloc, 308 00:18:45,310 --> 00:18:48,210 e cila ndan kujtesës, e cila lejon të dyqan kompjuter 309 00:18:48,210 --> 00:18:50,950 të gjithë personazhet që përdoruesi lloje në tastierë. 310 00:18:50,950 --> 00:18:53,270 Dhe mendoj përdorues kishte një të tërë shumë kohë të lirë 311 00:18:53,270 --> 00:18:56,470 dhe shtypen më shumë, për shembull, se 2 miliard karaktere. 312 00:18:56,470 --> 00:18:59,600 Karaktere më shumë se kompjuteri ka edhe RAM. 313 00:18:59,600 --> 00:19:02,350 E pra, getString duhet të jetë në gjendje për të ditur se për ju, 314 00:19:02,350 --> 00:19:05,650 edhe në qoftë se kjo është një super, super rast i pazakontë qoshe. 315 00:19:05,650 --> 00:19:08,490 Ajo duhet të jetë disi gjendje për të trajtuar këtë, dhe kështu getString, 316 00:19:08,490 --> 00:19:11,850 nëse ne kthehemi dhe të lexoni dokumentacionin e saj, ka, në fakt, kthehen null. 317 00:19:11,850 --> 00:19:16,150 Tani në qoftë se dështon getString duke u kthyer NULL, GetInt do të dështojë 318 00:19:16,150 --> 00:19:19,370 duke u kthyer INT_MAX, ashtu si një Sentinel. 319 00:19:19,370 --> 00:19:22,650 Këto janë vetëm konventat njerëzore. E vetmja mënyrë ju do të dini ky është rasti 320 00:19:22,650 --> 00:19:24,840 është duke lexuar dokumentacionin. 321 00:19:24,840 --> 00:19:28,200 Pra, le të lëvizni poshtë për të ku int është në të vërtetë GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Pra, nëse unë lëvizni poshtë pak më tej, në përputhje 170 ne kemi një koment mbi këto linja. 323 00:19:34,220 --> 00:19:38,470 Pra, ne të deklarojë, në 172, një int n dhe një char c, dhe pastaj këtë funksion të ri 324 00:19:38,470 --> 00:19:41,870 që disa prej jush kanë ngecur nëpër më parë, por sscanf. 325 00:19:41,870 --> 00:19:44,190 Kjo qëndron për harqesh f scan. 326 00:19:44,190 --> 00:19:48,580 Me fjalë të tjera, më jep mua një varg dhe unë do të scan atë për pjesë të informacionit të interesit. 327 00:19:48,580 --> 00:19:53,820 Pra, çfarë do të thotë kjo? E pra, unë mendoj se të shkruani, fjalë për fjalë, 1 2 3 në tastierë, 328 00:19:53,820 --> 00:19:59,730 dhe pastaj goditi të hyjë. Çfarë është lloji i të dhënave 1 2 3 kur u kthye nga getString? 329 00:19:59,730 --> 00:20:05,010 Kjo është padyshim një varg, apo jo? Unë kam një varg, kështu 1 2 3 është me të vërtetë "1 2 3" 330 00:20:05,010 --> 00:20:07,260 me \ 0 në fund të tij. Që nuk është një int. 331 00:20:07,260 --> 00:20:10,420 Kjo nuk është një numër. Ajo duket si një numër, por kjo nuk është e vërtetë. 332 00:20:10,420 --> 00:20:14,680 Pra, çfarë ka GetInt duhet të bëni? Ajo ka për të skanoni atë vargun e majta në të djathtë, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, dhe disi kthyer atë në një numër të plotë aktuale. 334 00:20:19,010 --> 00:20:21,010 Tani, ju mund të kuptoj se si ta bëni këtë. 335 00:20:21,010 --> 00:20:24,240 Nëse ju mendoni përsëri në pset 2, ju me sa duket mori një pak më të rehatshme 336 00:20:24,240 --> 00:20:26,810 me Cezarit apo Vigenere kështu që ju mund iterate mbi një varg, 337 00:20:26,810 --> 00:20:29,800 ju mund të konvertohet chars të ints me marr. Kjo është një shumë e tërë e punës. 338 00:20:29,800 --> 00:20:32,800 Pse të mos thërrasë një funksion si sscanf që bën që për ju? 339 00:20:32,800 --> 00:20:37,520 Pra sscanf pret një argument, në këtë rast quhet Linja, e cila është një varg. 340 00:20:37,520 --> 00:20:41,310 Ju pastaj të specifikojë, në thonjëza, shumë të ngjashme me printf, 341 00:20:41,310 --> 00:20:44,960 çfarë prisni ju për të parë në këtë varg? 342 00:20:44,960 --> 00:20:52,980 Ajo që unë jam duke thënë se këtu është, unë pres për të parë një numër decimal dhe ndoshta një karakter. 343 00:20:52,980 --> 00:20:54,990 Dhe ne do të shohim se pse ky është rasti i vetëm një moment. 344 00:20:54,990 --> 00:20:58,440 Ajo rezulton se ky simbol është tani kujton gjëra 345 00:20:58,440 --> 00:21:00,840 kemi filluar duke folur për pak më shumë se një javë më parë. 346 00:21:00,840 --> 00:21:05,430 >> Çfarë është & n & dhe c bërë për ne këtu? [Student përgjigjet, pakuptueshëm] 347 00:21:05,430 --> 00:21:07,610 Po >>. Është dhënë mua adresën e n dhe adresa e c. 348 00:21:07,610 --> 00:21:10,440 Tani, përse është se e rëndësishme? E pra, ju e dini se me funksionet në C 349 00:21:10,440 --> 00:21:13,440 ju gjithmonë mund të kthehen një vlerë apo pa vlerë fare. 350 00:21:13,440 --> 00:21:16,630 Ju mund të kthehet një int, një varg, një noton, një char, çfarëdo. 351 00:21:16,630 --> 00:21:21,150 Ose ju mund të ktheheni boshllëk, por ju mund të kthehen vetëm 1 gjë maksimalisht. 352 00:21:21,150 --> 00:21:26,100 Por këtu ne duam të kthehen sscanf mua ndoshta një int, një numër decimal, 353 00:21:26,100 --> 00:21:29,240 dhe gjithashtu një char, dhe unë do të shpjegojë se pse char në një moment. 354 00:21:29,240 --> 00:21:34,250 Pra, ju doni f efektive të kthehen 2 gjëra, që nuk është vetëm e mundshme në C. 355 00:21:34,250 --> 00:21:38,460 Kështu që ju mund të punojnë rreth se duke kaluar në 2 adresat, 356 00:21:38,460 --> 00:21:43,710 sepse sa më shpejt që ju të dorëzojë një funksion 2 adresat, çfarë mund të bëjë që funksionojnë me ta? 357 00:21:43,710 --> 00:21:49,880 Ajo mund të shkruani në adresat ato. Ju mund të përdorni operacion * dhe "shkojnë atje", në secilën prej këtyre adresave. 358 00:21:49,880 --> 00:21:54,320 Kjo është lloj i këtij mekanizmi Backdoor, por shumë e zakonshme për ndryshimin e vlerave të variablave 359 00:21:54,320 --> 00:21:58,020 në më shumë se vetëm 1 vend, në këtë rast 2. 360 00:21:58,020 --> 00:22:04,590 Tani, vini re unë jam duke kontrolluar për == to1, dhe pastaj kthehen n në qoftë se ka, në fakt, për të vlerësuar e vërtetë. 361 00:22:04,590 --> 00:22:09,340 Pra, çfarë po ndodh? E pra, teknikisht, të gjithë ne të vërtetë duan të ndodhë në GetInt është kjo. 362 00:22:09,340 --> 00:22:12,340 Ne duam të kuptoj, kështu që të flasin, ne duam të lexojnë vargun 363 00:22:12,340 --> 00:22:16,210 "1 2 3" dhe në qoftë se ajo duket sikur ka një numër atje, 364 00:22:16,210 --> 00:22:21,360 ajo që ne jemi duke thënë sscanf të bëni është që të vënë atë numër, 1 2 3, në këtë n ndryshueshme për mua. 365 00:22:21,360 --> 00:22:26,060 Pse, atëherë, unë kam këtë e bëri si? 366 00:22:26,060 --> 00:22:33,750 Cili është roli i të thënë, sscanf, ju gjithashtu mund të merrni një karakter këtu. 367 00:22:33,750 --> 00:22:36,890 [Student folur, i pakuptueshëm] >> Jo - një pikë dhjetore mund të punojnë. 368 00:22:36,890 --> 00:22:40,650 Le të thonë se mendohet për një moment. Çfarë tjetër? 369 00:22:40,650 --> 00:22:42,570 [Student, pakuptueshëm] >> Pra, mendimi i mirë, ai mund të jetë personazhi NULL. 370 00:22:42,570 --> 00:22:44,970 Kjo nuk është në të vërtetë, në këtë rast. Po? [Student, pakuptueshëm] 371 00:22:44,970 --> 00:22:47,100 >> ASCII >>. Ose, më lejoni të përgjithësojmë edhe më tej. 372 00:22:47,100 --> 00:22:49,670 C% nuk ​​është vetëm për gabim kontrollin. 373 00:22:49,670 --> 00:22:52,510 Ne nuk duam që të ketë karakter pas numrin, 374 00:22:52,510 --> 00:22:54,980 por ajo që kjo lejon mua që të bëni është siç vijon: 375 00:22:54,980 --> 00:23:01,270 Ajo rezulton se sscanf, përveç ruajtjen e vlerave në n dhe C, në këtë shembull këtu, 376 00:23:01,270 --> 00:23:08,170 ajo gjithashtu nuk është ajo kthen numër të variablave është vënë vlerat in 377 00:23:08,170 --> 00:23:13,330 Pra, nëse ju vetëm shkruani 1 2 3, atëherë vetëm% d do të shkojë 378 00:23:13,330 --> 00:23:18,830 dhe vetëm merr n ruajtur me një vlerë si 1 2 3 dhe asgjë nuk merr vënë në c; 379 00:23:18,830 --> 00:23:20,870 c mbetet një vlerë mbeturina, mënyrë që të flasin. 380 00:23:20,870 --> 00:23:23,550 Garbage sepse ajo kurrë nuk ka qenë initialized si disa vlera. 381 00:23:23,550 --> 00:23:29,390 Pra, në këtë rast, sscanf kthehet 1, sepse unë populluar një nga ato pointers, 382 00:23:29,390 --> 00:23:33,650 në të cilin rast, e madhe. Unë kam një int, kështu që unë liruar linjë të lirë deri kujtesës 383 00:23:33,650 --> 00:23:37,150 se getString ndarë në fakt, dhe atëherë unë të kthehet n. 384 00:23:37,150 --> 00:23:42,210 Tjetër, në qoftë se keni menduar ndonjëherë se ku rigjykuar deklaratë vjen nga, vjen nga të drejtë këtu. 385 00:23:42,210 --> 00:23:45,770 Nëse, nga ana tjetër, unë lloji në 1 2 3 foo, 386 00:23:45,770 --> 00:23:48,640 vetëm disa sekuenca të rastit të tekstit, sscanf do të shohin, 387 00:23:48,640 --> 00:23:51,500 ooh, numrin, ooh, numrin, ooh, numrin, ooh - f. 388 00:23:51,500 --> 00:23:54,190 Dhe kjo do të vënë 1 2 3 në n. 389 00:23:54,190 --> 00:23:59,970 Ajo do të vënë në f c, dhe pastaj të kthehen 2. 390 00:23:59,970 --> 00:24:02,980 Pra, ne kemi, vetëm duke përdorur përkufizimin bazë të sjelljes së scanf, 391 00:24:02,980 --> 00:24:06,170 një mënyrë shumë e thjeshtë - mirë, komplekse në shikim të parë, por në fund të ditës, 392 00:24:06,170 --> 00:24:11,460 mekanizëm mjaft e thjeshtë për të thënë, ka një int, dhe nëse është kështu, është se e vetmja gjë që kam gjetur? 393 00:24:11,460 --> 00:24:14,950 Dhe hapësirë ​​e bardhë këtu është e qëllimshme. Nëse keni lexuar dokumentacionin për sscanf, 394 00:24:14,950 --> 00:24:18,690 ajo ju tregon se në qoftë se ju të përfshijë një pjesë e hapësirë ​​të bardhë në fillim apo në fund, 395 00:24:18,690 --> 00:24:24,990 sscanf gjithashtu do të lejojë përdoruesit, për çfarëdo arsye, për të goditur spacebar 1 2 3, dhe se do të jetë e ligjshme. 396 00:24:24,990 --> 00:24:28,310 Kjo nuk do të çirrem në përdoruesi vetëm për shkak se ata e goditi spacebar në fillim apo në fund, 397 00:24:28,310 --> 00:24:32,160 e cila është vetëm pak më shumë përdorues-miqësor. 398 00:24:32,160 --> 00:24:34,160 >> Çfarëdo pyetjeje, atëherë, në GetInts? Po? 399 00:24:34,160 --> 00:24:36,820 [Pyetja Student, pakuptueshëm] 400 00:24:36,820 --> 00:24:40,740 Mirë >> pyetje. Çfarë ndodh nëse ju shtypur vetëm në një char, si, f hit dhe të hyjë 401 00:24:40,740 --> 00:24:47,830 pa ndonjëherë shtypni 1 2 3, çfarë mendoni se sjellja e kësaj linje të kodit atëherë do të jetë? 402 00:24:47,830 --> 00:24:50,500 Pra sscanf mund të mbulojë atë shumë, sepse në këtë rast, 403 00:24:50,500 --> 00:24:56,280 ajo nuk do të plotësoni n ose C; ajo do të kthehet në vend 0. 404 00:24:56,280 --> 00:25:01,540 Në këtë rast, unë jam gjithashtu infektues atë skenar, sepse vlera e pritur që unë dua është 1. 405 00:25:01,540 --> 00:25:07,310 Unë vetëm dua 1, dhe vetëm 1 gjë për të mbushur. Mirë pyetje. Të tjerët? 406 00:25:07,310 --> 00:25:09,610 >> Të gjithë të drejtë, kështu që le të mos kalojnë nëpër të gjitha funksioneve në këtu, 407 00:25:09,610 --> 00:25:11,820 por ai që duket të jetë, ndoshta, në interes të mbetur 408 00:25:11,820 --> 00:25:14,530 getString është për shkak se ajo rezulton se GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong Të gjitha Vë bast një shumë të funksionimit të tyre në getString. 410 00:25:19,490 --> 00:25:22,860 Pra, le të marrin një sy se si ai po zbatohet këtu. 411 00:25:22,860 --> 00:25:27,040 Ky i fundit duket një kompleks pak, por ai përdor bazat njëjta 412 00:25:27,040 --> 00:25:29,680 se kemi filluar duke folur për javën e kaluar. Pra, në getString, 413 00:25:29,680 --> 00:25:32,670 e cila merr asnjë argument sipas pavlefshme deri këtu, 414 00:25:32,670 --> 00:25:37,110 dhe ajo kthen një varg, kështu që unë jam deklaruar një varg quajtur buffer. 415 00:25:37,110 --> 00:25:39,670 Unë vërtetë nuk e di se çka do të përdoren për, por ne do të shohim. 416 00:25:39,670 --> 00:25:42,950 Duket si kapacitet është, by default, 0, nuk jam i sigurt ku po shkon kjo. 417 00:25:42,950 --> 00:25:44,920 Nuk jam i sigurt se çfarë po ndodh n që do të përdoret për të ende. 418 00:25:44,920 --> 00:25:47,860 Por tani ajo është duke marrë një pak më shumë interesante, kështu që në përputhje 243, 419 00:25:47,860 --> 00:25:51,760 ne deklarojmë një int c, kjo është lloj i një detaj stupid. 420 00:25:51,760 --> 00:25:58,080 Një char është 8 bits, dhe 8 bit mund të ruajë sa vlera të ndryshme? 421 00:25:58,080 --> 00:26:03,310 256. Problemi është, në qoftë se ju dëshironi të keni 256 karaktere ASCII ndryshme, 422 00:26:03,310 --> 00:26:06,210 të cilat nuk janë, në qoftë se ju mendoni përsëri, dhe kjo nuk është diçka për të mësuar përmendësh. 423 00:26:06,210 --> 00:26:09,100 Por në qoftë se ju mendoni përsëri në atë tabelë të madhe ASCII kishim javë më parë, 424 00:26:09,100 --> 00:26:13,780 ka pasur, në këtë rast, 128 ose 256 karaktere ASCII. 425 00:26:13,780 --> 00:26:16,220 Ne kemi përdorur të gjitha modelet e të 0 dhe 1 është deri. 426 00:26:16,220 --> 00:26:19,410 Kjo është një problem në qoftë se ju doni të jetë në gjendje për të zbuluar një gabim. 427 00:26:19,410 --> 00:26:23,290 Sepse në qoftë se ju jeni tashmë duke përdorur vlerat për 256 karaktere tuaj, 428 00:26:23,290 --> 00:26:26,390 ju nuk e keni të vërtetë të planifikuar përpara, sepse tani ju keni asnjë mënyrë për të thënë, 429 00:26:26,390 --> 00:26:29,750 "Kjo nuk është një karakter legit, ky është një mesazh i gabuar." 430 00:26:29,750 --> 00:26:32,430 Pra, atë që bota nuk është, ata përdorin vlerën e ardhshëm më të madh, 431 00:26:32,430 --> 00:26:35,790 diçka si një int kështu që ju keni një numër të çmendur të bit, 432 00:26:35,790 --> 00:26:39,610 32 për 4 miliardë vlerave të mundshme, kështu që ju thjesht mund të përfundojnë duke përdorur, 433 00:26:39,610 --> 00:26:44,800 thelb, 257 prej tyre, 1 prej të cilave ka disa domethënie të veçantë si një gabim. 434 00:26:44,800 --> 00:26:49,190 >> Pra, le të shohim se si punon kjo. Në linjë 246, unë kam këtë lak të madhe, ndërsa 435 00:26:49,190 --> 00:26:54,530 që është duke bërë thirrje fgetc; fotografi f kuptimi, getc, dhe pastaj STDIN. 436 00:26:54,530 --> 00:26:59,030 Rezulton se kjo është vetëm mënyra më e saktë për të thënë "lexo dhëna nga tastierë." 437 00:26:59,030 --> 00:27:02,730 Standard mjete input tastierë, prodhimi standarde do të thotë ekran, 438 00:27:02,730 --> 00:27:06,920 dhe gabimi standard, të cilat ne do të shohim në pset 4, do të thotë në ekran, 439 00:27:06,920 --> 00:27:09,670 por një pjesë të veçantë të ekranit në mënyrë që ajo nuk është conflated 440 00:27:09,670 --> 00:27:13,760 me prodhim aktual që ju qëllim për të shtypur, por më shumë se në të ardhmen. 441 00:27:13,760 --> 00:27:19,430 Pra fgetc thjesht do të thotë të lexuar një karakter nga tastierë, dhe ruajtur atë ku? 442 00:27:19,430 --> 00:27:24,000 Ruajtur atë në C, dhe pastaj shikoni, kështu që unë jam vetëm duke përdorur disa bashkime boolean këtu, 443 00:27:24,000 --> 00:27:28,430 kontrolloni se ai nuk ka të barabartë \ n, kështu që përdoruesi ka goditur të hyjë. 444 00:27:28,430 --> 00:27:31,510 Ne duam të ndalemi në këtë pikë, në fund të lak, dhe ne gjithashtu duam të kontrolloni 445 00:27:31,510 --> 00:27:36,170 për të vazhdueshme të veçantë, EOF, i cili në qoftë se ju e dini apo me mend - çfarë e bën atë të qëndrojë për? 446 00:27:36,170 --> 00:27:39,860 Fundi i file. Pra, kjo është lloj i pakuptimtë, sepse në qoftë se unë jam i shtypur në tastierë, 447 00:27:39,860 --> 00:27:41,900 vërtetë nuk ka asnjë fotografi të përfshira në këtë, 448 00:27:41,900 --> 00:27:44,330 por kjo është vetëm lloj i term gjenerik që përdoret për të nënkuptuar 449 00:27:44,330 --> 00:27:50,320 se asgjë tjetër po vjen nga gishtat e njeriut-së. EOF. Fundi i file. 450 00:27:50,320 --> 00:27:52,600 Si një mënjanë, në qoftë se ju keni goditur ndonjëherë kontrollit d në tastierën tuaj, 451 00:27:52,600 --> 00:27:54,680 jo se ju do të keni akoma, ju keni goditur kontrollit c. 452 00:27:54,680 --> 00:27:57,920 Por kontrolli d dërgon këtë EOF të veçantë të quajtur konstante. 453 00:27:57,920 --> 00:28:03,100 >> Deri tani ne vetëm duhet disa alokimin dinamik kujtesës. 454 00:28:03,100 --> 00:28:06,460 Pra, nëse n + 1> kapaciteti, tani unë do të shpjegoj n. 455 00:28:06,460 --> 00:28:09,380 n është vetëm sa bytes jemi aktualisht në tampon, 456 00:28:09,380 --> 00:28:11,970 vargu që ju jeni duke ndërtuar nga përdoruesi. 457 00:28:11,970 --> 00:28:16,240 Nëse ju keni më shumë karaktere në tampon tuaj se ju keni kapacitet në tampon, 458 00:28:16,240 --> 00:28:20,760 intuitive, ajo që ne duhet të bëni pastaj është ndajë më shumë kapacitet. 459 00:28:20,760 --> 00:28:24,490 Unë jam duke shkuar për të skremuar mbi disa nga aritmetike këtu 460 00:28:24,490 --> 00:28:26,900 dhe të përqëndrohet vetëm në këtë funksion këtu. 461 00:28:26,900 --> 00:28:29,170 Ju e dini se çfarë është malloc, ose të paktën në përgjithësi të njohur. 462 00:28:29,170 --> 00:28:32,380 Merrni me mend se çfarë realloc bën. [Student përgjigje, pakuptueshëm] 463 00:28:32,380 --> 00:28:35,690 Po >>. Dhe kjo nuk është mjaft shtuar memorie, ai bënë një rialokim kujtesë si më poshtë: 464 00:28:35,690 --> 00:28:40,530 Nëse ka ende vend në fund të vargut të ju jap më shumë se kujtesa 465 00:28:40,530 --> 00:28:43,370 se ajo fillimisht ju jep, atëherë ju do të merrni atë memorie shtesë. 466 00:28:43,370 --> 00:28:46,640 Kështu që ju vetëm mund të vënë personazhet vargjet për të kthyer prapa për të kthyer prapa. 467 00:28:46,640 --> 00:28:49,290 Por në qoftë se nuk është kështu, sepse ju ka pritur shumë gjatë 468 00:28:49,290 --> 00:28:51,700 dhe diçka e rastit mori plopped në kujtesë atje, por ka ekstra 469 00:28:51,700 --> 00:28:56,480 kujtesës këtu poshtë, kjo është në rregull. Realloc do të bëjë të gjitha heqjen e rëndë për ju, 470 00:28:56,480 --> 00:28:58,810 lëvizin string keni lexuar në mënyrë larg nga këtu, 471 00:28:58,810 --> 00:29:02,550 vënë atë atje poshtë, dhe pastaj ju japin më shumë në pistë disa atë pikë. 472 00:29:02,550 --> 00:29:05,610 Pra, me një valë të dorës, më lejoni të them se ajo që po bën getString 473 00:29:05,610 --> 00:29:09,540 është ajo e filluar me një tampon të vogël, ndoshta 1 karakter të vetme, 474 00:29:09,540 --> 00:29:12,300 dhe në qoftë se përdoruesi në 2 lloje të karaktereve, getString përfundon 475 00:29:12,300 --> 00:29:15,210 thirrje realloc dhe thotë, "Ooh, 1 karakter nuk ishte e mjaftueshme. 476 00:29:15,210 --> 00:29:18,480 Jepni 2 karaktere. ' Pastaj në qoftë se ju lexoni me anë të logjikës së lak, 477 00:29:18,480 --> 00:29:21,070 ajo do të thonë, "Ooh, përdorues shtypur në 3 karaktere. 478 00:29:21,070 --> 00:29:25,690 Më jepni, por tani nuk 2 4 karaktere, atëherë jepni 8, atëherë jepni 16 dhe 32 '. 479 00:29:25,690 --> 00:29:28,180 Fakti që unë jam duke dyfishuar kapacitetin e çdo kohë 480 00:29:28,180 --> 00:29:30,320 do të thotë se tampon nuk do të rritet ngadalë. 481 00:29:30,320 --> 00:29:35,870 Ajo do të rritet super të shpejtë, dhe çfarë mund të jetë përparësi e se? 482 00:29:35,870 --> 00:29:38,540 Pse jam unë dyfishuar madhësinë e tampon, edhe pse përdoruesit 483 00:29:38,540 --> 00:29:41,450 mund të duhet vetëm 1 karakter shtesë nga tastierë? 484 00:29:41,450 --> 00:29:44,830 [Student përgjigje, pakuptueshëm]. >> Çfarë është ajo? 485 00:29:44,830 --> 00:29:46,750 Saktësisht. Ju nuk duhet të rritet atë sa më shpesh. 486 00:29:46,750 --> 00:29:48,870 Dhe kjo është vetëm një lloj - you're mbrojtëse baste tuaj këtu. 487 00:29:48,870 --> 00:29:54,150 Ideja është se ju nuk doni të telefononi realloc shumë, sepse ajo tenton të jetë i ngadalshëm. 488 00:29:54,150 --> 00:29:56,840 Çdo herë që ju kërkoni sistemin operativ për kujtesën, si ju së shpejti do të shihni 489 00:29:56,840 --> 00:30:00,620 në një sërë problemeve të ardhmen, ajo tenton të marrë disa kohë. 490 00:30:00,620 --> 00:30:04,980 Pra, duke minimizuar atë sasinë e kohës, edhe në qoftë se ju jeni të humbur një hapësirë, tenton të jetë një gjë e mirë. 491 00:30:04,980 --> 00:30:07,250 >> Por nëse lexojmë nëpër pjesën e fundit të getString këtu, 492 00:30:07,250 --> 00:30:10,880 dhe përsëri, të kuptuarit çdo linjë të vetme këtu nuk është aq e rëndësishme sot. 493 00:30:10,880 --> 00:30:14,830 Por vini re se ajo përfundimisht quan malloc përsëri, dhe ajo ndan 494 00:30:14,830 --> 00:30:16,980 pikërisht si bytes shumë si ajo ka nevojë për vargun 495 00:30:16,980 --> 00:30:21,620 dhe pastaj hedh larg duke e quajtur të lirë, tampon tepër të mëdha, 496 00:30:21,620 --> 00:30:23,510 në qoftë se ajo vërtetë u dyfishua shumë herë. 497 00:30:23,510 --> 00:30:25,970 Me pak fjalë, kjo është se si getString ka qenë duke punuar gjithë këtë kohë. 498 00:30:25,970 --> 00:30:30,100 Gjithë kjo nuk është lexuar nga një karakter në një kohë përsëri dhe përsëri dhe përsëri 499 00:30:30,100 --> 00:30:37,930 dhe çdo herë ajo ka nevojë për disa memorie shtesë, ai i kërkon sistemit operativ për të duke e quajtur realloc. 500 00:30:37,930 --> 00:30:41,660 Çdo pyetje? Dakord. 501 00:30:41,660 --> 00:30:45,220 >> Një sulm. Tani që ne e kuptojmë pointers, ose të paktën 502 00:30:45,220 --> 00:30:47,560 janë gjithnjë e më të njohur me pointers, 503 00:30:47,560 --> 00:30:50,020 le të konsiderojnë si në të gjithë botën fillon të shembet 504 00:30:50,020 --> 00:30:53,160 në qoftë se ju nuk keni mjaft të mbrojtur kundër përdoruesve armiqësore, 505 00:30:53,160 --> 00:30:55,180 njerëz të cilët janë duke u përpjekur të kollitem në sistemin tuaj. 506 00:30:55,180 --> 00:31:00,260 Njerëzit të cilët janë duke u përpjekur për të vjedhur software tuaj duke iu shmangur disa kodin e regjistrimit 507 00:31:00,260 --> 00:31:02,150 që përndryshe mund të duhet të tipit in 508 00:31:02,150 --> 00:31:04,860 Hidhni një sy në këtë shembull këtu, e cila është vetëm kodi C 509 00:31:04,860 --> 00:31:07,920 që ka një funksion kryesor në pjesën e poshtme, që e quan një foo funksion, 510 00:31:07,920 --> 00:31:12,100 dhe çfarë është ajo kalon për të foo? [Student] Një argument i vetëm. 511 00:31:12,100 --> 00:31:15,660 Vetëm >> argumenti. Pra, argv [1], që do të thotë fjalën e parë e përdoruesit typed 512 00:31:15,660 --> 00:31:19,150 në rreshtin e komandave pas a.out apo çfarëdo programi është quajtur. 513 00:31:19,150 --> 00:31:24,920 Pra foo, në krye, merr në një char *, char * por është vetëm ajo? 514 00:31:24,920 --> 00:31:28,860 String. Nuk ka asgjë të re këtu dhe që string është në mënyrë arbitrare duke u quajtur bar. 515 00:31:28,860 --> 00:31:36,090 Në këtë linjë këtu, char c [12], në lloj gjysmë-teknik anglisht, çfarë është kjo linjë duke bërë? 516 00:31:36,090 --> 00:31:40,640 Array e -? Personazhet. Më jepni një koleksion prej 12 karaktereve. 517 00:31:40,640 --> 00:31:44,970 Pra, ne mund të quajmë këtë një tampon. Ajo që quhet teknikisht c, por një tampon në programimin e 518 00:31:44,970 --> 00:31:47,890 thjesht do të thotë një bandë e hapësirës që ju mund të vënë disa sende in 519 00:31:47,890 --> 00:31:49,940 >> Pastaj fundi, memcpy, ne nuk kemi përdorur më parë. 520 00:31:49,940 --> 00:31:52,380 Por ju ndoshta mund të me mend se çfarë ajo bën. Kjo kopje memorie. 521 00:31:52,380 --> 00:31:58,790 Çfarë e bën atë të bëjë? E pra, kjo duket kopje bar, kontributi i saj, në c, 522 00:31:58,790 --> 00:32:03,420 por vetëm deri në gjatësinë e bar. 523 00:32:03,420 --> 00:32:07,440 Por ka një bug këtu. 524 00:32:07,440 --> 00:32:14,500 Mirë, kështu që teknikisht ne duhet të vërtetë të bëjë strlen (bar) x sizeof (char), që është e saktë. 525 00:32:14,500 --> 00:32:17,920 Por në rastin më të keq këtu, le të supozojmë se that's - kështu, në rregull. 526 00:32:17,920 --> 00:32:23,760 Pastaj ka 2 mete. Pra, sizeof (char), të gjithë të drejtë, le të bëjnë këtë një pak më të gjerë. 527 00:32:23,760 --> 00:32:28,860 Deri tani nuk ka ende një bug, e cila është ajo? 528 00:32:28,860 --> 00:32:31,630 [Student përgjigje, pakuptueshëm] Kontrollo >> për çfarë? Mirë, kështu që ne duhet të kontrolluar 529 00:32:31,630 --> 00:32:35,010 for null, sepse gjëra të këqija të ndodhë kur kursori juaj është NULL, 530 00:32:35,010 --> 00:32:38,490 Sepse ju mund të përfundojnë duke shkuar atje, dhe ju kurrë nuk duhet të shkojnë në NULL 531 00:32:38,490 --> 00:32:40,890 nga dereferencing atë me operatorin *. 532 00:32:40,890 --> 00:32:45,250 Kështu që është e mirë, dhe çfarë tjetër po bëjmë? Logjikisht nuk ka një krisje edhe këtu. 533 00:32:45,250 --> 00:32:47,650 [Student përgjigje, pakuptueshëm] 534 00:32:47,650 --> 00:32:51,340 Kështu >> kontrolloni nëse argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Mirë, kështu që nuk ka 3 mete në këtë program këtu. 536 00:32:54,130 --> 00:33:00,080 Ne nuk jemi duke kontrolluar nëse përdoruesi shtypur në të vërtetë në çdo gjë në argv [1], mirë. 537 00:33:00,080 --> 00:33:02,240 Pra, çfarë është bug tretë? Po? 538 00:33:02,240 --> 00:33:04,420 [Student përgjigje, pakuptueshëm] >> mirë. 539 00:33:04,420 --> 00:33:09,590 Pra, ne kontrolluar një skenar. Ne kontrolluar në mënyrë implicite mos kopjoni memorie më shumë 540 00:33:09,590 --> 00:33:12,800 se do të kalojë gjatësinë e bar. 541 00:33:12,800 --> 00:33:15,720 Pra, nëse vargu përdoruesi është shtypur në 10 karaktere të gjatë, 542 00:33:15,720 --> 00:33:18,260 kjo është thënë: "Vetëm kopje 10 karaktere. ' 543 00:33:18,260 --> 00:33:21,140 Dhe kjo është në rregull, por ajo në qoftë se përdoruesi typed në një fjalë në ftim 544 00:33:21,140 --> 00:33:29,360 si një fjalë 20 karakter, kjo është, duke thënë se 20 kopje karaktere nga bar në çfarë? 545 00:33:29,360 --> 00:33:32,840 c, i njohur ndryshe si tampon tonë, që do të thotë që ju vetëm shkroi dhënat 546 00:33:32,840 --> 00:33:35,950 në 8 vende bajt se ju nuk bëni vet, 547 00:33:35,950 --> 00:33:38,320 dhe ju nuk bëni vet ato në kuptimin që ju kurrë nuk alokuar ato. 548 00:33:38,320 --> 00:33:41,190 Pra, kjo është ajo që është e njohur përgjithësisht si sulm del nga shtrati tampon, 549 00:33:41,190 --> 00:33:46,650 ose tampon muar sulm, dhe sulmi i saj në kuptimin që nëse përdoruesi 550 00:33:46,650 --> 00:33:50,650 apo program që flet funksionin tuaj është duke bërë këtë me keqdashje, 551 00:33:50,650 --> 00:33:53,780 çfarë në të vërtetë ndodh ardhshëm mund të jetë mjaft e keqe. 552 00:33:53,780 --> 00:33:55,690 >> Le të marrin një sy në këtë foto këtu. 553 00:33:55,690 --> 00:33:59,070 Kjo foto paraqet turrë tuaj të kujtesës. 554 00:33:59,070 --> 00:34:01,050 Dhe kujtojnë se çdo herë që të thërrasë një funksion, 555 00:34:01,050 --> 00:34:04,520 ju merrni këtë kornizë të vogël në rafte dhe pastaj një tjetër dhe pastaj një tjetër dhe pastaj një tjetër. 556 00:34:04,520 --> 00:34:07,250 Dhe deri tani ne kemi vetëm lloji i përhumbur këto larg si rectangles 557 00:34:07,250 --> 00:34:09,380 ose atje në bord ose në ekran këtu. 558 00:34:09,380 --> 00:34:12,219 Por nëse ne zoom në në një nga ato rectangles, 559 00:34:12,219 --> 00:34:16,460 kur ju telefononi një foo funksion, ajo rezulton se ka më shumë në rafte 560 00:34:16,460 --> 00:34:18,739 brenda asaj kornize dhe se drejtkëndësh 561 00:34:18,739 --> 00:34:23,370 se vetëm x dhe y dhe a dhe b, si ne nuk flasim për shkëmbim. 562 00:34:23,370 --> 00:34:25,949 Ajo rezulton se ka disa detaje të nivelit të ulët, 563 00:34:25,949 --> 00:34:27,780 në mesin e tyre kthehen adresa. 564 00:34:27,780 --> 00:34:33,020 Pra, ajo rezulton, kur e quan foo kryesore, kryesore duhet të informojë foo 565 00:34:33,020 --> 00:34:36,760 ajo adresa kryesor është në kujtesën e kompjuterit. 566 00:34:36,760 --> 00:34:40,659 Sepse përndryshe, sa më shpejt që foo është bërë ekzekutimin, si në këtë rast këtu, 567 00:34:40,659 --> 00:34:43,790 pasi të keni arritur këtë mbajtëse të ngushtë kaçurrel në fund të foo, 568 00:34:43,790 --> 00:34:48,860 si dreq nuk e di se ku foo kontrolli i programit është menduar për të shkuar? 569 00:34:48,860 --> 00:34:52,460 Ajo rezulton se përgjigja e kësaj pyetje është në atë drejtkëndësh kuqe këtu. 570 00:34:52,460 --> 00:34:56,130 Kjo paraqet një tregues, dhe kjo është deri në kompjuter për të ruajtur, përkohësisht, 571 00:34:56,130 --> 00:35:00,250 në rafte ashtuquajturës adresën e kryesore në mënyrë që sa më shpejt foo është bërë ekzekutimin, 572 00:35:00,250 --> 00:35:04,110 kompjuteri e di se ku dhe çfarë vijë në kryesore për të shkuar mbrapa për të. 573 00:35:04,110 --> 00:35:06,900 Akrep ruajtur kornizë lidhet në mënyrë të ngjashme me këtë. 574 00:35:06,900 --> 00:35:09,620 Bar char * ketu përfaqëson çfarë? 575 00:35:09,620 --> 00:35:14,740 E pra, tani ky segment blu këtu është kornizë foo-së, çka është bar? 576 00:35:14,740 --> 00:35:18,300 Mirë, kështu bar është vetëm argumenti në funksion foo. 577 00:35:18,300 --> 00:35:20,720 >> Deri tani ne jemi kthyer në foto njohur. 578 00:35:20,720 --> 00:35:22,960 Ka gjëra shumë dhe distractions më shumë në ekran 579 00:35:22,960 --> 00:35:27,490 por ky segment drita blu është ajo që ne kemi qenë duke tërhequr mbi dërrasë për diçka si shkëmbim. 580 00:35:27,490 --> 00:35:31,890 Kjo është kornizë për foo dhe e vetmja gjë në të drejtën tani është bar, 581 00:35:31,890 --> 00:35:34,630 cila është kjo parametri. 582 00:35:34,630 --> 00:35:39,840 Por çfarë tjetër duhet të jetë në rafte, në përputhje me këtë kod këtu? 583 00:35:39,840 --> 00:35:44,280 Char c [12]. Pra, ne duhet të shohim 12 sheshet e kujtesës, 584 00:35:44,280 --> 00:35:46,260 ndarë për një ndryshore të quajtur c. 585 00:35:46,260 --> 00:35:48,340 Dhe me të vërtetë ne nuk kemi se në ekran. 586 00:35:48,340 --> 00:35:51,650 Shumë të lartë nuk është c [0], dhe pastaj autori i këtij diagram 587 00:35:51,650 --> 00:35:55,130 nuk bother tërhequr të gjitha sheshet, por ka të vërtetë nuk ka 12 588 00:35:55,130 --> 00:36:00,120 sepse në qoftë se ju shikoni në fund të drejtën, c [11], në qoftë se ju numërimin nga 0, është 12 bytes të tilla. 589 00:36:00,120 --> 00:36:06,190 Por këtu është problemi: Në cilin drejtim është në rritje c? 590 00:36:06,190 --> 00:36:10,390 Lloj i lartë poshtë, të drejtë? Në qoftë se ajo fillon në krye dhe rritet në fund, 591 00:36:10,390 --> 00:36:13,480 nuk duket si ne e kemi lënë veten pistë shumë këtu në të gjitha. 592 00:36:13,480 --> 00:36:15,320 Ne kemi lloj të pikturuar veten në një cep, 593 00:36:15,320 --> 00:36:20,210 dhe se c [11] është e drejtë kundër bar, e cila është e drejtë kundër kornizë treguesin rafte, 594 00:36:20,210 --> 00:36:23,800 që është e drejtë kundër adresën e kthimit; nuk ka më vend. 595 00:36:23,800 --> 00:36:26,100 Pra, çfarë është implikimi, atëherë, në qoftë se ju vidhos deri, 596 00:36:26,100 --> 00:36:30,460 dhe ju provoni lexuar 20 bytes në një tampon 12-byte? 597 00:36:30,460 --> 00:36:33,460 Ku janë ato 8 bytes shtesë do të shkojnë? 598 00:36:33,460 --> 00:36:36,370 Brenda çdo gjë tjetër, disa prej të cilave është super i rëndësishëm. 599 00:36:36,370 --> 00:36:40,480 Dhe gjëja më e rëndësishme, potencialisht, është kutia e kuqe atje, adresa e kthimit. 600 00:36:40,480 --> 00:36:44,720 Sepse mendoj që ju jeni ose aksidentalisht ose adversarially 601 00:36:44,720 --> 00:36:48,040 prishësh ato 4 byte, që adresa pointer, 602 00:36:48,040 --> 00:36:53,190 jo vetëm me mbeturina, por me një numër që ndodh për të përfaqësuar një adresë aktual në kujtesë? 603 00:36:53,190 --> 00:36:55,930 Çfarë është implicaiton, logjikisht? 604 00:36:55,930 --> 00:36:59,080 [Student përgjigjet, pakuptueshëm] >> Pikërisht. Kur kthehet foo 605 00:36:59,080 --> 00:37:03,560 dhe hitet që mbajtëse kaçurrel, programi do të vazhdojë të mos kthehen në kryesore, 606 00:37:03,560 --> 00:37:08,320 ajo do të kthehen në çfarëdo adresa është në atë kuti të kuqe. 607 00:37:08,320 --> 00:37:11,560 >> Tani, në rastin e regjistrimit software anashkaluar, 608 00:37:11,560 --> 00:37:14,400 çfarë është adresa që është duke u kthyer për të është funksioni 609 00:37:14,400 --> 00:37:18,820 që zakonisht merr quajti pasi ju keni paguar për software dhe futur kodin tuaj të regjistrimit? 610 00:37:18,820 --> 00:37:23,160 Ju mund të lloj mashtrim e kompjuterit në mos shkuar këtu, por në vend të kësaj, duke shkuar deri këtu. 611 00:37:23,160 --> 00:37:27,950 Ose, nëse ju jeni të vërtetë të zgjuar, një kundërshtar në fakt mund të shkruani në tastierë, 612 00:37:27,950 --> 00:37:32,500 për shembull, nuk është një fjalë e vërtetë, jo 20 karaktere, por mendoj se ai ose ajo 613 00:37:32,500 --> 00:37:36,200 Llojet në disa karaktere që përfaqësojnë kodin? 614 00:37:36,200 --> 00:37:38,860 Dhe kjo nuk do të jetë kodi C, ajo do të jetë personazhet 615 00:37:38,860 --> 00:37:42,920 që përfaqësojnë kodet binare makine, e 0 dhe 1-shave. 616 00:37:42,920 --> 00:37:46,740 Por mendoj se ata janë të zgjuar të mjaftueshme për të bërë këtë, në një farë mënyre ngjitur në të shpejtë getString 617 00:37:46,740 --> 00:37:49,460 diçka që është hartuar në thelb kodin, 618 00:37:49,460 --> 00:37:56,900 dhe e fundit 4 bytes prishësh atë adresë e kthimit, adresa dhe çfarë bën që input bëni? 619 00:37:56,900 --> 00:38:01,860 Ajo ruan në këtë drejtkëndësh të kuq adresën e bajt parë të tampon. 620 00:38:01,860 --> 00:38:04,270 Kështu që ju duhet të jetë me të vërtetë i zgjuar, dhe kjo është një shumë e gjykimit dhe gabim 621 00:38:04,270 --> 00:38:08,500 për njerëzit e keqe atje, por nëse ju mund ta kuptoj se sa e madhe kjo është tampon, 622 00:38:08,500 --> 00:38:12,170 të tilla që bytes fundit në kontributin që ju ofrojnë për programin 623 00:38:12,170 --> 00:38:15,970 ndodhë që të jetë e barabartë me adresën e fillimit të buffer tuaj, 624 00:38:15,970 --> 00:38:22,270 ju mund ta bëni këtë. Nëse ne themi, normalisht, hello, dhe \ 0, kjo është ajo që përfundon deri në tampon. 625 00:38:22,270 --> 00:38:27,860 Por në qoftë se ne jemi më të zgjuar, dhe ne buffer mbushur atë me atë që ne do të thërrasë përgjithësi kodin sulm, 626 00:38:27,860 --> 00:38:31,920 A, A, A, A: Sulmi,, sulm sulm, sulm, ku kjo është vetëm diçka që e bën diçka të keqe. 627 00:38:31,920 --> 00:38:35,190 E pra, çfarë ndodh në qoftë se ju jeni me të vërtetë i zgjuar, ju mund të bëni këtë: 628 00:38:35,190 --> 00:38:41,740 Në kutinë e kuqe këtu është një sekuencë të numrave: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Vini re se kjo përputhet me numrin që është deri këtu. 630 00:38:44,890 --> 00:38:47,280 Kjo është në mënyrë të kundërt, por më shumë në atë kohë tjetër. 631 00:38:47,280 --> 00:38:51,430 Vini re se kjo adresë kthimi është ndryshuar qëllimisht 632 00:38:51,430 --> 00:38:54,970 të barabartë adresën e deri këtu, jo adresa e kryesor. 633 00:38:54,970 --> 00:39:00,170 Pra, në qoftë se djalë i keq është super i zgjuar, ai ose ajo do të përfshijë në këtë kod sulm 634 00:39:00,170 --> 00:39:02,890 diçka si, "Fshij të gjitha dosjet e përdoruesit. ' 635 00:39:02,890 --> 00:39:06,320 Ose 'Kopjo passwords,' ose 'Krijo një llogari përdoruesi që unë mund të hyni në. " 636 00:39:06,320 --> 00:39:10,130 Asgjë në të gjitha, dhe kjo është edhe rreziku dhe fuqia e C. 637 00:39:10,130 --> 00:39:12,900 Sepse ju keni qasje në kujtesë nëpërmjet pointers 638 00:39:12,900 --> 00:39:15,950 dhe ju mund të shkruani për këtë arsye çdo gjë që ju dëshironi në kujtesë të kompjuterit. 639 00:39:15,950 --> 00:39:19,290 Ju mund të bëni një kompjuter të bëjë çdo gjë që ju doni thjesht nga 640 00:39:19,290 --> 00:39:22,780 që ajo të hidhen rreth brenda hapësirës së vet kujtesës. 641 00:39:22,780 --> 00:39:27,230 Dhe kështu, në këtë ditë, kështu që shumë programe dhe faqet e internetit kaq shumë që janë të komprometuar 642 00:39:27,230 --> 00:39:29,730 avulloj për njerëzit duke përfituar nga kjo. 643 00:39:29,730 --> 00:39:32,510 Dhe kjo mund të duket si një sulm super-sofistikuar, 644 00:39:32,510 --> 00:39:34,220 por kjo nuk ka gjithmonë të fillojë në këtë mënyrë. 645 00:39:34,220 --> 00:39:36,770 >> Realiteti është se ajo që njerëzit zakonisht e këqija do të bëni është, 646 00:39:36,770 --> 00:39:41,470 nëse kjo është një program në një command line ose një program GUI ose një faqe interneti, 647 00:39:41,470 --> 00:39:43,290 është që ju vetëm të fillojë ofrimin e pakuptimta. 648 00:39:43,290 --> 00:39:46,940 Ju shkruani një fjalë të vërtetë të madhe në fushën e kërkimit dhe hit Enter, 649 00:39:46,940 --> 00:39:49,030 dhe ju presin të shohin nëse crashes internetit. 650 00:39:49,030 --> 00:39:53,270 Ose ju të presim të shohim nëse programi manifeston disa mesazh gabimi. 651 00:39:53,270 --> 00:39:55,480 Sepse në qoftë se ju merrni me fat, si djalë i keq, 652 00:39:55,480 --> 00:39:59,610 dhe ju japin disa të dhëna të çmendur që crashes programin, 653 00:39:59,610 --> 00:40:02,280 që do të thotë programues nuk parashikojnë sjelljen tuaj të keq 654 00:40:02,280 --> 00:40:05,420 që do të thotë që ju mund ndoshta, me përpjekje të mjaftueshme, 655 00:40:05,420 --> 00:40:09,870 Gjyqi mjaftueshme dhe gabim, të kuptoj se si për të zhvilluar një sulm më të saktë. 656 00:40:09,870 --> 00:40:15,900 Pra, sa më shumë që një pjesë e sigurisë nuk është vetëm shmangur këto sulme krejt, por zbulimin e tyre 657 00:40:15,900 --> 00:40:20,250 dhe në fakt duke kërkuar në shkrimet dhe duke parë atë që inputet çmendur të ketë njerëz të shtypur në faqen tuaj te internetit. 658 00:40:20,250 --> 00:40:26,040 Çfarë terma kërkimi janë njerëz të shtypur në faqen tuaj te internetit me shpresën e tejmbushur disa tampon? 659 00:40:26,040 --> 00:40:28,900 Dhe kjo të gjitha boils poshtë për bazat e thjeshta të asaj që është një grup, 660 00:40:28,900 --> 00:40:32,510 dhe çfarë do të thotë të ndajë dhe të përdorin kujtesën? 661 00:40:32,510 --> 00:40:34,920 Dhe lidhur me këtë, gjithashtu, është kjo. 662 00:40:34,920 --> 00:40:37,520 >> Pra, le të vetëm të shikoj në brendësi të një hard drive përsëri. 663 00:40:37,520 --> 00:40:40,190 Kështu që ju kujtohet nga një ose dy javë më parë se kur ju drag fotografi 664 00:40:40,190 --> 00:40:45,470 tek Recycle Bin tuaj ose plehra mund, çfarë ndodh? 665 00:40:45,470 --> 00:40:47,850 [Student] Asgjë. Po >>, absolutisht asgjë. Përfundimisht, nëse ju drejtuar të ulët 666 00:40:47,850 --> 00:40:51,370 në hapësirë ​​në disk, Windows ose Mac OS do të fillojë grisësh fotografi për ju. 667 00:40:51,370 --> 00:40:53,670 Por në qoftë se ju drag diçka në atje, atëherë kjo nuk është aspak e sigurt. 668 00:40:53,670 --> 00:40:56,550 Gjitha vendet anëtare, roomate mik apo familja juaj ka të bëjë është të klikoni dy herë, dhe voila. 669 00:40:56,550 --> 00:40:59,720 Ka të gjitha dosjet që ju të paqarta u përpoqën për të fshirë. 670 00:40:59,720 --> 00:41:02,840 Pra, shumica prej nesh të paktën e di që ju keni për të right click ose kontroll klikoni 671 00:41:02,840 --> 00:41:05,320 dhe bosh plehra, ose diçka të tillë. 672 00:41:05,320 --> 00:41:07,900 Por edhe atëherë, që nuk ka fare të bëjë mashtrim. 673 00:41:07,900 --> 00:41:11,340 Sepse ajo që ndodh kur ju keni një fotografi në hard drive tuaj 674 00:41:11,340 --> 00:41:14,590 që përfaqëson një dokument fjalë ose ndonjë JPEG? 675 00:41:14,590 --> 00:41:18,820 Dhe kjo paraqet hard drive tuaj, dhe le të thonë se kjo copë here paraqet atë skedar, 676 00:41:18,820 --> 00:41:21,640 dhe është e përbërë nga një bandë e tërë e të 0 dhe 1-shave. 677 00:41:21,640 --> 00:41:25,470 Çfarë ndodh kur nuk jeni vetëm terhiq atë skedar tek një trashcan ose ricikloj bin, 678 00:41:25,470 --> 00:41:30,390 por edhe zbrazët atë? 679 00:41:30,390 --> 00:41:32,820 Lloj asgjë. Kjo nuk është asgjë tani. 680 00:41:32,820 --> 00:41:37,630 Tani ajo është vetëm asgjë, sepse një diçka pak ndodh në formën e këtij tabelën. 681 00:41:37,630 --> 00:41:41,170 Pra, ka disa lloj të dhënash ose tabelë në brendësi të kujtesës një kompjuter 682 00:41:41,170 --> 00:41:44,470 që në thelb ka 1 kolonë për fotografi emra, 683 00:41:44,470 --> 00:41:50,550 dhe 1 kolona për file location, ku kjo mund të jetë vendndodhja 123, vetëm një numër të rastit. 684 00:41:50,550 --> 00:41:58,270 Pra, ne mund të kemi diçka si X.jpg, dhe vendndodhjen 123. 685 00:41:58,270 --> 00:42:02,870 Dhe çfarë ndodh atëherë, kur ju bosh plehra tuaj? 686 00:42:02,870 --> 00:42:06,720 Që shkon larg. Por ajo që nuk shkojnë larg, është e 0 dhe 1 e. 687 00:42:06,720 --> 00:42:09,690 >> Pra, çfarë është, atëherë, lidhja me pset 4? 688 00:42:09,690 --> 00:42:13,460 E pra, me pset 4, vetëm për shkak se ne kemi fshirë aksidentalisht 689 00:42:13,460 --> 00:42:15,890 kartë compact flash që kishte të gjitha këto foto, 690 00:42:15,890 --> 00:42:18,710 ose vetëm për shkak se ajo me fat të keq u bë i korruptuar, 691 00:42:18,710 --> 00:42:21,170 nuk do të thotë se të 0 dhe 1 e nuk janë ende atje. 692 00:42:21,170 --> 00:42:23,920 Ndoshta disa prej tyre janë humbur për shkak se diçka u korruptuar 693 00:42:23,920 --> 00:42:26,530 në kuptimin që disa të 0 became 1 dhe 1 u bë e 0. 694 00:42:26,530 --> 00:42:30,460 Gjëra të këqija mund të ndodhë për shkak të programeve buggy apo dëmtuar hardware. 695 00:42:30,460 --> 00:42:33,510 Por shumë prej këtyre bit, ndoshta edhe 100% e tyre janë ende atje, 696 00:42:33,510 --> 00:42:38,330 kjo është vetëm se kompjuteri apo kamera nuk e di ku JPEG 1 ka filluar 697 00:42:38,330 --> 00:42:41,660 dhe ku JPEG 2 filluar, por nëse ju, programues, 698 00:42:41,660 --> 00:42:45,800 e di, me pak tru, ku ato janë JPEGs ose atë që ata të duken si, 699 00:42:45,800 --> 00:42:49,570 Ju mund të analizuar 0 të dhe të 1 dhe thonë, "Ooh. JPEG. Ooh, JPEG ". 700 00:42:49,570 --> 00:42:52,830 Ju mund të shkruani një program me thelb vetëm një për lak ose kur 701 00:42:52,830 --> 00:42:56,100 që rimëkëmbet çdo njëri prej këtyre dosjeve. 702 00:42:56,100 --> 00:42:59,360 Pra mësim atëherë, është për të filluar "sigurt" fshirja dosjet tuaja 703 00:42:59,360 --> 00:43:01,720 në qoftë se ju dëshironi të shmangur këtë krejt. Po? 704 00:43:01,720 --> 00:43:06,940 [Pyetja Student, pakuptueshëm] 705 00:43:06,940 --> 00:43:11,150 Kanë >> memorie më shumë se ju e bëri më parë - 706 00:43:11,150 --> 00:43:14,790 Oh! Mirë pyetje. Pra, pse, atëherë, pas zbrazjes plehra, 707 00:43:14,790 --> 00:43:18,300 A kompjuterin tuaj ju them se ju keni më shumë hapësirë ​​të lirë se ju e bëri më parë? 708 00:43:18,300 --> 00:43:22,450 Në pak fjalë, sepse kjo është gënjyer. Më teknikisht, ju keni më shumë hapësirë. 709 00:43:22,450 --> 00:43:26,720 Sepse tani ju kanë thënë, ju mund të vendosni gjëra të tjera se ku fotografi dikur ishte, 710 00:43:26,720 --> 00:43:28,930 por kjo nuk do të thotë BITS janë duke shkuar larg, 711 00:43:28,930 --> 00:43:33,070 dhe se nuk do të thotë BITS janë duke u ndryshuar të gjitha 0, për shembull, për mbrojtjen tuaj. 712 00:43:33,070 --> 00:43:37,520 Nga ana tjetër, në qoftë se ju "sigurt" fotografi fshihet, ose fizikisht shkatërruar pajisjen, 713 00:43:37,520 --> 00:43:40,810 që me të vërtetë është e vetmja rrugë, ndonjëherë, rreth se. 714 00:43:40,810 --> 00:43:45,300 Pra, pse nuk kemi lënë në këtë shënim të gjysmë-të frikshme, dhe ne do të shohim ju në hënën. 715 00:43:45,300 --> 00:43:52,810 CS50.TV