1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. MALAN: Niin käy ilmi, että kopiointi merkkijono ei ole läheskään niin 3 00:00:03,130 --> 00:00:05,750 vain kopioida primitiivinen, kuten int tai float. 4 00:00:05,750 --> 00:00:09,190 Onhan alla huppu merkkijono on sekvenssi merkkiä. 5 00:00:09,190 --> 00:00:13,130 Joten kopiointi merkkijono, on sen vuoksi liittyy kopiointi että koko sekvenssi 6 00:00:13,130 --> 00:00:14,240 merkkiä. 7 00:00:14,240 --> 00:00:17,470 >> Katsotaanpa kääntää huomion takaisin, että viime täytäntöönpanon ja repimään tämän 8 00:00:17,470 --> 00:00:21,470 line, nuora t on s, joka selvästikään ollut riittävä. 9 00:00:21,470 --> 00:00:24,440 Katsotaanpa korvata sen linjan, että näyttää sen sijaan, kuten tämä. 10 00:00:24,440 --> 00:00:34,020 String t saa malloc merkkijonon pituuden s plus 1 kertaa koko char. 11 00:00:34,020 --> 00:00:36,320 >> Nyt on lainaus vähän menee on tämän linjan koodia. 12 00:00:36,320 --> 00:00:39,330 Ensinnäkin malloc, lyhyt muisti jakaminen, ja 13 00:00:39,330 --> 00:00:40,700 toiminto tekee juuri sen. 14 00:00:40,700 --> 00:00:44,740 Annetaan kokonaisluku, se palaa teille osoite kimpale muisti 15 00:00:44,740 --> 00:00:45,960 että monet tavua. 16 00:00:45,960 --> 00:00:50,090 Samaan aikaan merkkijonon pituus s plus 1 on tarkoitus osoittaa, että haluamme kuin 17 00:00:50,090 --> 00:00:54,690 monta tavua kuin s on jo nyt, mukaan lukien sen null terminaattori, 18 00:00:54,690 --> 00:00:57,050 kenoviivan 0 lopussa merkkijono. 19 00:00:57,050 --> 00:01:00,170 >> Samaan aikaan, en välttämättä muista, kuinka iso merkki on, vaikka 20 00:01:00,170 --> 00:01:04,340 vaikka useimmissa järjestelmissä se on yksinkertaisesti 1 tavu, joten soitan koko char 21 00:01:04,340 --> 00:01:08,210 selvittää dynaamisesti kuinka suuri yksilöllisyyttä. 22 00:01:08,210 --> 00:01:12,550 Kun kerrotaan yhdessä, palaan tavujen kokonaismäärä että tarvitsen. 23 00:01:12,550 --> 00:01:14,680 >> Mutta entä jos malloc ei palauttaa muistiin tarvitsemme? 24 00:01:14,680 --> 00:01:16,730 Olisin parasta tarkistaa, että seuraavat. 25 00:01:16,730 --> 00:01:23,330 Jos t on null, niin olen ensimmäisenä menossa vapaaseen s, muisti palautetaan get 26 00:01:23,330 --> 00:01:27,120 merkkijono, ja sitten aion palata 1, merkitsevän virhe. 27 00:01:27,120 --> 00:01:30,360 >> Mutta jos kaikki on hyvin, aion jatkaa käyttää neljän silmukan ja kerrata 28 00:01:30,360 --> 00:01:31,110 seuraavasti. 29 00:01:31,110 --> 00:01:36,000 Int saan 0, n on merkkijonon pituus s. 30 00:01:36,000 --> 00:01:40,350 Aion tehdä tätä niin kauan kuin i on pienempi tai yhtä suuri kuin n, jotta voin 31 00:01:40,350 --> 00:01:44,460 kerrata läpi ja myös null päättyvät merkki s. 32 00:01:44,460 --> 00:01:47,450 >> Ja jokaisen iteraation, olen menossa kasvattaa i. 33 00:01:47,450 --> 00:01:52,496 Samaan aikaan sisällä tämän silmukan, kopioida s: n i: nnen merkin T: n i: nnen 34 00:01:52,496 --> 00:01:59,310 sijainti, riittää tekemään t kiinnike i saa s kiinnike i. 41 00:01:59,320 --> 00:02:02,750 >> Katsotaanpa nyt tallentaa, kääntää ja suorittaa tämän uuden ohjelman. 42 00:02:02,750 --> 00:02:06,690 Tehdä kopio 1 dot slash 1 kappale. 43 00:02:06,690 --> 00:02:09,460 Ja sanon jotain Hei kaikki pieniä. 44 00:02:09,460 --> 00:02:12,280 Ja onneksi tällä kertaa minun alkuperäinen pysyy ennallaan. 45 00:02:12,280 --> 00:02:13,660 Hei kaikki pieniä. 46 00:02:13,660 --> 00:02:15,540 Mutta kopio on todellakin aktivoitu. 47 00:02:37,120 --> 00:02:38,963