>> David J. Malan So dit blyk dat kopiëring van 'n string is nie naastenby so
eenvoudig soos die kopiëring van 'n primitiewe, soos 'n int of 'n float.
Na al, onder die enjinkap 'n string is 'n reeks karakters.
So kopiëring van 'n string, dus moet behels die kopiëring van die hele reeks
karakters.
>> Kom ons draai ons aandag terug na daardie laaste implementering en rip uit hierdie
lyn, string t gelyk is, wat Dit was duidelik dat nie voldoende nie.
Kom ons vervang dit met 'n lyn wat lyk, in plaas daarvan, soos hierdie.
String t kry malloc tou lengte van s plus 1 keer die grootte van 'n kar.
>> Nou is daar 'n aanhaling 'n bietjie gaan in hierdie lyn van kode.
Eerstens, malloc, kort vir geheue toekenning, en die
funksie nie net dat.
Gegewe 'n heelgetal, dit gee aan julle die adres van 'n stuk van die geheue van
dat baie grepe.
Intussen het die string lengte van s plus 1 bedoel om aan te dui dat ons as
baie grepe as s reeds ', insluitend sy null Terminator, die
backslash 0 aan die einde van 'n string.
>> Intussen het ek nie noodwendig onthou hoe groot 'n kar is nie, selfs
al op die meeste stelsels is dit net 1 byte, so ek sal die grootte van die kar roep
uit te vind hoe groot dinamiese 'n individuele karakter is.
Sodra hulle met mekaar vermenigvuldig, kry ek weer die totale aantal grepe wat ek nodig het.
>> Maar wat as malloc versuim om te terugkeer om die geheue wat ons nodig het?
Ek wil die beste te kyk vir wat soos volg.
As t gelyk aan nul, dan is ek eerste gaan gratis s, die geheue terug te kry deur
string, en dan gaan ek terug 1, fout aan te dui.
>> Maar as alles goed gaan, ek gaan om voort te gaan 'n vier lus om te gebruik en Itereer
soos volg.
Vir int i kry 0, n gelyke die string lengte van s.
Ek gaan om dit te so lank as wat ek is nie minder as of gelyk aan n so dat ek
Itereer op deur en met die nul eindig karakter in s.
>> En op elke iterasie, ek is gaan ek te inkrementeer.
Intussen, binnekant van die loop, kopieer s se i-de karakter in t se i-de
plek, is dit voldoende t te doen bracket ek kry s bracket i.
>> Kom ons nou ook red, saamstel, en hardloop hierdie nuwe program.
Maak afskrif 1 dot streep kopie 1.
En ek sal iets sê soos hallo in alle klein.
En gelukkig, hierdie keer my oorspronklike bly onveranderd.
hallo in alle klein.
Maar die kopie is, inderdaad, gekapitaliseer.