1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> David J. Malan: Tako ispada da je kopiranje niz nije gotovo kao 3 00:00:03,130 --> 00:00:05,750 jednostavan kao kopiranje primitivni, poput int ili float. 4 00:00:05,750 --> 00:00:09,190 Uostalom, ispod haube string je niz znakova. 5 00:00:09,190 --> 00:00:13,130 Dakle kopiranje niz, dakle, mora uključuje kopiranje taj cijeli niz 6 00:00:13,130 --> 00:00:14,240 likovi. 7 00:00:14,240 --> 00:00:17,470 >> Okrenimo našu pozornost na to Posljednji provedba i potegnuti to 8 00:00:17,470 --> 00:00:21,470 linija, string t jednaka S, koji očito nije bilo dovoljno. 9 00:00:21,470 --> 00:00:24,440 Idemo ga zamijeniti s linije koja izgleda, umjesto da, kao što je ovaj. 10 00:00:24,440 --> 00:00:34,020 String t dobiva malloc duljine niza S plus 1 puta veličine znakom. 11 00:00:34,020 --> 00:00:36,320 >> Sada postoji citat malo ide na u ovom linija koda. 12 00:00:36,320 --> 00:00:39,330 Prvo, malloc, kratko za memoriju raspodjela te 13 00:00:39,330 --> 00:00:40,700 funkcija ne samo to. 14 00:00:40,700 --> 00:00:44,740 S obzirom na broj, vraća se na vas adresa komad spomen 15 00:00:44,740 --> 00:00:45,960 da mnogi bajtova. 16 00:00:45,960 --> 00:00:50,090 U međuvremenu, duljine od s. plus 1 je značilo da ukazuju na to da želimo što 17 00:00:50,090 --> 00:00:54,690 mnogi bajtova što je već zauzima, uključujući njegovu null terminator, 18 00:00:54,690 --> 00:00:57,050 backslash 0 na kraju niza. 19 00:00:57,050 --> 00:01:00,170 >> U međuvremenu, mi nužno ne sjećam koliko je velika char je, čak i 20 00:01:00,170 --> 00:01:04,340 iako je na većini sustava je jednostavno 1 Bajt, pa ću nazvati veličinu crnila na 21 00:01:04,340 --> 00:01:08,210 shvatiti dinamički koliko je velika Pojedinac je lik. 22 00:01:08,210 --> 00:01:12,550 Nakon množi zajedno, ja se vratim Ukupan broj bajtova koji mi treba. 23 00:01:12,550 --> 00:01:14,680 >> No, što ako malloc ne vratiti sjećanje mi je potrebno? 24 00:01:14,680 --> 00:01:16,730 Ja bih najbolje provjeriti na sljedeći način. 25 00:01:16,730 --> 00:01:23,330 Ako je t jednako nula, tada sam prvi put idem slobodnih s, memorija vraća get 26 00:01:23,330 --> 00:01:27,120 string, a zatim ću povratak 1, da označi pogrešku. 27 00:01:27,120 --> 00:01:30,360 >> Ali, ako je sve u redu, ja ću nastaviti koristiti četiri petlju i ponoviti 28 00:01:30,360 --> 00:01:31,110 kako slijedi. 29 00:01:31,110 --> 00:01:36,000 Za int ja dobiti 0, n = duljine od s.. 30 00:01:36,000 --> 00:01:40,350 Ja ću to učiniti dok sam se manji od ili jednak N, tako da sam 31 00:01:40,350 --> 00:01:44,460 ponoviti kroz te uključujući null završni lik u sekundi. 32 00:01:44,460 --> 00:01:47,450 >> I na svakoj iteraciji, ja sam ide ja prirast. 33 00:01:47,450 --> 00:01:52,496 U međuvremenu, unutar ove petlje, kopirati s je i-ti lik u T I-og 34 00:01:52,496 --> 00:01:59,310 mjesto, dovoljno je napraviti t Nosač i dobiva e nosač sam. 41 00:01:59,320 --> 00:02:02,750 >> Idemo sada spasiti, sastaviti i pokrenuti ovaj novi program. 42 00:02:02,750 --> 00:02:06,690 Napravite kopija 1 točka kose crte primjerak jedne. 43 00:02:06,690 --> 00:02:09,460 I ja ću reći nešto poput: Pozdrav u svim malim slovima. 44 00:02:09,460 --> 00:02:12,280 I srećom, ovaj put my Izvorni ostaje nepromijenjena. 45 00:02:12,280 --> 00:02:13,660 Pozdrav u svim malim slovima. 46 00:02:13,660 --> 00:02:15,540 No, primjerak je, doista, kapitaliziraju. 47 00:02:37,120 --> 00:02:38,963