1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Tako se izkaže, da kopiranje niz še zdaleč ni tako 3 00:00:03,130 --> 00:00:05,750 enostavno, kot kopiranje primitivno, kot int ali float. 4 00:00:05,750 --> 00:00:09,190 Konec koncev, pod pokrovom niz je zaporedje znakov. 5 00:00:09,190 --> 00:00:13,130 Torej kopiranje niz, zato mora gre za kopiranje, da celotno zaporedje 6 00:00:13,130 --> 00:00:14,240 znake. 7 00:00:14,240 --> 00:00:17,470 >> Obrnimo našo pozornost nazaj, da zadnja izvajanje in iztrgati to 8 00:00:17,470 --> 00:00:21,470 vrstica, niz t enaka s, ki očitno ni bilo dovolj. 9 00:00:21,470 --> 00:00:24,440 Dajmo ga nadomestiti z linijo, ki Izgleda, namesto da bi, kot je ta. 10 00:00:24,440 --> 00:00:34,020 String t dobi malloc dolžine niza s in 1-krat velikosti char. 11 00:00:34,020 --> 00:00:36,320 >> Zdaj je citat malo dogaja v tej vrstici kode. 12 00:00:36,320 --> 00:00:39,330 Prvič, malloc, okrajšava za spomin dodeljevanje in 13 00:00:39,330 --> 00:00:40,700 Funkcija ne samo to. 14 00:00:40,700 --> 00:00:44,740 Glede na število, se vrne v vas, v naslov kos spomin 15 00:00:44,740 --> 00:00:45,960 da je veliko bajti. 16 00:00:45,960 --> 00:00:50,090 Medtem, dolžina niz s plus 1 je mišljeno, da pokaže, da želimo kot 17 00:00:50,090 --> 00:00:54,690 veliko zlogov, kot je že zasedeno vključno z njegovim null terminator, 18 00:00:54,690 --> 00:00:57,050 nagibnica 0 na koncu niza. 19 00:00:57,050 --> 00:01:00,170 >> Medtem, mi ni nujno, da se spomniš kako velik je znak, čeprav 20 00:01:00,170 --> 00:01:04,340 čeprav je na večini sistemov je preprosto 1 bajt, tako da bom poklical velikosti char na 21 00:01:04,340 --> 00:01:08,210 ugotovimo, dinamično, kako velik individualne narave je. 22 00:01:08,210 --> 00:01:12,550 Ko pomnoženo skupaj, pridem nazaj skupno število bajtov, ki sem jih. 23 00:01:12,550 --> 00:01:14,680 >> Toda kaj, če malloc ne vrnil spomin, ki jo potrebujemo? 24 00:01:14,680 --> 00:01:16,730 Jaz bi najbolje preveriti, da je, kot sledi. 25 00:01:16,730 --> 00:01:23,330 Če je t enak nič, potem pa sem jih prej do brezplačnih s, spomin, ki ga dobil vrnjeno 26 00:01:23,330 --> 00:01:27,120 niz, nato pa bom vrne 1, da se označi napake. 27 00:01:27,120 --> 00:01:30,360 >> Ampak, če je vse v redu, bom nadaljevati uporabiti štiri zanke in Ponovil 28 00:01:30,360 --> 00:01:31,110 takole. 29 00:01:31,110 --> 00:01:36,000 Za notr dobim 0, n enak Dolžina niz s. 30 00:01:36,000 --> 00:01:40,350 Jaz bom to storil tako dolgo, kot sem je manj kot ali enako n, tako da sem 31 00:01:40,350 --> 00:01:44,460 ponovitev skozi vključno null zaključni znak v s. 32 00:01:44,460 --> 00:01:47,450 >> In na vsaki ponovitvi, sem bo prirastek i. 33 00:01:47,450 --> 00:01:52,496 Medtem, znotraj te zanke, kopirati i je i-ti znak v T i-th 34 00:01:52,496 --> 00:01:59,310 mesto, je dovolj, da storijo t Nosilec i dobi ov nosilec i. 41 00:01:59,320 --> 00:02:02,750 >> Pojdimo zdaj rešiti, sestaviti in zagon tega novega programa. 42 00:02:02,750 --> 00:02:06,690 Naredite kopijo 1 pika slash izvod 1. 43 00:02:06,690 --> 00:02:09,460 In jaz bom rekel nekaj takega kot Pozdravljeni v vseh malimi črkami. 44 00:02:09,460 --> 00:02:12,280 In na srečo, tokrat moj Prvotni ostaja nespremenjen. 45 00:02:12,280 --> 00:02:13,660 Pozdravljeni v vseh malimi črkami. 46 00:02:13,660 --> 00:02:15,540 Ampak kopija je dejansko veliko začetnico. 47 00:02:37,120 --> 00:02:38,963