1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Nii selgub, et kopeerimine string ei ole kaugeltki nii 3 00:00:03,130 --> 00:00:05,750 lihtne kopeerida primitiivne, nagu int või veepinnal. 4 00:00:05,750 --> 00:00:09,190 Lõppude all kapuuts string on järjestus tähemärki. 5 00:00:09,190 --> 00:00:13,130 Nii kopeerimine string, seega peab kaasata kopeerimise et kogu jada 6 00:00:13,130 --> 00:00:14,240 tähemärki. 7 00:00:14,240 --> 00:00:17,470 >> Keerame meie tähelepanu tagasi, et viimane rakendamise ja rippida läbi selle 8 00:00:17,470 --> 00:00:21,470 line, string t võrdub s, mis selgelt ei piisa. 9 00:00:21,470 --> 00:00:24,440 Olgem asendada see joon, mis tundub hoopis niimoodi. 10 00:00:24,440 --> 00:00:34,020 String t saab malloc stringi pikkus s pluss 1 korda suurem char. 11 00:00:34,020 --> 00:00:36,320 >> Nüüd on tsitaat natuke läheb on selles rida koodi. 12 00:00:36,320 --> 00:00:39,330 Esiteks malloc, lühike mälu eraldamine ning 13 00:00:39,330 --> 00:00:40,700 funktsioon teeb just seda. 14 00:00:40,700 --> 00:00:44,740 Arvestades täisarv, tagastab teile aadress tüki mälu 15 00:00:44,740 --> 00:00:45,960 et paljud bytes. 16 00:00:45,960 --> 00:00:50,090 Vahepeal string pikkusega s pluss 1 on mõeldud näitama, et me soovime nagu 17 00:00:50,090 --> 00:00:54,690 palju baite kui te juba kasutab, sealhulgas null terminaator 18 00:00:54,690 --> 00:00:57,050 kurakriips 0 lõpus stringi. 19 00:00:57,050 --> 00:01:00,170 >> Vahepeal ma ei pruugi mäletan kui suur char on isegi 20 00:01:00,170 --> 00:01:04,340 kuigi enamikus süsteemides see on lihtsalt 1 bait, nii et ma helistan suurus char 21 00:01:04,340 --> 00:01:08,210 nuputada dünaamiliselt kui suur eripärasuse on. 22 00:01:08,210 --> 00:01:12,550 Kui koondatakse, ma tagasi baitide koguarvu, mida ma vajan. 23 00:01:12,550 --> 00:01:14,680 >> Aga kui malloc ei tagasi mälu vajame? 24 00:01:14,680 --> 00:01:16,730 Ma parim kontrollida, et järgmine. 25 00:01:16,730 --> 00:01:23,330 Kui t võrdub null, siis ma kõigepealt lähed tasuta s, mälu tagastatud get 26 00:01:23,330 --> 00:01:27,120 string, ja siis ma lähen tagasi 1, tähistamaks viga. 27 00:01:27,120 --> 00:01:30,360 >> Aga kui kõik on hästi, ma lähen edasi minna kasutada nelja silmuse ja kinnitada, 28 00:01:30,360 --> 00:01:31,110 järgmiselt. 29 00:01:31,110 --> 00:01:36,000 Sest int i saada 0, n on string pikkusega s. 30 00:01:36,000 --> 00:01:40,350 Ma teen seda nii kaua, kui ma ei väiksem või võrdne n nii, et ma 31 00:01:40,350 --> 00:01:44,460 kinnitada, kuni läbi ja sealhulgas null lõpetavale tegelane s. 32 00:01:44,460 --> 00:01:47,450 >> Ja iga iteratsiooni, ma olen läheb juurdekasvu i. 33 00:01:47,450 --> 00:01:52,496 Vahepeal sees see silmus, kopeerida s i-nda iseloomu arvesse t i-nda 34 00:01:52,496 --> 00:01:59,310 asukohta, piisab teha t sulg i saab s sulg i. 41 00:01:59,320 --> 00:02:02,750 >> Olgem nüüd salvestada, koostada ja käivitada uus programm. 42 00:02:02,750 --> 00:02:06,690 Tee koopia 1 dot kaldkriipsuga koopia 1. 43 00:02:06,690 --> 00:02:09,460 Ja ma ütlen midagi tere kõik väiketähed. 44 00:02:09,460 --> 00:02:12,280 Ja õnneks, seekord minu originaal jääb samaks. 45 00:02:12,280 --> 00:02:13,660 tere kõik väiketähed. 46 00:02:13,660 --> 00:02:15,540 Aga koopia on tõepoolest kapitaliseeritud. 47 00:02:37,120 --> 00:02:38,963