1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Pra, rezulton se kopjimi një varg nuk është gati si 3 00:00:03,130 --> 00:00:05,750 thjeshtë si një kopjim primitive, si një int ose një noton. 4 00:00:05,750 --> 00:00:09,190 Në fund të fundit, nën kapuç një varg është një karaktere rend. 5 00:00:09,190 --> 00:00:13,130 Pra kopjimi një varg, për këtë arsye, duhet të përfshijë kopjimi se tërë rend të 6 00:00:13,130 --> 00:00:14,240 karaktere. 7 00:00:14,240 --> 00:00:17,470 >> Le të kthejmë vëmendjen tonë përsëri në atë Zbatimi fundit dhe shkul kjo 8 00:00:17,470 --> 00:00:21,470 line, string t barabartë s, e cila në mënyrë të qartë nuk ishte e mjaftueshme. 9 00:00:21,470 --> 00:00:24,440 Le të zëvendësojë atë me një linjë që duket, në vend të kësaj, si kjo. 10 00:00:24,440 --> 00:00:34,020 String t merr malloc e gjatësisë së fijes s plus 1 herë madhësinë e një char. 11 00:00:34,020 --> 00:00:36,320 >> Tani ka quote pak e shkuar më në këtë linjë të kodit. 12 00:00:36,320 --> 00:00:39,330 Së pari, malloc, të shkurtër për memorie Alokimi, dhe 13 00:00:39,330 --> 00:00:40,700 funksion e bën vetëm atë. 14 00:00:40,700 --> 00:00:44,740 Duke pasur parasysh një numër i plotë, ajo kthehet tek ju në adresa e një copë e kujtesës së 15 00:00:44,740 --> 00:00:45,960 se shumë bytes. 16 00:00:45,960 --> 00:00:50,090 Ndërkohë, gjatësia varg s plus 1 ka për qëllim për të treguar se ne duam të 17 00:00:50,090 --> 00:00:54,690 shumë bytes si s tashmë zë, duke përfshirë terminator saj null, 18 00:00:54,690 --> 00:00:57,050 backslash 0 në fund të një varg. 19 00:00:57,050 --> 00:01:00,170 >> Ndërkohë, unë nuk domosdoshmërisht mend sa i madh një char është, edhe 20 00:01:00,170 --> 00:01:04,340 edhe pse në shumicën e sistemeve është thjesht 1 byte, kështu që unë do të thërrasë madhësinë e shkrumb të 21 00:01:04,340 --> 00:01:08,210 kuptoj se sa e madhe dinamike një karakter individual është. 22 00:01:08,210 --> 00:01:12,550 Pasi shumuar së bashku, unë të kthehem Numri i përgjithshëm i bytes që kam nevojë. 23 00:01:12,550 --> 00:01:14,680 >> Por çfarë nëse malloc nuk arrin të kthimin e kujtesës kemi nevojë? 24 00:01:14,680 --> 00:01:16,730 Unë do të kontrolloni më e mirë për këtë si më poshtë. 25 00:01:16,730 --> 00:01:23,330 Nëse është e barabartë me t null, atëherë unë jam duke shkuar për herë të parë të lirë s, kujtesës kthyer nga get 26 00:01:23,330 --> 00:01:27,120 string, dhe pastaj unë do të kthehen 1, për të ditur gabim. 27 00:01:27,120 --> 00:01:30,360 >> Por nëse të gjithë është mirë, unë jam duke shkuar për të vazhduar për të përdorur një lak katër dhe iterate 28 00:01:30,360 --> 00:01:31,110 si vijon. 29 00:01:31,110 --> 00:01:36,000 Për int i merrni 0, n është e barabartë me gjatësia varg s. 30 00:01:36,000 --> 00:01:40,350 Unë jam duke shkuar për të bërë këtë për sa kohë që i është me pak se ose e barabartë me n që I 31 00:01:40,350 --> 00:01:44,460 iterate deri me dhe duke përfshirë null karakter ndërprerjen në s. 32 00:01:44,460 --> 00:01:47,450 >> Dhe në çdo përsëritje, unë jam i shkuar në rritje i. 33 00:01:47,450 --> 00:01:52,496 Ndërkohë, brenda këtij lak, kopje s së karakteri i-th në i-th T 34 00:01:52,496 --> 00:01:59,310 vend, mjafton të bëjë t simboli i merr s kllapa i. 41 00:01:59,320 --> 00:02:02,750 >> Le tani të shpëtuar, përpilojnë, dhe të drejtuar këtë program të ri. 42 00:02:02,750 --> 00:02:06,690 Bëni kopje kopje 1 dot Slash 1. 43 00:02:06,690 --> 00:02:09,460 Dhe unë do të them diçka si përshëndetje në të gjitha Fjala. 44 00:02:09,460 --> 00:02:12,280 Dhe fatmirësisht, kjo kohë e mia origjinal mbetet i pandryshuar. 45 00:02:12,280 --> 00:02:13,660 përshëndetje në të gjitha Fjala. 46 00:02:13,660 --> 00:02:15,540 Por kopje është, me të vërtetë, i kapitalizuar. 47 00:02:37,120 --> 00:02:38,963