1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> David J. Malan So dit blyk dat kopiëring van 'n string is nie naastenby so 3 00:00:03,130 --> 00:00:05,750 eenvoudig soos die kopiëring van 'n primitiewe, soos 'n int of 'n float. 4 00:00:05,750 --> 00:00:09,190 Na al, onder die enjinkap 'n string is 'n reeks karakters. 5 00:00:09,190 --> 00:00:13,130 So kopiëring van 'n string, dus moet behels die kopiëring van die hele reeks 6 00:00:13,130 --> 00:00:14,240 karakters. 7 00:00:14,240 --> 00:00:17,470 >> Kom ons draai ons aandag terug na daardie laaste implementering en rip uit hierdie 8 00:00:17,470 --> 00:00:21,470 lyn, string t gelyk is, wat Dit was duidelik dat nie voldoende nie. 9 00:00:21,470 --> 00:00:24,440 Kom ons vervang dit met 'n lyn wat lyk, in plaas daarvan, soos hierdie. 10 00:00:24,440 --> 00:00:34,020 String t kry malloc tou lengte van s plus 1 keer die grootte van 'n kar. 11 00:00:34,020 --> 00:00:36,320 >> Nou is daar 'n aanhaling 'n bietjie gaan in hierdie lyn van kode. 12 00:00:36,320 --> 00:00:39,330 Eerstens, malloc, kort vir geheue toekenning, en die 13 00:00:39,330 --> 00:00:40,700 funksie nie net dat. 14 00:00:40,700 --> 00:00:44,740 Gegewe 'n heelgetal, dit gee aan julle die adres van 'n stuk van die geheue van 15 00:00:44,740 --> 00:00:45,960 dat baie grepe. 16 00:00:45,960 --> 00:00:50,090 Intussen het die string lengte van s plus 1 bedoel om aan te dui dat ons as 17 00:00:50,090 --> 00:00:54,690 baie grepe as s reeds ', insluitend sy null Terminator, die 18 00:00:54,690 --> 00:00:57,050 backslash 0 aan die einde van 'n string. 19 00:00:57,050 --> 00:01:00,170 >> Intussen het ek nie noodwendig onthou hoe groot 'n kar is nie, selfs 20 00:01:00,170 --> 00:01:04,340 al op die meeste stelsels is dit net 1 byte, so ek sal die grootte van die kar roep 21 00:01:04,340 --> 00:01:08,210 uit te vind hoe groot dinamiese 'n individuele karakter is. 22 00:01:08,210 --> 00:01:12,550 Sodra hulle met mekaar vermenigvuldig, kry ek weer die totale aantal grepe wat ek nodig het. 23 00:01:12,550 --> 00:01:14,680 >> Maar wat as malloc versuim om te terugkeer om die geheue wat ons nodig het? 24 00:01:14,680 --> 00:01:16,730 Ek wil die beste te kyk vir wat soos volg. 25 00:01:16,730 --> 00:01:23,330 As t gelyk aan nul, dan is ek eerste gaan gratis s, die geheue terug te kry deur 26 00:01:23,330 --> 00:01:27,120 string, en dan gaan ek terug 1, fout aan te dui. 27 00:01:27,120 --> 00:01:30,360 >> Maar as alles goed gaan, ek gaan om voort te gaan 'n vier lus om te gebruik en Itereer 28 00:01:30,360 --> 00:01:31,110 soos volg. 29 00:01:31,110 --> 00:01:36,000 Vir int i kry 0, n gelyke die string lengte van s. 30 00:01:36,000 --> 00:01:40,350 Ek gaan om dit te so lank as wat ek is nie minder as of gelyk aan n so dat ek 31 00:01:40,350 --> 00:01:44,460 Itereer op deur en met die nul eindig karakter in s. 32 00:01:44,460 --> 00:01:47,450 >> En op elke iterasie, ek is gaan ek te inkrementeer. 33 00:01:47,450 --> 00:01:52,496 Intussen, binnekant van die loop, kopieer s se i-de karakter in t se i-de 34 00:01:52,496 --> 00:01:59,310 plek, is dit voldoende t te doen bracket ek kry s bracket i. 41 00:01:59,320 --> 00:02:02,750 >> Kom ons nou ook red, saamstel, en hardloop hierdie nuwe program. 42 00:02:02,750 --> 00:02:06,690 Maak afskrif 1 dot streep kopie 1. 43 00:02:06,690 --> 00:02:09,460 En ek sal iets sê soos hallo in alle klein. 44 00:02:09,460 --> 00:02:12,280 En gelukkig, hierdie keer my oorspronklike bly onveranderd. 45 00:02:12,280 --> 00:02:13,660 hallo in alle klein. 46 00:02:13,660 --> 00:02:15,540 Maar die kopie is, inderdaad, gekapitaliseer. 47 00:02:37,120 --> 00:02:38,963