1 00:00:00,000 --> 00:00:02,760 [Powered by Google Translate] [VIIKKO 5] 2 00:00:02,760 --> 00:00:04,760 [David J. Malan, Harvardin yliopisto] 3 00:00:04,760 --> 00:00:11,990 [Tämä on CS50.] [CS50.TV] 4 00:00:11,990 --> 00:00:17,780 [Nainen] Hän valehtelee, mitä, en tiedä. 5 00:00:17,780 --> 00:00:20,300 [Mies] Mitä siis tiedämme? 6 00:00:20,300 --> 00:00:24,120 [Nainen] että 9:15, Ray Santoya oli ATM. 7 00:00:24,120 --> 00:00:27,420 [Mies] Joten kysymys on, mitä hän teki klo 09:16? 8 00:00:27,420 --> 00:00:29,980 [Nainen] Shooting 9 mm jotain. 9 00:00:29,980 --> 00:00:31,900 Ehkä hän näki ampuja. 10 00:00:31,900 --> 00:00:34,000 [Mies] Tai hän oli työskennellyt hänen kanssaan. 11 00:00:34,000 --> 00:00:36,330 [Nainen] Odota. Mene taaksepäin. 12 00:00:36,330 --> 00:00:38,330 [Mies] Mitä näet? 13 00:00:38,330 --> 00:00:44,520 [♫ Suspenseful musiikkia ♫] 14 00:00:44,520 --> 00:00:48,320 [Nainen] Tuo hänen kasvonsa ylöspäin. Koko näyttö. 15 00:00:48,320 --> 00:00:51,230 [Man] Hänen lasit. >> On heijastus. 16 00:00:51,230 --> 00:01:00,810 [♫ Suspenseful musiikkia ♫] 17 00:01:00,810 --> 00:01:03,580 [Mies] Tuo Nuevita n baseball-joukkue. Se on heidän logo. 18 00:01:03,580 --> 00:01:07,790 [Nainen] Ja hän puhuu kuka on päällään se takki. 19 00:01:07,790 --> 00:01:13,730 >> [David Malan] Eli tämä on CS50 viikolla 5, ja tänään pilata hieman televisio ja elokuva sinulle. 20 00:01:13,730 --> 00:01:16,170 Joten kun olet katsomassa näyttää kuin tämä tässä, 21 00:01:16,170 --> 00:01:19,910 ja kytät sanoa "Voitteko siivota?" tai "Paranna" 22 00:01:19,910 --> 00:01:21,900 ei lisätä reaalimaailmassa. 23 00:01:21,900 --> 00:01:25,220 Itse asiassa, mitä todella saada on vähän jotain tällaista. 24 00:01:25,220 --> 00:01:27,570 Olen revitä yksi henkilöstön valokuvat sivulta. 25 00:01:27,570 --> 00:01:30,980 Tämä on ohjelma nimeltä Photoshop. Tämä on 1 2 Bowdens, 26 00:01:30,980 --> 00:01:36,300 1 3 Bowdens oikeastaan ​​tänään, koska meillä on rouva Bowden täällä hyvin, Rob ja Paul. 27 00:01:36,300 --> 00:01:41,950 Mutta tässä on Rob ruudulla, ja jos me zoomata että kimaltaa hän on aina ollut hänen silmiinsä, 28 00:01:41,950 --> 00:01:47,600 mitä itse nähdä, että mitä näet on mitä saat. 29 00:01:47,600 --> 00:01:51,690 Tämä on "tehostettu", joten "CSI" on se vähän väärin. 30 00:01:51,690 --> 00:01:55,190 On yksi toinen leike, jos voimme kiusata "CSI" vain vähän kauemmin. 31 00:01:55,190 --> 00:01:58,500 Tämä on kiva lause lausua vastedes, jos haluat 32 00:01:58,500 --> 00:02:10,280 vankka tekninen ystäviesi kanssa, kun oikeasti, sanot mitään. 33 00:02:10,280 --> 00:02:12,970 >> [Mies] Viikkoja Olen tutkinut Cabby Killer murhat 34 00:02:12,970 --> 00:02:15,360 tietyllä viehtymyksen. 35 00:02:15,360 --> 00:02:17,160 [Nainen # 1] Tämä on reaaliajassa. 36 00:02:17,160 --> 00:02:22,930 [Nainen # 2] Tulen luoda graafinen käyttöliittymä Visual Basic, katso jos voin seurata IP-osoitteen. 37 00:02:22,930 --> 00:02:29,570 >> [Malan] Eli ääni epätahtiin syrjään, luoda graafinen käyttöliittymä Visual Basic 38 00:02:29,570 --> 00:02:31,820 seurata IP-osoite on täyttä hölynpölyä. 39 00:02:31,820 --> 00:02:33,840 Nykyään et käytä Visual Basic, 40 00:02:33,840 --> 00:02:38,920 ei ole tarvetta GUI, ja IP-osoite oli teknisesti tarkka termi. 41 00:02:38,920 --> 00:02:41,730 Joten pidä silmällä näitä, ja yksi suosikeistani: 42 00:02:41,730 --> 00:02:45,070 Tämä yksi on hieman vaikeaselkoinen, koska sinun täytyy tietää eri kieltä. 43 00:02:45,070 --> 00:02:47,860 On kielellä kutsutaan Objective-C, joka on pääjoukko C 44 00:02:47,860 --> 00:02:51,960 Mikä tarkoittaa se C plus joitakin lisäominaisuuksia, joiden joukossa olio-ohjelmointi. 45 00:02:51,960 --> 00:02:55,070 Ja tämä on kieli, että Apple on suosituksi iOS ohjelmointia. 46 00:02:55,070 --> 00:02:58,760 Ja niin tässä leikkeen eri näyttelyssä kokonaan, mistä "Numbers" 47 00:02:58,760 --> 00:03:02,450 että jos todella katsot tarkkaan teidän TiVo ja tauko oikealla hetkellä, 48 00:03:02,450 --> 00:03:07,700 näet, että mitä he etsivät at ei ole aivan mitä ollaan kuvattu. 49 00:03:07,700 --> 00:03:11,170 Ja haluan kokeilla erilaisia ​​ääniliitäntä tänne ja katso jos voimme olla 50 00:03:11,170 --> 00:03:13,780 Pidä audio sync tällä kertaa. 51 00:03:13,780 --> 00:03:20,530 Annan teille "Numbers". 52 00:03:20,530 --> 00:03:23,240 >> [Man # 1] Se on 32-bittinen IPv4-osoite. 53 00:03:23,240 --> 00:03:38,930 [Man # 2] IP, se on internet. >> Yksityinen verkko. Se on Anita yksityisen verkon. 54 00:03:38,930 --> 00:03:43,810 [Malan] Okei. Tämä on Objective-C, ja se on noin lastenhuoneeseen väritys ohjelma, 55 00:03:43,810 --> 00:03:51,140 kuten voitte ehkä päätellä muuttujan nimi siellä. 56 00:03:51,140 --> 00:03:54,410 Niin, että silloin oli "Numbers". Joten tänään ja tällä viikolla esittelemme 57 00:03:54,410 --> 00:03:57,740 hieman maailman Forensics ja asiayhteydestä ongelmien vuoksi. 58 00:03:57,740 --> 00:04:00,590 Tänään on lyhennetty luento, koska siellä on erityinen tapahtuma täällä 59 00:04:00,590 --> 00:04:05,530 myöhemmin, joten me kurkistaa, ja kammata sekä opiskelijoiden ja heidän vanhemmilleen tänään 60 00:04:05,530 --> 00:04:07,420 joitakin asioita, jotka ovat näköpiirissä. 61 00:04:07,420 --> 00:04:12,240 Niistä, kuten maanantaina, sinulla on muutama enemmän luokkatoverit. 62 00:04:12,240 --> 00:04:16,050 EDX, Harvardin ja MITs uusia online-aloite avoimen kurssimateriaalin 63 00:04:16,050 --> 00:04:19,120 ja enemmän, on käynnisti Harvardin kampuksella maanantaina. 64 00:04:19,120 --> 00:04:21,490 Mikä tarkoittaa tulevat maanantai sinulla on - kuten viime count, 65 00:04:21,490 --> 00:04:26,210 86000 ylimääräisiä luokkatoverit seuraan yhdessä CS50 luennot 66 00:04:26,210 --> 00:04:29,170 ja osat ja walkthroughs ja ongelma sarjaa. 67 00:04:29,170 --> 00:04:32,350 Ja osana tätä, sinun tulee jäseniä avajais luokan 68 00:04:32,350 --> 00:04:35,090 CS50 ja nyt CS50x. 69 00:04:35,090 --> 00:04:39,310 >> Osana tätä nyt, ymmärtävät, että on jonkin verran upsides samoin. 70 00:04:39,310 --> 00:04:43,790 Saada valmis tähän, sillä valtava määrä opiskelijoita, 71 00:04:43,790 --> 00:04:47,180 on riittävää todeta, että vaikka meillä on 108 TF ja CAS, 72 00:04:47,180 --> 00:04:50,790 ei aivan paras oppilas / opettaja-suhde, kun osuimme 80000 muuta opiskelijaa. 73 00:04:50,790 --> 00:04:52,850 Eli emme aio olla luokittelu niin monta ongelmaa asettaa manuaalisesti. 74 00:04:52,850 --> 00:04:55,920 Joten esitteli tällä viikolla Harjoitus on CS50 Tarkista, 75 00:04:55,920 --> 00:04:58,450 joka tulee olemaan komentorivi sisällä laitteen 76 00:04:58,450 --> 00:05:01,200 että saat kun päivittää myöhemmin tänä viikonloppuna, 77 00:05:01,200 --> 00:05:03,200 ja voit ajaa komennon, tarkista 50, 78 00:05:03,200 --> 00:05:06,500 oman PSET, ja saat palautetta siitä, onko ohjelma 79 00:05:06,500 --> 00:05:11,160 oikea tai väärä mukaan eri eritelmät, jotka olemme antaneet. 80 00:05:11,160 --> 00:05:13,580 Joten lisää tästä ja ongelma asettaa erittely ja 81 00:05:13,580 --> 00:05:17,240 CS50x luokkatoverit tulee käyttämään tätä samoin. 82 00:05:17,240 --> 00:05:19,230 >> Joten ongelma setti 4 on kyse Forensics. 83 00:05:19,230 --> 00:05:21,940 Ja tämä pala on inspiroinut joitakin tosielämän tavaraa, 84 00:05:21,940 --> 00:05:24,620 jolloin kun olin tutkijakoulussa, olen internoitiin jonkin aikaa 85 00:05:24,620 --> 00:05:28,650 Middlesex County District syyttäjänvirasto tekee oikeuslääketieteen työtä 86 00:05:28,650 --> 00:05:31,650 niiden lyijyä oikeuslääketieteen tutkija, ja mitä tämä oli 87 00:05:31,650 --> 00:05:35,260 on mielestäni mainitsin muutaman viikon ohi, on Mass valtion poliisille tai muille 88 00:05:35,260 --> 00:05:39,000 tulisivat, he pudota pois asioita, kuten kiintolevyjen ja CD-levyjen ja levykkeiden 89 00:05:39,000 --> 00:05:42,340 ja vastaavat, ja sitten tavoitteena Forensics toimisto oli selvittää 90 00:05:42,340 --> 00:05:44,600 oli tai ei ollut näyttöä jonkinlaisia. 91 00:05:44,600 --> 00:05:48,010 Tämä oli Special Investigations yksikkö, joten se oli valkokaulusrikollisuuden, 92 00:05:48,010 --> 00:05:52,350 se oli enemmän huolestuttavia tavallaan rikoksia, 93 00:05:52,350 --> 00:05:55,990 mitään mukana jonkinlainen digitaalisen median, osoittautuu, että ei, että monet ihmiset 94 00:05:55,990 --> 00:05:59,370 kirjoittaa sähköpostia sanomalla "Minä tein sen." 95 00:05:59,370 --> 00:06:03,290 Niin usein nämä Forensics haut eivät nosta kovin paljon hedelmää, 96 00:06:03,290 --> 00:06:05,850 mutta joskus ihmiset kirjoittavat tällaisia ​​sähköposteja. 97 00:06:05,850 --> 00:06:08,490 Joten joskus ponnistelut palkittiin. 98 00:06:08,490 --> 00:06:14,420 >> Mutta johtaa jopa tämän oikeuslääketieteen PSET, me voidaan ottaa käyttöön vuonna PSET 4 hieman grafiikkaa. 99 00:06:14,420 --> 00:06:18,260 Joten luultavasti ottaa nämä asiat itsestäänselvyytenä, JPEG, GIF ja kuten näinä päivinä, 100 00:06:18,260 --> 00:06:21,640 mutta jos todella miettiä sitä, kuva, aivan kuten Rob kasvot, 101 00:06:21,640 --> 00:06:24,430 voitaisiin mallintaa sekvenssin pisteitä, tai pikseliä. 102 00:06:24,430 --> 00:06:26,680 Nyt, kun on kyse Rob kasvot, siellä on kaikenlaisia ​​värejä, 103 00:06:26,680 --> 00:06:29,940 ja aloimme nähdä yksittäisiä pisteitä, otherwide kutsutaan pikseliä, 104 00:06:29,940 --> 00:06:31,610 Kun aloimme Lähennä 105 00:06:31,610 --> 00:06:35,590 Mutta jos me yksinkertaistaa maailmaa hieman, ja sanoa, että tämä tässä on Rob 106 00:06:35,590 --> 00:06:40,560 musta ja valkoinen, hyvin edustamaan mustavalkoinen voimme vain käyttää binääri. 107 00:06:40,560 --> 00:06:44,960 Ja jos aiomme käyttää binääri, 1 tai 0, voimme ilmaista tämän saman kuvan 108 00:06:44,960 --> 00:06:51,970 Rob on hymyilevät kasvot tämän kuvion bittien: 11000011 edustaa 109 00:06:51,970 --> 00:06:55,160 valkoinen, valkoinen, musta, musta, musta, musta, valkoinen valkoinen. 110 00:06:55,160 --> 00:06:59,290 Ja niin se ei ole valtava harppaus, sitten alkaa puhua värikkäitä valokuvia. 111 00:06:59,290 --> 00:07:01,920 Asiat, jotka näkisitte Facebookissa tai ottaa digitaalikameralla, 112 00:07:01,920 --> 00:07:04,730 mutta varmasti, kun se tulee väriä, tarvitset enemmän bittejä. 113 00:07:04,730 --> 00:07:08,470 Ja varsin yleisiä maailmassa valokuvat on käyttää ei 1-bittiset värit, 114 00:07:08,470 --> 00:07:12,730 koska tämä viittaa siihen, mutta 24-bittiset värit, jossa voit itse saada miljoonia värejä. 115 00:07:12,730 --> 00:07:15,430 Joten kuten kun zoomataan Rob silmään, 116 00:07:15,430 --> 00:07:19,270 , joka oli mikä tahansa määrä miljoonia erilaisia ​​värikkäitä mahdollisuuksia. 117 00:07:19,270 --> 00:07:22,260 >> Joten me esitellä tämän ongelman setti 4 sekä esittely, 118 00:07:22,260 --> 00:07:27,050 joka on tänään klo 3:30 sijasta tavallista 2:30 koska perjantain luento täällä. 119 00:07:27,050 --> 00:07:29,930 Mutta video on verkossa, kuten tavallista, huomenna. 120 00:07:29,930 --> 00:07:31,880 Otamme myös esitellä sinut toiseen tiedostomuotoon. 121 00:07:31,880 --> 00:07:34,150 Joten tämä on tietoisesti tarkoitus tarkastella uhkaava aluksi, 122 00:07:34,150 --> 00:07:38,980 mutta tämä on vain joitakin asiakirjoja C struct. 123 00:07:38,980 --> 00:07:42,280 On käynyt ilmi, että Microsoftin, vuosia sitten, auttoi kansantajuistaa tähän muotoon, 124 00:07:42,280 --> 00:07:46,630 kutsutaan bitmap tiedostomuoto, BMP, ja tämä oli super-yksinkertainen, 125 00:07:46,630 --> 00:07:50,390 värikäs graafinen tiedostomuoto, jota käytettiin jo jonkin aikaa 126 00:07:50,390 --> 00:07:53,640 ja joskus vielä tapetteja pöydälle. 127 00:07:53,640 --> 00:07:57,410 Jos luulet takaisin Windows XP ja mäkiä ja sininen taivas, 128 00:07:57,410 --> 00:08:00,660 että oli tyypillisesti BMP, tai bitmap kuva, ja bittikarttoja 129 00:08:00,660 --> 00:08:03,340 ovat hauskoja meille, koska heillä on hieman enemmän monimutkaisuutta. 130 00:08:03,340 --> 00:08:05,640 Se ei ole aivan niin yksinkertaista kuin tämä ruudukko 0: n ja 1: n; 131 00:08:05,640 --> 00:08:10,680 sijaan, sinulla asioita, kuten otsikon alussa tiedoston. 132 00:08:10,680 --> 00:08:15,520 Eli toisin sanoen, sisällä. Bmp tiedosto on koko joukko 0: n ja 1: n, 133 00:08:15,520 --> 00:08:18,070 mutta siellä on joitakin ylimääräisiä 0: n ja 1: n siellä. 134 00:08:18,070 --> 00:08:21,450 Ja näyttää siltä, ​​että mitä olemme ehkä itsestäänselvyytenä vuosia, 135 00:08:21,450 --> 00:08:27,040 tiedostomuotoja kuten. doc tai. xls tai. mp3-tai. mp4, 136 00:08:27,040 --> 00:08:29,910 mitä tiedostomuotoja että olet perehtynyt. 137 00:08:29,910 --> 00:08:31,900 No, mitä se edes tarkoittaa olla tiedostomuotoon? 138 00:08:31,900 --> 00:08:35,740 Koska lopussa päivä, kaikki nämä tiedostot käytämme juuri 0: n ja 1: n 139 00:08:35,740 --> 00:08:39,950 ja ehkä ne 0: n ja 1: n edustavat a, b, c, ASCII-tai vastaava, 140 00:08:39,950 --> 00:08:42,030 vaan loppujen lopuksi, se on vain 0: n ja 1: n. 141 00:08:42,030 --> 00:08:45,300 >> Joten ihmiset vain satunnaisesti päättää keksiä uusi tiedostomuoto 142 00:08:45,300 --> 00:08:49,420 jossa he standardoida mitä malleja bittien todella tarkoittaa. 143 00:08:49,420 --> 00:08:52,790 Ja tässä tapauksessa tänne, ihmiset, jotka on suunniteltu bitmap tiedostomuoto 144 00:08:52,790 --> 00:08:58,260 sanoi, että aivan ensimmäinen tavu bittikarttatiedostoa, kuten merkitään offset 0, siellä, 145 00:08:58,260 --> 00:09:02,320 siellä tulee olemaan joitakin arvoituksellisesti nimetty muuttuja nimeltä bfType, 146 00:09:02,320 --> 00:09:06,510 joka vain seisoo varten bittikartta tyyppi, millaista bittikartta on. 147 00:09:06,510 --> 00:09:10,780 Voit päätellä, ehkä, toisen rivin, että offset-2, tavu numero 2, 148 00:09:10,780 --> 00:09:15,980 on kuvio 0: n ja 1: n, joka edustaa mitä? 149 00:09:15,980 --> 00:09:18,320 Koko jotain, ja se menee sieltä. 150 00:09:18,320 --> 00:09:20,660 Joten ongelma setti 4, voit kävellä läpi joitakin näistä asioista. 151 00:09:20,660 --> 00:09:24,480 >> Emme lopulta välittänyt niitä kaikkia, mutta huomaa se alkaa saada mielenkiintoisia 152 00:09:24,480 --> 00:09:30,780 noin viiva tai tavu 54, rgbtBlue, vihreä ja punainen. 153 00:09:30,780 --> 00:09:35,280 Jos olet koskaan kuullut lyhenne RGB, punainen vihreä sininen, tämä on viittaus siihen. 154 00:09:35,280 --> 00:09:37,840 Koska se osoittautuu voit maalata kaikki sateenkaaren värit 155 00:09:37,840 --> 00:09:41,580 joidenkin yhdistelmä punainen ja sininen ja vihreä. 156 00:09:41,580 --> 00:09:46,560 Ja itse asiassa, vanhemmat huoneessa saattaa muistaa joitakin pian projektorit. 157 00:09:46,560 --> 00:09:49,360 Nykyään juuri nähdä 1 kirkkaan valon tulevan ulos linssin. 158 00:09:49,360 --> 00:09:52,870 Mutta takaisin päivän, sinulla oli punainen linssi, sininen linssi ja vihreä linssi 159 00:09:52,870 --> 00:09:56,620 ja yhdessä ne pyritään näytön ja muodostunut värikäs kuva. 160 00:09:56,620 --> 00:09:59,590 Ja melko usein keski kouluissa ja lukioissa olisi nuo linssit 161 00:09:59,590 --> 00:10:02,680 yhä niin hieman vinossa, joten olimme tavallaan nähdä kaksin-tai kolminkertainen kuvia, 162 00:10:02,680 --> 00:10:07,500 mutta se oli ajatus. Sinulla oli punainen ja vihreä ja sininen valo maalaus kuvaa. 163 00:10:07,500 --> 00:10:09,570 Ja että samaa periaatetta käytetään tietokoneita. 164 00:10:09,570 --> 00:10:12,000 >> Joten joukossa haasteita, niin sinulle ongelma asettaa 4 165 00:10:12,000 --> 00:10:16,080 tulevat olemaan muutamia asioita, yksi on todella muuttaa kuvan. 166 00:10:16,080 --> 00:10:18,050 Ryhtyä rakenteessa 0: n ja 1: n, 167 00:10:18,050 --> 00:10:22,840 selvittää, mitkä paloina 0: n ja 1: n edustavat mitä rakenteessa näin, 168 00:10:22,840 --> 00:10:26,800 ja sitten selvittää, miten kopioida pikseleitä: punaiset, siniset, vihreät 169 00:10:26,800 --> 00:10:32,460 sisällä niin, että kun kuva näyttää tältä aluksi voisi näyttää tältä sijaan jälkeen. 170 00:10:32,460 --> 00:10:35,590 Niistä muita haasteita myös tulee olemaan, että voit luovutettava 171 00:10:35,590 --> 00:10:38,900 rikosteknisen kuvan todellisen tiedoston digitaalikamerasta 172 00:10:38,900 --> 00:10:42,410 ja että kamera, Olipa kerran, oli koko joukko kuvia. 173 00:10:42,410 --> 00:10:47,030 Ongelmana on, me vahingossa poistettu tai on ollut kuvan vioittunut jotenkin. 174 00:10:47,030 --> 00:10:51,040 Bad Things Happen digitaalikameroissa, ja niin me nopeasti kopioida kaikki 0: n ja 1: n 175 00:10:51,040 --> 00:10:55,410 pois tuosta kortin sinulle, tallentanut ne kaikki 1 iso tiedosto, ja sitten me ojentaa ne sinulle 176 00:10:55,410 --> 00:11:00,000 ongelmatilanteissa asetettu 4, jotta voit kirjoittaa ohjelman C, joka palauttaa 177 00:11:00,000 --> 00:11:02,660 kaikki nämä JPEG, mieluiten. 178 00:11:02,660 --> 00:11:06,280 Ja käy ilmi, että JPEG, vaikka ne ovat jonkin verran kompleksin-tiedoston muodossa, 179 00:11:06,280 --> 00:11:09,580 ne ovat paljon monimutkaisempia kuin tämä hymyilevät kasvot täällä. 180 00:11:09,580 --> 00:11:14,320 On käynyt ilmi, että jokainen JPEG alkaa saman malleja 0: n ja 1: n. 181 00:11:14,320 --> 00:11:18,820 Joten käyttäen while-silmukka tai on silmukka tai vastaava, 182 00:11:18,820 --> 00:11:22,350 voit toistaa kaikkia 0: n ja 1: n tässä oikeuslääketieteen kuva 183 00:11:22,350 --> 00:11:26,670 ja joka kerta näet erityinen kuvio, joka on määritelty ongelma setin erittely, 184 00:11:26,670 --> 00:11:29,770 Voit olettaa, "Oh, tässä on, hyvin suurella todennäköisyydellä, 185 00:11:29,770 --> 00:11:33,520 alku JPEG ", ja heti kun löytää sama kuvio, 186 00:11:33,520 --> 00:11:36,050 jotkut tavujen tai kilotavua tai megatavua myöhemmin 187 00:11:36,050 --> 00:11:40,550 Voit olettaa, "Ooh! Tässä on toinen JPEG, kuvan otin ensimmäisen jälkeen. 188 00:11:40,550 --> 00:11:44,720 Saanen lopettaa lukemisen että ensimmäistä tiedostoa, kirjoita tämä uusi. " 189 00:11:44,720 --> 00:11:49,980 Ja tuotoksen teidän ohjelman PSET 4 tulee olemaan jopa 50 JPEG. 190 00:11:49,980 --> 00:11:52,400 Ja jos se ei ole 50 JPEG, sinulla on vähän silmukan. 191 00:11:52,400 --> 00:11:55,580 Jos sinulla on ääretön määrä JPEG, sinulla on ääretön silmukka. 192 00:11:55,580 --> 00:11:58,280 Niin sekin on melko yhteinen asia. 193 00:11:58,280 --> 00:12:00,280 Se mitä on näköpiirissä. 194 00:12:00,280 --> 00:12:03,740 >> Quiz 0, takanamme. Toteuta kohti minun email, että aina on olemassa ihmisiä 195 00:12:03,740 --> 00:12:06,820 jotka molemmat ovat iloisia, tavallaan neutraalia, ja surullinen noin tietovisa 0 kertaa. 196 00:12:06,820 --> 00:12:10,160 Ja älä tavoittaa minua, pää TF, Zamyla, oma TF 197 00:12:10,160 --> 00:12:14,120 tai yksi varmenteiden että tiedät, jos haluat keskustella siitä, miten asiat menivät. 198 00:12:14,120 --> 00:12:16,460 >> Joten vaikutuksen vanhemmille tässä huoneessa, 199 00:12:16,460 --> 00:12:23,990 Mikä on CS50 kirjastoon? Hyvää työtä. 200 00:12:23,990 --> 00:12:32,280 Mikä CS50 kirjastoon? Niin? [Student vastauksia, käsittämättömällä] 201 00:12:32,280 --> 00:12:35,730 >> Okei, hyvä. Joten se prewritten joukko koodin että me, henkilöstö, kirjoitti, 202 00:12:35,730 --> 00:12:38,460 tarjoamme sinulle, antaa joitakin yhteisiä toimintoja. 203 00:12:38,460 --> 00:12:42,290 Juttuja saada minut string; ymmärtäkö minua int, kaikki toiminnot, jotka on lueteltu tässä. 204 00:12:42,290 --> 00:12:45,260 Alkaa nyt, alamme todella nämä apupyörät pois. 205 00:12:45,260 --> 00:12:48,230 Joten aiomme aloittaa viedä "merkkijono" teiltä, 206 00:12:48,230 --> 00:12:52,790 joka muistuttaa, oli vain synonyymi mitä todellinen tietotyypin? char *. 207 00:12:52,790 --> 00:12:57,020 Joten vanhemmat, joka oli luultavasti - se on hyvä, niin char * alamme nähdä 208 00:12:57,020 --> 00:13:00,810 ruudulla sitäkin kun me poistaa "merkkijono" sanastosta, 209 00:13:00,810 --> 00:13:02,760 ainakin kun se tulee todella kirjoittaa koodia. 210 00:13:02,760 --> 00:13:06,240 Samoin me lopeta jotkut näistä toimii paljon, 211 00:13:06,240 --> 00:13:08,390 koska meidän ohjelmat menevät entistä kehittyneempiä 212 00:13:08,390 --> 00:13:11,370 eikä vain kirjoittaa ohjelmia, jotka istuvat siellä nopeasti vilkkuva, 213 00:13:11,370 --> 00:13:13,580 odottaa käyttäjä kirjoittaa jotain sisään 214 00:13:13,580 --> 00:13:15,220 Saatte tuotantopanoksia muualta. 215 00:13:15,220 --> 00:13:18,720 Esimerkiksi, saat ne sarjan bittiä paikalliselle kiintolevylle. 216 00:13:18,720 --> 00:13:23,340 Sinä sen sijaan saada heidät tulevaisuudessa verkkoyhteyden, jotkut verkkosivuilla jonnekin. 217 00:13:23,340 --> 00:13:27,460 Joten Taitat tämän kerroksen ensimmäisen kerran, ja vedä ylös CS50 laitteen 218 00:13:27,460 --> 00:13:32,300 ja tämä tiedosto nimeltä CS50.h, jonka olet ollut teräviä lukien viikkoja. 219 00:13:32,300 --> 00:13:34,380 >> Mutta katsotaanpa itse nähdä mitä on sisällä tämän. 220 00:13:34,380 --> 00:13:38,250 Joten alkuun tiedoston sininen on vain koko joukko huomautuksia, 221 00:13:38,250 --> 00:13:41,340 takuutietoja ja lisensointi. Tämä on eräänlainen yhteinen paradigman 222 00:13:41,340 --> 00:13:44,600 ohjelmisto, koska paljon ohjelmistoja näinä päivinä on mitä kutsutaan "open source" 223 00:13:44,600 --> 00:13:46,940 mikä tarkoittaa, että joku on kirjoittanut koodin 224 00:13:46,940 --> 00:13:50,060 ja teki sitä vapaasti saatavilla, eikä vain juosta ja käyttää, 225 00:13:50,060 --> 00:13:53,660 mutta itse lukea ja muuttaa ja integroida omaan työhön. 226 00:13:53,660 --> 00:13:55,790 Niin, että mitä olet käyttänyt, avoimen lähdekoodin ohjelmistoja, 227 00:13:55,790 --> 00:13:58,030 vaikkakin hyvin pienikokoinen. 228 00:13:58,030 --> 00:14:01,860 Jos minä selaa ohi kommentit kuitenkin aloitamme nähdä joitakin tuttuja asioita. 229 00:14:01,860 --> 00:14:08,090 Joten huomaa huipulla tässä, että CS50.h tiedosto sisältää koko joukko header-tiedostot. 230 00:14:08,090 --> 00:14:11,160 Nyt useimmat näistä emme ole ennen nähneet, mutta yksi on 231 00:14:11,160 --> 00:14:15,640 tuttu, mitkä näistä olemme nähneet, vaikkakin lyhyesti, tähän mennessä? 232 00:14:15,640 --> 00:14:18,720 Joo, standardi kirjastot. Stdlib.h on malloc, 233 00:14:18,720 --> 00:14:21,590 joten kun aloimme puhua dynaamisen muistin jakamista, 234 00:14:21,590 --> 00:14:24,960 jonka tulemme takaisin ensi viikolla samoin, aloitimme mukaan lukien tiedoston. 235 00:14:24,960 --> 00:14:29,660 On käynyt ilmi, että bool ja tosi ja epätosi eivät todellisuudessa olemassa C, sinänsä, 236 00:14:29,660 --> 00:14:32,460 ellet sisällyttää tämän tiedoston täällä. 237 00:14:32,460 --> 00:14:35,770 Joten olemme, viikkoja, on myös vakio bool.h 238 00:14:35,770 --> 00:14:39,020 jotta voit käyttää käsitettä bool, tosi tai epätosi. 239 00:14:39,020 --> 00:14:41,830 Ilman tätä, sinun pitäisi lajitella väärennettyjä ja käyttää int 240 00:14:41,830 --> 00:14:45,920 ja vain mielivaltaisesti olettaa, että 0 on epätosi ja 1 on tosi. 241 00:14:45,920 --> 00:14:49,980 >> Nyt, jos me selaa edelleen, tässä on meidän määritelmä merkkijono. 242 00:14:49,980 --> 00:14:54,820 On käynyt ilmi, kuten olemme sanoneet, että jos tämä * ei ei väliä. 243 00:14:54,820 --> 00:14:56,750 Voit jopa tilaa ympäri. 244 00:14:56,750 --> 00:15:01,550 Me, tämä lukukausi, on edistää sitä tässä tehdä selväksi, että * liittyy tyypin. 245 00:15:01,550 --> 00:15:05,370 Mutta ymmärtää, yhtä yleistä, jos ei hieman yleisempää, on laittaa se sinne 246 00:15:05,370 --> 00:15:07,480 mutta toiminnallisesti se on sama asia. 247 00:15:07,480 --> 00:15:11,070 Mutta nyt, kun luemme alas entisestään, katsotaanpa katsomaan sanoa, GetInt, 248 00:15:11,070 --> 00:15:15,350 koska käytimme että ehkä ennen muuta tällä lukukaudella. 249 00:15:15,350 --> 00:15:19,620 Ja tässä on GetInt. Tämä on mitä? 250 00:15:19,620 --> 00:15:24,650 Tämä on prototyyppi. Niin usein olemme tehneet prototyyppien yläosien meidän. C-tiedostoja, 251 00:15:24,650 --> 00:15:28,190 mutta voit myös laittaa prototyyppejä header-tiedostoja,. h-tiedostot, 252 00:15:28,190 --> 00:15:32,110 kuten tämä tässä, niin että kun kirjoittaa joitakin toimintoja 253 00:15:32,110 --> 00:15:36,790 että haluat muut ihmiset voivat käyttää, joka on täsmälleen tapauksessa CS50 kirjasto, 254 00:15:36,790 --> 00:15:40,900 et vain toteuttaa omia toimintoja jotain CS50.c, 255 00:15:40,900 --> 00:15:46,720 voit myös laittaa prototyyppejä ei yläreunassa tiedoston, mutta yläosassa otsikkotiedoston, 256 00:15:46,720 --> 00:15:50,810 Silloin header tiedosto on mitä ystävät ja kollegat ovat 257 00:15:50,810 --> 00:15:52,800 terävällä sisällyttää omiin koodin. 258 00:15:52,800 --> 00:15:55,440 Joten kaikki tällä kertaa olet lukien kaikki nämä prototyypit 259 00:15:55,440 --> 00:15:59,870 tehokkaasti yläreunassa tiedoston, mutta tapa tämän terävät ovat mekanismi 260 00:15:59,870 --> 00:16:03,320 että lähinnä kopioita ja pastat tämä tiedosto omaan. 261 00:16:03,320 --> 00:16:06,400 Nyt, tässä on joitakin melko yksityiskohtaisia ​​asiakirjoja. 262 00:16:06,400 --> 00:16:08,880 >> Olemme melko itsestään selvänä, että GetInt saa int- 263 00:16:08,880 --> 00:16:10,740 mutta se osoittautuu siellä jossakin nurkassa tapauksissa, eikö? 264 00:16:10,740 --> 00:16:14,320 Entä jos käyttäjä tyypit numero, joka on aivan liian iso? 265 00:16:14,320 --> 00:16:17,350 Quintillion, joka vain ei sovi sisällä int? 266 00:16:17,350 --> 00:16:21,180 Mikä on odotettu käytös? No, ihannetapauksessa se on ennustettavissa. 267 00:16:21,180 --> 00:16:23,460 Eli tässä tapauksessa, jos olet itse lukenut sakon tulostaa, 268 00:16:23,460 --> 00:16:27,850 näet, että jos rataa ei voi lukea, tämä palaa INT_MAX. 269 00:16:27,850 --> 00:16:30,800 Emme ole koskaan puhuneet tästä, mutta perustuen arvo, 270 00:16:30,800 --> 00:16:33,030 Mikä on se, luultavasti? 271 00:16:33,030 --> 00:16:36,610 Se on jatkuvaa, joten se on joitakin erityisiä vakio, joka on luultavasti ilmoitettu 272 00:16:36,610 --> 00:16:39,460 yksi niistä header tiedostot on jopa suurempi tiedosto, 273 00:16:39,460 --> 00:16:43,400 ja INT_MAX on luultavasti jotain, noin 2 miljardia. 274 00:16:43,400 --> 00:16:48,160 Ajatuksena on, että koska meidän jotenkin merkiksi, että jotain meni pieleen, 275 00:16:48,160 --> 00:16:51,090 me, kyllä, on 4000000000 numerot käytössämme, 276 00:16:51,090 --> 00:16:53,980 Negatiivinen 2 mrd. jopa 2 miljardia, antaa tai ottaa. 277 00:16:53,980 --> 00:16:58,030 No, mikä on yleinen ohjelmointi on sinun varastaa vain yksi näistä numeroista. 278 00:16:58,030 --> 00:17:02,250 Ehkä 0, ehkä 2 miljardia ehkä negatiivinen 2000000000. 279 00:17:02,250 --> 00:17:06,720 Joten viettää joku mahdollisista arvoista, jotta voit sitoutua maailmalle 280 00:17:06,720 --> 00:17:10,089 että jos jokin menee pieleen, palaan tämän super-iso arvo. 281 00:17:10,089 --> 00:17:13,329 Mutta et halua käyttäjän kirjoittaa jotain kryptisiä kuten "2, 3, 4 ..." 282 00:17:13,329 --> 00:17:17,079 todella iso numero, jossa voit yleistää sen sijaan jatkuvasti. 283 00:17:17,079 --> 00:17:19,380 Siis todella, jos olisit on anaali viime viikkoina, 284 00:17:19,380 --> 00:17:23,800 milloin soitat GetInt, sinun olisi pitänyt tarkistaa kanssa jos ehto. 285 00:17:23,800 --> 00:17:27,109 Onko käyttäjä tyyppiä INT_MAX, tai tarkemmin sanottuna, 286 00:17:27,109 --> 00:17:29,900 teki GetInt paluu INT_MAX? Koska jos se ei, 287 00:17:29,900 --> 00:17:35,140 että oikeastaan ​​tarkoittaa, että he eivät kirjoita sitä, jokin meni pieleen tässä asiassa. 288 00:17:35,140 --> 00:17:38,970 Joten tämä on mitä yleisesti kutsutaan "Sentinel"-arvo, joka tarkoittaa vain sitä erityistä. 289 00:17:38,970 --> 00:17:41,020 >> No, nyt käännöksen. C-tiedostoja. 290 00:17:41,020 --> 00:17:44,500 C tiedosto on olemassa laitetta jonkin aikaa, 291 00:17:44,500 --> 00:17:47,540 ja itse asiassa, laite on se käännetty sinulle 292 00:17:47,540 --> 00:17:49,720 tuohon juttu kutsuimme "kohdekoodilla" 293 00:17:49,720 --> 00:17:52,940 mutta se vain ei ole väliä missä se on, koska järjestelmä tietää, 294 00:17:52,940 --> 00:17:54,780 Tässä tapauksessa, jos se on, laite. 295 00:17:54,780 --> 00:18:00,620 Mutta katsotaanpa selaa nyt GetInt, ja miten GetInt on työskennellyt koko ajan. 296 00:18:00,620 --> 00:18:02,380 Joten tässä meillä on samankaltaisia ​​kommentteja ennen. 297 00:18:02,380 --> 00:18:04,930 Saanen suurentaa vain koodin osan, 298 00:18:04,930 --> 00:18:07,410 ja mitä meillä on GetInt on seuraava. 299 00:18:07,410 --> 00:18:12,770 Siinä ei tulo ja se palauttaa int, while (true), joten meillä on tahallinen loputon silmukka 300 00:18:12,770 --> 00:18:16,560 mutta oletettavasti me eroon tästä jotenkin, tai palaa tämän. 301 00:18:16,560 --> 00:18:19,890 Joten miten tämä toimii. No, me näyttävät käyttävän GetString 302 00:18:19,890 --> 00:18:22,550 Tässä ensimmäinen rivi silmukan sisällä, 166. 303 00:18:22,550 --> 00:18:25,320 Tämä on nyt hyvä käytäntö, koska, missä olosuhteissa 304 00:18:25,320 --> 00:18:30,820 voisi GetString palata tähän erityiseen avainsanan, NULL? 305 00:18:30,820 --> 00:18:38,460 Jos jokin menee pieleen. Mikä voisi mennä pieleen, kun soitat jotain GetString? 306 00:18:38,460 --> 00:18:42,550 Niin? [Student vastaus, käsittämätön] >> Joo. Joten ehkä malloc epäonnistuu. 307 00:18:42,550 --> 00:18:45,310 Jossain alla huppu GetString kutsuu malloc, 308 00:18:45,310 --> 00:18:48,210 joka varaa muistia, jonka avulla tietokone tallentaa 309 00:18:48,210 --> 00:18:50,950 kaikki merkkejä käyttäjä tyypit tulee näppäimistö. 310 00:18:50,950 --> 00:18:53,270 Ja olettaa käyttäjän oli paljon vapaa-aikaa 311 00:18:53,270 --> 00:18:56,470 ja kirjoitetaan enemmän, esimerkiksi yli 2000000000 merkkiä. 312 00:18:56,470 --> 00:18:59,600 Enemmän merkkejä kuin tietokoneessa on jopa RAM. 313 00:18:59,600 --> 00:19:02,350 No, GetString on pystyttävä merkiksi siitä, että teille, 314 00:19:02,350 --> 00:19:05,650 vaikka tämä on super, super harvinaista kulma tapauksessa. 315 00:19:05,650 --> 00:19:08,490 Se on jotenkin kyettävä käsittelemään sitä, ja niin GetString, 316 00:19:08,490 --> 00:19:11,850 jos menemme takaisin ja lukea sen dokumentointi, ei itse asiassa palauttavat NULL. 317 00:19:11,850 --> 00:19:16,150 Nyt jos GetString epäonnistuu palauttamalla NULL, GetInt on menossa epäonnistua 318 00:19:16,150 --> 00:19:19,370 palauttamalla INT_MAX, kuten sentinel. 319 00:19:19,370 --> 00:19:22,650 Nämä ovat vain ihmisen yleissopimukset. Ainoa tapa tietäisit näin on 320 00:19:22,650 --> 00:19:24,840 on lukemalla dokumentaation. 321 00:19:24,840 --> 00:19:28,200 Joten selaa missä int on todella GotInt. 322 00:19:28,200 --> 00:19:34,220 >> Joten jos selaa hieman pidemmälle, linjassa 170 meillä kommentin yläpuolella näitä rivejä. 323 00:19:34,220 --> 00:19:38,470 Niinpä me julistamme, vuonna 172, int n ja nieriää c ja sitten tämä uusi toiminto 324 00:19:38,470 --> 00:19:41,870 jonka jotkut teistä ovat törmänneet aiemmin, mutta sscanf. 325 00:19:41,870 --> 00:19:44,190 Tämä tarkoittaa merkkijonoa skannauksen F. 326 00:19:44,190 --> 00:19:48,580 Toisin sanoen, anna minulle merkkijono, ja aion tarkistaa sen palaset kiinnostavia tietoja. 327 00:19:48,580 --> 00:19:53,820 Joten mitä se tarkoittaa? No, oletetaan, että minä kirjoita, kirjaimellisesti, 1 2 3 on näppäimistö, 328 00:19:53,820 --> 00:19:59,730 ja paina sitten Enter. Mikä on tietotyyppi 1 2 3 kun palauttamat GetString? 329 00:19:59,730 --> 00:20:05,010 Se on tietysti merkkijono, eikö? Sain merkkijonon, joten 1 2 3 on todella "1 2 3" 330 00:20:05,010 --> 00:20:07,260 kanssa \ 0 lopussa se. Tämä ei ole int. 331 00:20:07,260 --> 00:20:10,420 Se ei ole numero. Se näyttää useita, mutta se ei ole oikeastaan. 332 00:20:10,420 --> 00:20:14,680 Joten mitä GetInt pitää tehdä? Se on skannata, että merkkijono vasemmalta oikealle, 333 00:20:14,680 --> 00:20:19,010 1 2 3 \ 0, ja jotenkin muuntaa sen todellinen kokonaisluku. 334 00:20:19,010 --> 00:20:21,010 Nyt voit selvittää, miten tehdä tämä. 335 00:20:21,010 --> 00:20:24,240 Jos muistelen PSET 2, sinulla luultavasti sai vähän mukava 336 00:20:24,240 --> 00:20:26,810 Caesarin tai vigenere joten voit toistaa yli merkkijono, 337 00:20:26,810 --> 00:20:29,800 voit muuntaa merkkiä ja ints kanssa poimia. Tuo paljon työtä. 338 00:20:29,800 --> 00:20:32,800 Miksi ei kutsua toimivat kuten sscanf joka tekee sen puolestasi? 339 00:20:32,800 --> 00:20:37,520 Joten sscanf odottaa argumentti, tässä tapauksessa kutsutaan linja, joka on merkkijono. 340 00:20:37,520 --> 00:20:41,310 Voit sitten määrittää, lainausmerkeissä, hyvin samankaltainen printf, 341 00:20:41,310 --> 00:20:44,960 mitä odottaa tältä merkkijono? 342 00:20:44,960 --> 00:20:52,980 Sanon tässä on, odotan nähdä desimaaliluvun ja ehkä luonne. 343 00:20:52,980 --> 00:20:54,990 Ja näemme, miksi näin on vain hetken. 344 00:20:54,990 --> 00:20:58,440 Osoittautuu, että tämä merkintätapa on nyt muistuttaa tavaraa 345 00:20:58,440 --> 00:21:00,840 aloimme puhua hieman yli viikko sitten. 346 00:21:00,840 --> 00:21:05,430 >> Mikä on & n ja & C tekee meille täällä? [Student vastauksia, käsittämättömällä] 347 00:21:05,430 --> 00:21:07,610 >> Joo. Se antaa minulle osoite n ja osoite c. 348 00:21:07,610 --> 00:21:10,440 Nyt, miksi se on tärkeää? No, te tiedätte, että toimii C 349 00:21:10,440 --> 00:21:13,440 voit aina palauttaa arvon tai lainkaan arvoa. 350 00:21:13,440 --> 00:21:16,630 Voit palauttaa int, string, float, char riippumatta. 351 00:21:16,630 --> 00:21:21,150 Tai voit palata mitätön, mutta voit vain palauttaa 1 asia maksimaalisesti. 352 00:21:21,150 --> 00:21:26,100 Mutta tässä me haluamme sscanf palauttaa minulle ehkä int, desimaaliluku, 353 00:21:26,100 --> 00:21:29,240 ja myös char, ja selitän miksi nieriää hetki. 354 00:21:29,240 --> 00:21:34,250 Joten te tehokkaasti haluat f palata 2 asiaa, se vain ei ole mahdollista C. 355 00:21:34,250 --> 00:21:38,460 Joten voit kiertää ajamalla 2 osoitteet, 356 00:21:38,460 --> 00:21:43,710 sillä heti kun ojentaa toiminto 2 osoitteita, mitä tämä tehtävä tehdä niille? 357 00:21:43,710 --> 00:21:49,880 Se voi kirjoittaa osoitteet. Voit käyttää * toiminnan ja "mene sinne" jokaiseen näistä osoitteista. 358 00:21:49,880 --> 00:21:54,320 Se on tavallaan tämän takaoven mekanismi, mutta hyvin yleistä muuttamalla muuttujien arvot 359 00:21:54,320 --> 00:21:58,020 enemmän kuin vain 1 paikka, tässä tapauksessa 2. 360 00:21:58,020 --> 00:22:04,590 Nyt, huomaa olen tarkistanut == TO1 ja palaavat sitten n jos ei, itse asiassa, arvioi todellista. 361 00:22:04,590 --> 00:22:09,340 Joten mitä on tekeillä? No, teknisesti, kaikki me todella haluamme tapahtua GetInt on tässä. 362 00:22:09,340 --> 00:22:12,340 Haluamme jäsentää, niin sanoakseni, haluamme lukea merkkijono 363 00:22:12,340 --> 00:22:16,210 "1 2 3", ja jos se näyttää siellä useita siellä, 364 00:22:16,210 --> 00:22:21,360 mitä me kerromme sscanf tehdä, on laittaa se numero, 1 2 3, tässä muuttuja n minulle. 365 00:22:21,360 --> 00:22:26,060 Miksi sitten minun tarvinnut tämän lisäksi? 366 00:22:26,060 --> 00:22:33,750 Mikä on rooli myös sanoa, sscanf, saatat myös saada merkin tänne. 367 00:22:33,750 --> 00:22:36,890 [Student ottaen käsittämätön] >> Ei - desimaalipilkun voisi toimia. 368 00:22:36,890 --> 00:22:40,650 Katsotaanpa katsonut, että mietti hetken. Mitä muuta? 369 00:22:40,650 --> 00:22:42,570 [Student, käsittämätön] >> Niin, hyvä ajatus, se voisi olla NULL merkki. 370 00:22:42,570 --> 00:22:44,970 Se on oikeastaan ​​ole tässä tapauksessa. Niin? [Student, käsittämättömällä] 371 00:22:44,970 --> 00:22:47,100 >> >> ASCII. Tai haluan yleistää entisestään. 372 00:22:47,100 --> 00:22:49,670 % C on vain virheiden tarkkailun. 373 00:22:49,670 --> 00:22:52,510 Me emme halua olla merkki numeron jälkeen, 374 00:22:52,510 --> 00:22:54,980 mutta mitä tämä antaa minulle mahdollisuuden tehdä seuraavalla: 375 00:22:54,980 --> 00:23:01,270 On käynyt ilmi, että sscanf lisäksi tallentamiseksi arvot n ja c, tässä esimerkissä täällä, 376 00:23:01,270 --> 00:23:08,170 Mitä se tekee on se palauttaa muuttujien määrä sen laittaa arvot tuumaa 377 00:23:08,170 --> 00:23:13,330 Joten jos vain kirjoitat 1 2 3, sitten vain% d on menossa vastaamaan 378 00:23:13,330 --> 00:23:18,830 ja vain n saa tallennetaan arvo kuin 1 2 3 eikä mitään saa laittaa C; 379 00:23:18,830 --> 00:23:20,870 c pysyy roskat arvo, niin sanoakseni. 380 00:23:20,870 --> 00:23:23,550 Garbage koska se ei ole koskaan alustettu jotain arvoa. 381 00:23:23,550 --> 00:23:29,390 Niin siinä tapauksessa, sscanf palauttaa 1, koska olen asutuilla yksi niistä osoittimia, 382 00:23:29,390 --> 00:23:33,650 jolloin, hienoa. Olen int, joten vapauttaa linjan vapauttaa muistia 383 00:23:33,650 --> 00:23:37,150 että GetString todellisuudessa varattu, ja sitten palaan n.. 384 00:23:37,150 --> 00:23:42,210 Else, jos koskaan miettinyt minne se yrittää lausunto tulee, tulee täällä. 385 00:23:42,210 --> 00:23:45,770 Jos sitä vastoin I kirjoita 1 2 3 foo- 386 00:23:45,770 --> 00:23:48,640 vain joitakin satunnainen sekvenssi tekstiä, sscanf on menossa nähdä, 387 00:23:48,640 --> 00:23:51,500 ooh, numero, ooh, numero, ooh, numero, ooh - f. 388 00:23:51,500 --> 00:23:54,190 Ja se tulee laittaa 1 2 3 N. 389 00:23:54,190 --> 00:23:59,970 Se tulee laittaa F c, ja palata sitten 2. 390 00:23:59,970 --> 00:24:02,980 Joten meillä on vain käyttää perusmääritelmää scanf käyttäytymistä, 391 00:24:02,980 --> 00:24:06,170 hyvin yksinkertaisella tavalla - hyvin monimutkaisia ​​ensi silmäyksellä, mutta loppujen lopuksi, 392 00:24:06,170 --> 00:24:11,460 melko yksinkertainen mekanismi sanoa, onko int, ja jos niin on, että ainoa asia, löysin? 393 00:24:11,460 --> 00:24:14,950 Ja valkoinen tila tässä on tahallista. Jos luet asiakirjat sscanf, 394 00:24:14,950 --> 00:24:18,690 se kertoo teille, että jos kuuluu pala valkoista tilaa alussa tai lopussa 395 00:24:18,690 --> 00:24:24,990 sscanf liian avulla käyttäjä jostain syystä osuma VÄLINÄPPÄIN 1 2 3, ja se on laillista. 396 00:24:24,990 --> 00:24:28,310 Se ei huuda käyttäjä vain koska ne osuvat välilyöntiä alussa tai lopussa 397 00:24:28,310 --> 00:24:32,160 joka on vain hieman käyttäjäystävällinen. 398 00:24:32,160 --> 00:24:34,160 >> Kaikki kysymykset, sitten on GetInts? Niin? 399 00:24:34,160 --> 00:24:36,820 [Student kysymys, käsittämättömällä] 400 00:24:36,820 --> 00:24:40,740 >> Hyvä kysymys. Mitä jos vain kirjoittanut char, kuten F ja paina enter 401 00:24:40,740 --> 00:24:47,830 ilman koskaan kirjoittamalla 1 2 3; mitä mieltä olette käytöksen koodirivin olisi sitten? 402 00:24:47,830 --> 00:24:50,500 Joten sscanf voi kattaa sekin, koska tällöin, 403 00:24:50,500 --> 00:24:56,280 se ei tule täyttämään n tai C, se tulee sen sijaan palauttaa 0. 404 00:24:56,280 --> 00:25:01,540 Jolloin, olen myös kiinni siitä, että skenaario, koska odotusarvo haluan on 1. 405 00:25:01,540 --> 00:25:07,310 Haluan vain 1, ja vain 1 asia täytetään. Hyvä kysymys. Muut? 406 00:25:07,310 --> 00:25:09,610 >> Selvä, joten älkäämme käydä läpi kaikki toiminnot tänne, 407 00:25:09,610 --> 00:25:11,820 mutta joka näyttää olevan, ehkä, jäljellä oleva 408 00:25:11,820 --> 00:25:14,530 on GetString koska näyttää siltä, ​​että GetFloat, GetInt, 409 00:25:14,530 --> 00:25:19,490 GetDouble, GetLongLong kaikki punt paljon niiden toiminnallisuutta GetString. 410 00:25:19,490 --> 00:25:22,860 Joten katsomaan kuinka hän on toteutettu täällä. 411 00:25:22,860 --> 00:25:27,040 Tämä näyttää hieman monimutkainen, mutta se käyttää samoja perusteita 412 00:25:27,040 --> 00:25:29,680 että aloimme puhua viime viikolla. Joten GetString, 413 00:25:29,680 --> 00:25:32,670 jossa ei väitettä kohti void tänne, 414 00:25:32,670 --> 00:25:37,110 ja se palauttaa merkkijonon, niin minä julistan merkkijono kutsutaan puskurin. 415 00:25:37,110 --> 00:25:39,670 En todellakaan tiedä, mitä se tulee käyttää, mutta me näemme. 416 00:25:39,670 --> 00:25:42,950 Näyttää kapasiteetti on oletuksena, 0, ole aivan varma mihin tämä on menossa. 417 00:25:42,950 --> 00:25:44,920 Etkö ole varma mitä n tulee käyttää vielä. 418 00:25:44,920 --> 00:25:47,860 Mutta nyt se alkaa hieman mielenkiintoisemman, joten linja 243, 419 00:25:47,860 --> 00:25:51,760 me julistamme int c, tämä on eräänlainen tyhmä yksityiskohta. 420 00:25:51,760 --> 00:25:58,080 Char on 8 bittiä, ja 8 bittiä voi tallentaa miten monta eri arvoja? 421 00:25:58,080 --> 00:26:03,310 256. Ongelma on, jos haluat olla 256 eri ASCII-merkkiä, 422 00:26:03,310 --> 00:26:06,210 joista, jos luulet takaisin, ja tämä ei ole jotain muistaa. 423 00:26:06,210 --> 00:26:09,100 Mutta jos muistelen että iso ASCII kaavio meillä oli viikko sitten, 424 00:26:09,100 --> 00:26:13,780 oli, että tässä tapauksessa, 128 tai 256 ASCII-merkkiä. 425 00:26:13,780 --> 00:26:16,220 Käytimme kaikki kuviot 0: n ja 1: n ylös. 426 00:26:16,220 --> 00:26:19,410 Tämä on ongelma, jos haluat pystyä havaitsemaan virhettä. 427 00:26:19,410 --> 00:26:23,290 Koska jos käytät jo 256 arvoja hahmosi, 428 00:26:23,290 --> 00:26:26,390 et ole oikeasti suunnitella tulevaisuutta, koska nyt sinulla ei ole tapa sanoa, 429 00:26:26,390 --> 00:26:29,750 "Tämä ei ole legit hahmo, tämä on noin virheellinen viesti." 430 00:26:29,750 --> 00:26:32,430 Joten mitä maailma tekee on, ne käyttävät seuraavaksi suurin arvo, 431 00:26:32,430 --> 00:26:35,790 jotain int niin että sinulla on hullu määrä bittejä, 432 00:26:35,790 --> 00:26:39,610 32 4000000000 mahdolliset arvot, jotta voit päätyä käyttämään, 433 00:26:39,610 --> 00:26:44,800 olennaisesti, 257 niistä, joista 1 on joitakin erityisiä merkitys kuin virhe. 434 00:26:44,800 --> 00:26:49,190 >> Joten miten tämä toimii. Linjassa 246, minulla on tämä iso, kun silmukka 435 00:26:49,190 --> 00:26:54,530 että soittaa fgetc f merkitys tiedoston, getc, ja sitten stdin. 436 00:26:54,530 --> 00:26:59,030 Paljastui, että tämä on vain tarkempi tapa sanoa "luetaan panosta näppäimistö". 437 00:26:59,030 --> 00:27:02,730 Vakiosyöttökapasiteetti tarkoittaa näppäimistö, vakiotulosteeseen tarkoittaa näytön, 438 00:27:02,730 --> 00:27:06,920 ja keskivirhe, joka nähdään vuonna PSET 4, tarkoittaa näytön, 439 00:27:06,920 --> 00:27:09,670 mutta erityinen osa näytön niin, että se ei conflated 440 00:27:09,670 --> 00:27:13,760 todellisia ulostulo todellakin tarkoitus tulostaa, mutta siitä lisää tulevaisuudessa. 441 00:27:13,760 --> 00:27:19,430 Joten fgetc tarkoittaa vain lukea yhden merkin päässä näppäimistön, ja tallentaa sen minne? 442 00:27:19,430 --> 00:27:24,000 Säilytä se C, ja tarkista sitten, joten olen vain käyttäen joitakin boolean konjunktiot täällä, 443 00:27:24,000 --> 00:27:28,430 tarkista, että se ei ole sama \ n, joten käyttäjä on enteriä. 444 00:27:28,430 --> 00:27:31,510 Haluamme lopettaa tässä vaiheessa, pää silmukan, ja haluamme myös tarkistaa 445 00:27:31,510 --> 00:27:36,170 varten erityinen vakio EOF, joka jos tiedät tai arvailla - mitä se tarkoittaa? 446 00:27:36,170 --> 00:27:39,860 End of file. Joten tämä on tavallaan järjetöntä, koska jos olen kirjoittamalla klo näppäimistön, 447 00:27:39,860 --> 00:27:41,900 siellä oikeastaan ​​mitään tiedostoa mukana tässä, 448 00:27:41,900 --> 00:27:44,330 mutta tämä on vain eräänlainen yleinen termi tarkoittamaan 449 00:27:44,330 --> 00:27:50,320 että mikään muu on peräisin ihmisen sormet. EOF. End of file. 450 00:27:50,320 --> 00:27:52,600 Sivuhuomautuksena, jos olet joskus lyönyt ohjaus D näppäimistön, 451 00:27:52,600 --> 00:27:54,680 ole, että sinulla olisi vielä, olet osuma ohjaus c. 452 00:27:54,680 --> 00:27:57,920 Mutta ohjaus d lähettää tätä erityistä vakio nimeltään EOF. 453 00:27:57,920 --> 00:28:03,100 >> Eli nyt meillä on vain muutamia dynaaminen muistin jakamista. 454 00:28:03,100 --> 00:28:06,460 Joten jos n + 1> kapasiteettia, nyt selitän n. 455 00:28:06,460 --> 00:28:09,380 n on, kuinka monta tavua on tällä hetkellä puskuriin, 456 00:28:09,380 --> 00:28:11,970 merkkijonon olet parhaillaan rakentaa käyttäjältä. 457 00:28:11,970 --> 00:28:16,240 Jos sinulla on enemmän merkkejä omassa puskurissa kuin sinulla kapasiteettia puskuriin, 458 00:28:16,240 --> 00:28:20,760 intuitiivisesti, mitä meidän täytyy tehdä niin on jakaa enemmän kapasiteettia. 459 00:28:20,760 --> 00:28:24,490 Aion silmäillä joitakin aritmeettinen täällä 460 00:28:24,490 --> 00:28:26,900 ja keskittyä vain tätä toimintoa täällä. 461 00:28:26,900 --> 00:28:29,170 Tiedätkö mitä malloc on, tai ainakin yleisesti tuttu. 462 00:28:29,170 --> 00:28:32,380 Ota arvaus mitä realloc tekee. [Student vastaus, käsittämättömällä] 463 00:28:32,380 --> 00:28:35,690 >> Joo. Ja se ei ole aivan lisäämällä muistia, se allokoi muistia seuraavasti: 464 00:28:35,690 --> 00:28:40,530 Jos siellä on vielä tilaa lopussa merkkijonon antaa sinulle enemmän että muistia 465 00:28:40,530 --> 00:28:43,370 kuin se alun perin antaa sinulle, niin saat että lisämuistia. 466 00:28:43,370 --> 00:28:46,640 Joten voit vain laittaa jouset hahmot takaisin takaisin takaisin takaisin. 467 00:28:46,640 --> 00:28:49,290 Mutta jos se ei ole, koska odotti liian kauan 468 00:28:49,290 --> 00:28:51,700 ja jotain random sai plopped muistiin siellä, mutta siellä on ylimääräistä 469 00:28:51,700 --> 00:28:56,480 muistin tänne, se on okei. Realloc aikoo tehdä kaiken raskaan työn puolestasi, 470 00:28:56,480 --> 00:28:58,810 siirrä merkkijono olet lukenut näin kaukana täältä, 471 00:28:58,810 --> 00:29:02,550 laittaa sen sinne, ja sitten antaa sinulle lisää kiitotien tässä vaiheessa. 472 00:29:02,550 --> 00:29:05,610 Joten aallon käden, haluan sanoa, että mitä GetString tekee 473 00:29:05,610 --> 00:29:09,540 on se alkaa pieni puskuri, ehkä 1 yhden merkin, 474 00:29:09,540 --> 00:29:12,300 ja jos käyttäjä on 2 merkkiä, GetString päätyy 475 00:29:12,300 --> 00:29:15,210 soittamalla realloc ja sanoo, "Ooh, 1 merkki ei ollut tarpeeksi. 476 00:29:15,210 --> 00:29:18,480 Anna minulle 2 merkkiä. " Sitten jos luet logiikan silmukan, 477 00:29:18,480 --> 00:29:21,070 se tulee sanoa, "Ooh, käyttäjän kirjoittanut 3 merkkiä. 478 00:29:21,070 --> 00:29:25,690 Antakaa nyt olla 2, mutta 4 merkkiä, niin anna minulle 8, niin anna minulle 16 ja 32 ". 479 00:29:25,690 --> 00:29:28,180 Se, että olen kaksinkertaistaa kapasiteetin kerta 480 00:29:28,180 --> 00:29:30,320 tarkoittaa, että puskuri ei tule kasvaa hitaasti. 481 00:29:30,320 --> 00:29:35,870 Se tulee kasvamaan erittäin nopeasti, ja mikä voisi olla hyötyä siitä? 482 00:29:35,870 --> 00:29:38,540 Miksi olen koko kaksinkertaistui puskurin, vaikka käyttäjä 483 00:29:38,540 --> 00:29:41,450 voi vain tarvita 1 ylimääräinen merkin näppäimistöllä? 484 00:29:41,450 --> 00:29:44,830 [Student vastaus, käsittämätön]. >> Mikä tuo on? 485 00:29:44,830 --> 00:29:46,750 Aivan. Sinun ei tarvitse kasvattaa sitä niin usein. 486 00:29:46,750 --> 00:29:48,870 Ja tämä on juuri sellainen - Sinä suojaus vedot täältä. 487 00:29:48,870 --> 00:29:54,150 Ajatuksena on, että et halua soittaa realloc paljon, koska se on yleensä hidasta. 488 00:29:54,150 --> 00:29:56,840 Aina kysyä käyttöjärjestelmä muistia, niin saat pian nähdä 489 00:29:56,840 --> 00:30:00,620 tulevaan ongelmaan asetettu, se yleensä kestää jonkin aikaa. 490 00:30:00,620 --> 00:30:04,980 Joten minimointi että aikaa, vaikka tuhlaat tilaa, yleensä hyvä asia. 491 00:30:04,980 --> 00:30:07,250 >> Mutta jos luemme läpi loppuosa GetString täällä, 492 00:30:07,250 --> 00:30:10,880 ja taas, ymmärtäminen jokainen rivi tässä ei ole niin tärkeää tänään. 493 00:30:10,880 --> 00:30:14,830 Mutta huomaa, että se lopulta kutsuu malloc uudelleen, ja se varaa 494 00:30:14,830 --> 00:30:16,980 täsmälleen yhtä monta tavua kuin se tarvitsee merkkijono 495 00:30:16,980 --> 00:30:21,620 ja sitten heittää pois soittamalla ilmaiseksi, liian iso puskuri, 496 00:30:21,620 --> 00:30:23,510 jos se todellakin voittamaan kaksinkertaistui liian monta kertaa. 497 00:30:23,510 --> 00:30:25,970 Lyhyesti sanottuna, se miten GetString on työskennellyt koko ajan. 498 00:30:25,970 --> 00:30:30,100 Kaikki se luetaan yksi merkki kerrallaan uudestaan ​​ja uudestaan ​​ja uudestaan 499 00:30:30,100 --> 00:30:37,930 ja joka kerta se tarvitsee lisämuistia, se kysyy käyttöjärjestelmä sen soittamalla realloc. 500 00:30:37,930 --> 00:30:41,660 Kysyttävää? Selvä. 501 00:30:41,660 --> 00:30:45,220 >> Hyökkäys. Nyt ymmärrämme osoittimia, tai ainakin 502 00:30:45,220 --> 00:30:47,560 ovat yhä paremmin perillä osoittimia, 503 00:30:47,560 --> 00:30:50,020 Tarkastellaan miten koko maailma alkaa romahtaa 504 00:30:50,020 --> 00:30:53,160 jos et ole aivan puolustautua kontradiktorisessa käyttäjiä, 505 00:30:53,160 --> 00:30:55,180 ihmiset, jotka yrittävät murtautua järjestelmään. 506 00:30:55,180 --> 00:31:00,260 Ihmiset, jotka yrittävät varastaa ohjelmiston kiertämällä jotkut rekisteröintikoodin 507 00:31:00,260 --> 00:31:02,150 että niillä muutoin olisi kirjoittaa tuumaa 508 00:31:02,150 --> 00:31:04,860 Katsokaa tätä esimerkkiä täällä, mikä on vain C-koodia 509 00:31:04,860 --> 00:31:07,920 että on toiminto tärkein alareunassa, joka kutsuu toiminnon foo 510 00:31:07,920 --> 00:31:12,100 ja mitä se ohimennen foo? [Opiskelija] yksittäisenä argumenttina. 511 00:31:12,100 --> 00:31:15,660 >> Yksi argumentti. Joten argv [1], mikä tarkoittaa, että ensimmäinen sana käyttäjä kirjoittaa 512 00:31:15,660 --> 00:31:19,150 komentoriviltä jälkeen a.out tai mikä ohjelma on nimeltään. 513 00:31:19,150 --> 00:31:24,920 Joten foo, huipulla, vie char *, mutta char * on juuri mitä? 514 00:31:24,920 --> 00:31:28,860 String. Ei mitään uutta täällä, ja että merkkijono on mielivaltaisesti kutsutaan bar. 515 00:31:28,860 --> 00:31:36,090 Tällä rivillä täällä, char c [12], eräänlainen semi-teknisiä Englanti, mitä tämä rivi tekee? 516 00:31:36,090 --> 00:31:40,640 Array -? Merkkiä. Anna minulle joukko 12 merkkiä. 517 00:31:40,640 --> 00:31:44,970 Joten voisimme kutsua tätä puskuria. Se on teknisesti kutsutaan C, mutta puskuri ohjelmointi 518 00:31:44,970 --> 00:31:47,890 tarkoittaa vain nippu tilaa, voit laittaa kamaa sisään 519 00:31:47,890 --> 00:31:49,940 >> Sitten lopuksi, memcpy, olemme ei käytetty ennen. 520 00:31:49,940 --> 00:31:52,380 Mutta voit varmaan arvata mitä se tekee. Se kopioi muistia. 521 00:31:52,380 --> 00:31:58,790 Mitä se tekee? No, se ilmeisesti kopioi baari, sen panos, tulee c, 522 00:31:58,790 --> 00:32:03,420 mutta vain pituuden baarissa. 523 00:32:03,420 --> 00:32:07,440 Mutta on bugi täällä. 524 00:32:07,440 --> 00:32:14,500 Okei, joten teknisesti meidän pitäisi todella tehdä strlen (bar) x sizeof (char), se on oikein. 525 00:32:14,500 --> 00:32:17,920 Mutta pahimmassa tapauksessa tässä oletetaan, että that's - niin, okei. 526 00:32:17,920 --> 00:32:23,760 Sitten on 2 bugeja. Joten sizeof (char), okei, tehkäämme tästä hieman laajemmin. 527 00:32:23,760 --> 00:32:28,860 Joten nyt on vielä bugi, joka on mitä? 528 00:32:28,860 --> 00:32:31,630 [Student vastaus, käsittämätön] >> Tarkista mitä? Okei, joten meidän pitäisi tarkistaa 529 00:32:31,630 --> 00:32:35,010 for null, koska pahoja asioita tapahtuu, kun osoitin on NULL, 530 00:32:35,010 --> 00:32:38,490 Koska saatat päätyä sinne, ja sinun ei pitäisi koskaan aio NULL 531 00:32:38,490 --> 00:32:40,890 by dereferencing se * operaattorin. 532 00:32:40,890 --> 00:32:45,250 Joten se on hyvä, ja mitä muuta me teemme? Loogisesti siellä virhe tässäkin. 533 00:32:45,250 --> 00:32:47,650 [Student vastaus, käsittämättömällä] 534 00:32:47,650 --> 00:32:51,340 >> Joten tarkista jos argc ≥ 2? 535 00:32:51,340 --> 00:32:54,130 Okei, joten siellä on 3 bugeja tästä ohjelmasta. 536 00:32:54,130 --> 00:33:00,080 Emme tarkistaa, jos käyttäjä itse kirjoittanut mitään argv [1], hyvä. 537 00:33:00,080 --> 00:33:02,240 Joten mitä kolmas bugi? Niin? 538 00:33:02,240 --> 00:33:04,420 [Student vastaus, käsittämätön] >> Hyvä. 539 00:33:04,420 --> 00:33:09,590 Niinpä pyysimme yhden skenaarion. Meillä epäsuorasti tarkastetaan älä kopioi enemmän muistia 540 00:33:09,590 --> 00:33:12,800 kuin ylittäisi pituus baarissa. 541 00:33:12,800 --> 00:33:15,720 Joten jos merkkijono käyttäjä kirjoitettu on 10 merkkiä pitkä, 542 00:33:15,720 --> 00:33:18,260 Tämä sanoo, "vain kopioi 10 merkkiä." 543 00:33:18,260 --> 00:33:21,140 Ja se on okei, mutta entä jos käyttäjä kirjoitettu sana kehotteeseen 544 00:33:21,140 --> 00:33:29,360 kuin 20 merkkiä sana, tämä on, sanoo kopio 20 merkkiä siitä baarin, mitä? 545 00:33:29,360 --> 00:33:32,840 C, joka tunnetaan myös meidän puskuri, mikä tarkoittaa juuri kirjoitti dataa 546 00:33:32,840 --> 00:33:35,950 8 tavu paikkoihin että et omista, 547 00:33:35,950 --> 00:33:38,320 ja et omista niitä siinä mielessä, että et koskaan varattu niille. 548 00:33:38,320 --> 00:33:41,190 Joten tämä on mitä yleisesti kutsutaan puskurin ylivuoto hyökkäys, 549 00:33:41,190 --> 00:33:46,650 tai puskurin ylivuoto hyökkäys, ja se on hyökkäys siinä mielessä, että jos käyttäjä 550 00:33:46,650 --> 00:33:50,650 tai ohjelma, joka soittaa omia toiminto tekee tämän vihamielisesti, 551 00:33:50,650 --> 00:33:53,780 Mitä oikeastaan ​​tapahtuu seuraavaksi voisi olla melko huono. 552 00:33:53,780 --> 00:33:55,690 >> Katsotaanpa katsomaan tätä kuvaa täällä. 553 00:33:55,690 --> 00:33:59,070 Tämä kuva edustaa pinon muistin. 554 00:33:59,070 --> 00:34:01,050 Ja muistaa, että joka kerta kun soittaa toiminto, 555 00:34:01,050 --> 00:34:04,520 saat tästä vähän kehyksessä pino ja sitten toinen ja sitten toinen ja sitten toinen. 556 00:34:04,520 --> 00:34:07,250 Ja toistaiseksi olemme vain eräänlainen otetun poiskaan suorakulmioina 557 00:34:07,250 --> 00:34:09,380 joko siellä aluksella tai ruudulla täällä. 558 00:34:09,380 --> 00:34:12,219 Mutta jos me zoomata yksi niistä suorakulmioita, 559 00:34:12,219 --> 00:34:16,460 Kun soitat funktion foo, käy ilmi, että siellä on enemmän pinoon 560 00:34:16,460 --> 00:34:18,739 sisällä, että kehyksen ja että suorakulmion 561 00:34:18,739 --> 00:34:23,370 kuin vain x ja y ja a ja b, niin kuin emme puhu swap. 562 00:34:23,370 --> 00:34:25,949 On käynyt ilmi, että jotkut alemman tason yksityiskohdat, 563 00:34:25,949 --> 00:34:27,780 joukossa palautusosoite. 564 00:34:27,780 --> 00:34:33,020 Joten se kääntyy pois, kun tärkeimmät kutsuu foo, tärkein on ilmoitettava foo 565 00:34:33,020 --> 00:34:36,760 mitä tärkein osoite on tietokoneen muistiin. 566 00:34:36,760 --> 00:34:40,659 Koska muuten, niin pian kuin foo tehdään suorittamalla, kuten tässä tapauksessa tässä, 567 00:34:40,659 --> 00:34:43,790 Kun saavutat tämän lähellä kihara ahdin lopussa foo- 568 00:34:43,790 --> 00:34:48,860 Miten hitossa se foo tietää, missä valvonta ohjelman on tarkoitus mennä? 569 00:34:48,860 --> 00:34:52,460 On käynyt ilmi, että vastaus tähän kysymykseen on, että punainen suorakulmion täällä. 570 00:34:52,460 --> 00:34:56,130 Tämä merkitsee osoittimen, ja se on jopa tietokone tallentaa väliaikaisesti 571 00:34:56,130 --> 00:35:00,250 on ns pino osoite tärkeimmistä niin, että niin pian kuin foo on tehty täytäntöönpanovaltion, 572 00:35:00,250 --> 00:35:04,110 tietokone tietää missä ja mitä linjaa pääasiassa palata. 573 00:35:04,110 --> 00:35:06,900 Tallennetaan kehyksen osoitin liittyy samalla tämän. 574 00:35:06,900 --> 00:35:09,620 Char * bar täällä edustaa mitä? 575 00:35:09,620 --> 00:35:14,740 No, nyt tämä sininen segmentti tässä foo runkoon, mikä on baari? 576 00:35:14,740 --> 00:35:18,300 Okei, joten baari on vain argumentti foo toimintoa. 577 00:35:18,300 --> 00:35:20,720 >> Joten nyt olemme takaisin tutun kuvan. 578 00:35:20,720 --> 00:35:22,960 On enemmän tavaraa ja lisää häiriötekijöitä ruudulla 579 00:35:22,960 --> 00:35:27,490 mutta tämä vaaleansininen segmentti on mitä olemme piirtämällä taululle jotain kuten swap. 580 00:35:27,490 --> 00:35:31,890 Se on kehys foo ja ainoa asia siinä nyt on baari, 581 00:35:31,890 --> 00:35:34,630 joka on tämän parametrin. 582 00:35:34,630 --> 00:35:39,840 Mutta mitä muuta pitäisi olla pinon mukaan tämä koodi täällä? 583 00:35:39,840 --> 00:35:44,280 Char c [12]. Joten meidän pitäisi myös nähdä 12 ruutua muistia, 584 00:35:44,280 --> 00:35:46,260 kohdennettu muuttuja nimeltä c. 585 00:35:46,260 --> 00:35:48,340 Ja todellakin meillä on, että ruudulla. 586 00:35:48,340 --> 00:35:51,650 Hyvin alkuun on c [0] ja sitten kirjoittanut tämän kaavion 587 00:35:51,650 --> 00:35:55,130 ei vaivaudu piirustus kaikki neliöt mutta todellakin 12 siellä 588 00:35:55,130 --> 00:36:00,120 sillä jos tarkastellaan oikeassa alakulmassa, c [11], jos lasketaan 0, on 12 tällaista tavua. 589 00:36:00,120 --> 00:36:06,190 Mutta tässä on ongelma: mihin suuntaan c kasvaa? 590 00:36:06,190 --> 00:36:10,390 Järjestä ylhäältä alas, eikö? Jos se alkaa ylhäältä ja kasvaa pohjaan, 591 00:36:10,390 --> 00:36:13,480 ei näytä siltä että lähdimme itse paljon kiitotien täällä ollenkaan. 592 00:36:13,480 --> 00:36:15,320 Olemme tavallaan maalannut itsemme nurkkaan, 593 00:36:15,320 --> 00:36:20,210 ja että c [11] on oikeassa vastaan ​​bar, mikä on oikea vastaan ​​pinokehys osoitin, 594 00:36:20,210 --> 00:36:23,800 joka on oikeassa suhteessa palautusosoite; siellä ole enää tilaa. 595 00:36:23,800 --> 00:36:26,100 Joten mitä vaikutuksia, niin, jos mokaat, 596 00:36:26,100 --> 00:36:30,460 ja yrität lukea 20 tavua 12-tavun puskuri? 597 00:36:30,460 --> 00:36:33,460 Missä ovat ne 8 lisätavujen menossa? 598 00:36:33,460 --> 00:36:36,370 Sisällä kaikki muu, joista osa on erittäin tärkeää. 599 00:36:36,370 --> 00:36:40,480 Ja tärkeintä, mahdollisesti, on punainen laatikko siellä palautusosoite. 600 00:36:40,480 --> 00:36:44,720 Koska Oletetaan, että olet joko vahingossa tai adversarially 601 00:36:44,720 --> 00:36:48,040 korvata ne 4 tavua, että osoitin osoite, 602 00:36:48,040 --> 00:36:53,190 ei vain roskat, mutta numero sattuu edustamaan todellisia osoite muistiin? 603 00:36:53,190 --> 00:36:55,930 Mikä implicaiton loogisesti? 604 00:36:55,930 --> 00:36:59,080 [Student vastauksia, käsittämätön] >> Aivan. Kun foo palauttaa 605 00:36:59,080 --> 00:37:03,560 ja osumia että kihara ahdin, ohjelma tulee etenemään ei palata päävalikkoon, 606 00:37:03,560 --> 00:37:08,320 se tulee palauttaa mihin tahansa osoitteeseen on se punainen laatikko. 607 00:37:08,320 --> 00:37:11,560 >> Nyt, kun on kyse kiertää ohjelmiston rekisteröinnin 608 00:37:11,560 --> 00:37:14,400 Mikä on osoite, joka on palautetaan on funktion 609 00:37:14,400 --> 00:37:18,820 että normaalisti saa kutsutaan, kun olet maksanut ohjelmiston ja syötetään rekisteröintikoodi? 610 00:37:18,820 --> 00:37:23,160 Voisit tavallaan temppu tietokoneen aio täällä, mutta sen sijaan menee täällä. 611 00:37:23,160 --> 00:37:27,950 Tai, jos olet todella fiksu, vastustaja voi todella kirjoittaa on näppäimistö, 612 00:37:27,950 --> 00:37:32,500 Esimerkiksi, ei todellista sanaa, ei 20 merkkiä, mutta kai hän 613 00:37:32,500 --> 00:37:36,200 tyyppejä jotkut merkit edustavat koodia? 614 00:37:36,200 --> 00:37:38,860 Ja se ei tule olemaan C-koodia, se tulee olemaan merkit 615 00:37:38,860 --> 00:37:42,920 jotka edustavat binääri kone koodit, 0: n ja 1: n. 616 00:37:42,920 --> 00:37:46,740 Mutta oletetaan he tarpeeksi fiksu tehdä, että jotenkin liitä GetString nopeasti 617 00:37:46,740 --> 00:37:49,460 jotain, joka on oleellisesti käännetty koodi, 618 00:37:49,460 --> 00:37:56,900 ja viimeinen 4 tavua ylikirjoittaa että palautusosoite, ja mihin osoitteeseen tuo panos tehdä? 619 00:37:56,900 --> 00:38:01,860 Se tallentaa tämän punainen suorakulmio osoite ensimmäisen tavun puskuria. 620 00:38:01,860 --> 00:38:04,270 Joten sinun täytyy olla todella fiksu, ja tämä on paljon ja erehdyksen 621 00:38:04,270 --> 00:38:08,500 huono ihmiset siellä, mutta jos voit selvittää, kuinka suuri tämä puskuri on, 622 00:38:08,500 --> 00:38:12,170 sellainen, että viime tavua tulo että annat ohjelman 623 00:38:12,170 --> 00:38:15,970 sattuvat olemaan vastaava osoite alkamisen puskuria, 624 00:38:15,970 --> 00:38:22,270 voit tehdä tämän. Jos sanomme, normaalisti, hei, ja \ 0, sitähän päätyy puskuriin. 625 00:38:22,270 --> 00:38:27,860 Mutta jos olemme viisaampi, ja täytämme sen puskuri mitä me yleisesti kutsua hyökkäys koodia, 626 00:38:27,860 --> 00:38:31,920 ,,,: Attack, hyökkäys, hyökkäys, hyökkäys, jossa tämä on vain jotain, joka tekee jotain pahaa. 627 00:38:31,920 --> 00:38:35,190 No, mitä tapahtuu, jos olet todella fiksu, saatat tehdä: 628 00:38:35,190 --> 00:38:41,740 Punaisella laatikko tässä järjestyksessä numerot: 80, CO, 35, 08. 629 00:38:41,740 --> 00:38:44,890 Huomaa, että vastaava määrä, joka on täällä. 630 00:38:44,890 --> 00:38:47,280 Se on käänteisessä järjestyksessä, mutta siitä lisää joku toinen kerta. 631 00:38:47,280 --> 00:38:51,430 Huomaa, että tämä paluu osoite on tarkoituksellisesti muutettu 632 00:38:51,430 --> 00:38:54,970 on yhtä osoitetta tänne, ei osoitetta tärkein. 633 00:38:54,970 --> 00:39:00,170 Joten jos pahis on super älykäs, hän aikoo sisällyttää kyseisen hyökkäyksen koodi 634 00:39:00,170 --> 00:39:02,890 jotain, "Poista kaikki käyttäjän tiedostot." 635 00:39:02,890 --> 00:39:06,320 Tai "Kopioi salasanat" tai "Luo käyttäjätili voin kirjautua." 636 00:39:06,320 --> 00:39:10,130 Yhtään mitään, ja tämä on sekä vaaran ja voiman C. 637 00:39:10,130 --> 00:39:12,900 Koska sinulla on pääsy muistiin kautta osoittimia 638 00:39:12,900 --> 00:39:15,950 Voit siis kirjoittaa mitä haluat osaksi tietokoneen muistiin. 639 00:39:15,950 --> 00:39:19,290 Voit tehdä tietokoneella tehdä mitä haluat yksinkertaisesti 640 00:39:19,290 --> 00:39:22,780 Ottaa se hyppää noin omassa muistia. 641 00:39:22,780 --> 00:39:27,230 Ja niin, tähän päivään, niin monia ohjelmia ja niin monia sivustoja, jotka ovat vaarassa 642 00:39:27,230 --> 00:39:29,730 pohjimmiltaan ihmiset hyödyntää tätä. 643 00:39:29,730 --> 00:39:32,510 Ja tämä saattaa tuntua erittäin hienostunut hyökkäys, 644 00:39:32,510 --> 00:39:34,220 mutta se ei aina käynnisty niin. 645 00:39:34,220 --> 00:39:36,770 >> Tosiasia on, että mitä pahaa ihmiset yleensä tehdä, on, 646 00:39:36,770 --> 00:39:41,470 onko se ohjelma komentoriviltä tai GUI ohjelmaa tai verkkosivuilla, 647 00:39:41,470 --> 00:39:43,290 on juuri alkaa tarjota hölynpölyä. 648 00:39:43,290 --> 00:39:46,940 Kirjoitat todella iso sana hakukenttään ja paina enter 649 00:39:46,940 --> 00:39:49,030 ja odotat nähdä, jos sivusto kaatuu. 650 00:39:49,030 --> 00:39:53,270 Tai voit odottaa, jos ohjelma näkyy jonkin virheilmoituksen. 651 00:39:53,270 --> 00:39:55,480 Koska jos olet onnekas, koska pahis, 652 00:39:55,480 --> 00:39:59,610 ja annat joitakin hullu panos että kaatuu ohjelma 653 00:39:59,610 --> 00:40:02,280 tämä tarkoittaa ohjelmoija ei ennakoida huono käytös 654 00:40:02,280 --> 00:40:05,420 mikä tarkoittaa, että voit luultavasti tarpeeksi vaivaa, 655 00:40:05,420 --> 00:40:09,870 tarpeeksi ja erehdyksen, selvittää, miten käydä tarkemmin hyökkäys. 656 00:40:09,870 --> 00:40:15,900 Niin paljon osa turvallisuutta ei ole vain välttää nämä hyökkäykset kokonaan, mutta havaittuaan ne 657 00:40:15,900 --> 00:40:20,250 ja itse katsot lokit ja nähdä, mitä hulluja tulot ovat ihmisiä kirjoitetaan sivuston. 658 00:40:20,250 --> 00:40:26,040 Mitä hakutermejä on ihmisiä kirjoitetaan sivuston toiveita täynnä joidenkin puskuri? 659 00:40:26,040 --> 00:40:28,900 Ja tämä kaikki pohjimmiltaan yksinkertainen perusasiat mitä array, 660 00:40:28,900 --> 00:40:32,510 ja mitä se tarkoittaa kohdentaa ja käyttää muistia? 661 00:40:32,510 --> 00:40:34,920 Ja siihen liittyen myös tämä. 662 00:40:34,920 --> 00:40:37,520 >> Joten vain vilkaista sisällä kiintolevyn jälleen. 663 00:40:37,520 --> 00:40:40,190 Joten te muistamme viikko tai kaksi sitten, että kun vedät tiedostoja 664 00:40:40,190 --> 00:40:45,470 teidän roskakoriin tai roskakoriin, mitä tapahtuu? 665 00:40:45,470 --> 00:40:47,850 [Student] Nothing. >> Joo, mitään. Lopulta jos suoritat matala 666 00:40:47,850 --> 00:40:51,370 levytilaa, Windows tai Mac OS alkaa poistaa tiedostoja sinulle. 667 00:40:51,370 --> 00:40:53,670 Mutta jos vedät jotain siellä, niin se ei ole ollenkaan turvallista. 668 00:40:53,670 --> 00:40:56,550 Kaikki roomate, ystävä tai perheenjäsen tarvitsee vain kaksoisnapsauta, ja voila. 669 00:40:56,550 --> 00:40:59,720 Siellä on kaikki summittainen tiedostot yritit poistaa. 670 00:40:59,720 --> 00:41:02,840 Niinpä useimmat meistä ainakin tietää, että olet oikealla painikkeella tai Ctrl-osoittamalla 671 00:41:02,840 --> 00:41:05,320 ja tyhjennä roskakori, tai jotain. 672 00:41:05,320 --> 00:41:07,900 Mutta silloinkin, että ei oikein tepsiä. 673 00:41:07,900 --> 00:41:11,340 Sillä mitä tapahtuu, kun olet tiedoston kiintolevylle 674 00:41:11,340 --> 00:41:14,590 joka edustaa jotkut Word-asiakirjan tai joidenkin JPEG? 675 00:41:14,590 --> 00:41:18,820 Ja tämä edustaa kiintolevyn, ja sanokaamme tämä suikale täällä edustaa tiedoston, 676 00:41:18,820 --> 00:41:21,640 ja se koostuu koko joukko 0: n ja 1: n. 677 00:41:21,640 --> 00:41:25,470 Mitä tapahtuu, kun ei vain vedä että tiedoston roskakoriin tai roskakoriin, 678 00:41:25,470 --> 00:41:30,390 mutta myös tyhjentää sen? 679 00:41:30,390 --> 00:41:32,820 Tavallaan mitään. Se ei ole mitään nyt. 680 00:41:32,820 --> 00:41:37,630 Nyt se on vain mitään, koska vähän jotain tapahtuu muodossa tämän taulukon. 681 00:41:37,630 --> 00:41:41,170 Joten siellä jonkinlainen tietokantaan tai taulukkoon sisällä tietokoneen muistiin 682 00:41:41,170 --> 00:41:44,470 että pohjimmiltaan on 1 sarake tiedostoja nimiä, 683 00:41:44,470 --> 00:41:50,550 ja 1 sarakkeen tiedoston sijainti, jossa tämä voi olla paikalla 123, vain satunnaisluku. 684 00:41:50,550 --> 00:41:58,270 Joten meillä voisi olla jotain x.jpg, ja sijainti 123. 685 00:41:58,270 --> 00:42:02,870 Ja mitä tapahtuu sitten, kun tyhjentää roskakorin? 686 00:42:02,870 --> 00:42:06,720 Se menee pois. Mutta mitä ei mene pois on 0: n ja 1: n. 687 00:42:06,720 --> 00:42:09,690 >> Joten mitä sitten yhteys PSET 4? 688 00:42:09,690 --> 00:42:13,460 No, PSET 4, vain koska olemme vahingossa poistetaan 689 00:42:13,460 --> 00:42:15,890 compact flash-kortti, joka oli kaikki nämä kuvat, 690 00:42:15,890 --> 00:42:18,710 tai vain koska se huono tuuri tuli vioittunut, 691 00:42:18,710 --> 00:42:21,170 ei tarkoita, että 0: n ja 1: n ei vielä ole. 692 00:42:21,170 --> 00:42:23,920 Ehkä muutama heistä menetetään, koska jotain todella vioittunut 693 00:42:23,920 --> 00:42:26,530 siinä mielessä, että jotkin 0: n tuli 1: n ja 1: n tuli 0: n. 694 00:42:26,530 --> 00:42:30,460 Pahoja asioita voi tapahtua, koska viallisista ohjelmistojen tai viallinen laitteisto. 695 00:42:30,460 --> 00:42:33,510 Mutta monet näistä bittiä, ehkä jopa 100% heistä ovat edelleen olemassa, 696 00:42:33,510 --> 00:42:38,330 se on vain, että tietokone tai kamera ei tiedä, missä JPEG 1 alkoi 697 00:42:38,330 --> 00:42:41,660 ja jos JPEG 2 aloitettu, mutta jos, ohjelmoija, 698 00:42:41,660 --> 00:42:45,800 tietää, ja vähän taju, kun nämä JPEG ovat tai mitä he näyttävät, 699 00:42:45,800 --> 00:42:49,570 voit analysoida 0: n ja 1: n ja sanoa, "Ooh. JPEG. Ooh, JPEG. " 700 00:42:49,570 --> 00:42:52,830 Voit kirjoittaa ohjelman lähinnä vain varten tai kun silmukka 701 00:42:52,830 --> 00:42:56,100 että toipuu jokainen näistä tiedostoista. 702 00:42:56,100 --> 00:42:59,360 Joten oppitunnin jälkeen, on aloittaa "turvallisesti" pyyhkien tiedostot 703 00:42:59,360 --> 00:43:01,720 Jos haluat välttää kokonaan. Kyllä? 704 00:43:01,720 --> 00:43:06,940 [Student kysymys, käsittämättömällä] 705 00:43:06,940 --> 00:43:11,150 >> On enemmän muistia kuin teit ennen - 706 00:43:11,150 --> 00:43:14,790 Oh! Hyvä kysymys. Miksi sitten tyhjennyksen jälkeen roskakoriin, 707 00:43:14,790 --> 00:43:18,300 Onko tietokoneesi kertoa, että sinulla on enemmän tilaa kuin teit ennen? 708 00:43:18,300 --> 00:43:22,450 Pähkinänkuoressa, koska se valehtelee. Teknisesti, sinulla on enemmän tilaa. 709 00:43:22,450 --> 00:43:26,720 Koska nyt olet sanonut, voit laittaa muita juttuja, jos tiedoston kerran oli, 710 00:43:26,720 --> 00:43:28,930 mutta se ei tarkoita bitit ovat menossa pois, 711 00:43:28,930 --> 00:43:33,070 ja se ei tarkoita bitit ovat muuttaneet kaikki 0: n, esimerkiksi turvallisuussyistä. 712 00:43:33,070 --> 00:43:37,520 Sitä vastoin, jos "turvallisesti" poistaa tiedostoja, tai fyysisesti tuhota laite, 713 00:43:37,520 --> 00:43:40,810 todella on ainoa tapa, joskus noin että. 714 00:43:40,810 --> 00:43:45,300 Joten miksi emme jätä tähän osittain pelottava note, ja näemme sinut maanantaina. 715 00:43:45,300 --> 00:43:52,810 CS50.TV