>> 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.
>> 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é.