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 Ja by som najlepšie pridať jeden ďalší linka na mojom kódu. Najmä preto, že som teraz používa malloc, žiadať o pamäti, je to moja zodpovednosť, aby sa uvoľnili, že pamäť keď som urobil s ním, rovnako ako my by malo byť uvoľnenie pamäti, že je to ktorý nám bol daný get reťazca. Takže na samom konci tohto programu, som pridáme jeden ďalší riadok oslobodiť t pred návratom 0 znamená úspech. 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é.