>> DAVID J. Malan: Tak to dopadá, že kopírovanie reťazec nie je zďaleka tak
jednoduché ako kopírovanie primitívne, ako int alebo float.
Koniec koncov, pod kapotou reťazec je postupnosť znakov.
Takže kopírovanie reťazec, preto musí zahŕňa kopírovanie, že celá sekvencia
znaky.
>> Poďme obrátiť svoju pozornosť späť k tomu posledná realizácia a vytrhnúť to
linka, reťazec t rovná s, čo zjavne nebolo dostatočné.
Poďme ho nahradiť riadok, ktorý vyzerá, namiesto toho, ako je to.
String t dostane malloc dĺžky struny S plus 1 krát veľkosť char.
>> Teraz je tu citát trochu deje Na tejto riadku kódu.
Po prvé, malloc, krátky pre pamäť alokácie, a
funkcie robí len to.
Vzhľadom k tomu, celé číslo, vráti sa vám na adresa kus pamäti
že veľa bytov.
Medzitým, dĺžka reťazca s plus 1 je potrebné uviesť, že chceme ako
veľa bajtov ako s už zaberá, vrátane terminátora null,
lomítko 0 na konci reťazca.
>> Medzitým som sa nemusí nutne pamätať ako veľký znak je, aj
aj keď na väčšine systémov je to proste 1 byte, tak zavolám veľkosť char na
zistiť, dynamicky, ako veľký individuálny charakter je.
Akonáhle sa násobí spolu, ja sa vrátim celkový počet bajtov, ktoré potrebujem.
>> Ale čo keď malloc zlyhá vrátiť pamäť, ktorú potrebujeme?
Ja by som najlepšie skontrolovať, že takto.
Je-li t sa rovná null, potom som prvýkrát bude na voľné s, pamäť vrátená get
reťazec, a potom budem vráti 1, znamenať chybu.
>> Ale ak je všetko v poriadku, budem pokračovať použiť štyri slučky a iteráciu
nasledujúcim spôsobom.
Pre int i dostať 0, n rovná dĺžka reťazca s
Budem to robiť tak dlho, ako som ich menšia než alebo sa rovná n tak, že som
iterácii nahor a vrátane null ukončovacie znak v s.
>> A v každej iterácii, som bude zvyšovať i
Medzitým, vnútri tejto slučky, skopírujte s je i-tý znak do T i-teho
umiestnenie, postačí na to t držiak aj dostane y držiak i
>> Poďme teraz uložiť, skompilovať, a spustiť tento nový program.
Urobiť kópie 1 bodka lomítko kópiu 1.
A ja poviem niečo ako: ahoj vo všetkých malými písmenami.
A našťastie, tentoraz my pôvodné zostáva bezo zmeny.
ahoj vo všetkých malými písmenami.
Ale kópie sú naozaj veľké.