DAVID J. Malan: Tak to dopadá, že kopírování řetězec není zdaleka tak jednoduché jako kopírování primitivní, jako int nebo float. Koneckonců, pod kapotou řetězec je posloupnost znaků. Takže kopírování řetězec, proto musí zahrnuje kopírování, že celá sekvence znaky. Pojďme obrátit svou pozornost zpět k tomu poslední realizace a vytrhnout to linka, řetězec t rovna s, což zjevně nebylo dostatečné. Pojďme jej nahradit řádek, který vypadá, místo toho, jako je to. String t dostane malloc délky struny S plus 1 krát velikost char. Teď je tu citát trochu děje Na této řádku kódu. Za prvé, malloc, krátký pro paměť alokace, a funkce dělá jen to. Vzhledem k tomu, celé číslo, vrátí se vám na adresa kus paměti že mnoho bytů. Mezitím, délka řetězce s plus 1 je třeba uvést, že chceme jako mnoho bajtů jako s již zabírá, včetně nulového ukončovacího znaku, lomítko 0 na konci řetězce. Mezitím jsem se nemusí nutně pamatovat jak velký znak je, i i když na většině systémů je to prostě 1 byte, tak zavolám velikost char na zjistit, dynamicky, jak velký individuální charakter je. Jakmile se násobí spolu, já se vrátím celkový počet bajtů, které potřebuji. Ale co když malloc selže vrátit paměť, kterou potřebujeme? Já bych nejlépe zkontrolovat, že takto. Je-li t se rovná null, pak jsem poprvé bude na volné s, paměť vrácena get řetězec, a pak budu vrátí 1, znamenat chybu. Ale pokud je vše v pořádku, budu pokračovat použít čtyři smyčky a iteraci následujícím způsobem. Pro int i dostat 0, n rovná délka řetězce s. Budu to dělat tak dlouho, jak jsem je menší než nebo se rovná n tak, že jsem iteraci vzhůru a včetně null ukončovací znak v s.. A v každé iteraci, jsem bude zvyšovat i. Mezitím, uvnitř této smyčky, zkopírujte s je i-tý znak do T i-tého umístění, postačí k tomu t držák i dostane y držák i. Já bych nejlépe přidat jeden další linka na mém kódu. Zejména proto, že jsem nyní používá malloc, žádat o paměti, je to moje odpovědnost, aby se uvolnily, že paměť když jsem udělal s ním, stejně jako my by mělo být uvolnění paměti, že je to který nám byl dán get řetězce. Takže na samém konci tohoto programu, jsem přidáme jeden další řádek osvobodit t před návratem 0 znamená úspěch. Pojďme nyní uložit, zkompilovat, a spustit tento nový program. Udělat kopie 1 tečka lomítko kopii 1. A já řeknu něco jako: ahoj ve všech malými písmeny. A naštěstí, tentokrát my původní zůstává beze změny. ahoj ve všech malými písmeny. Ale kopie jsou opravdu velké.