David J. MALAN: Deci, se dovedește că copierea unui șir nu este aproape la fel de simplu ca copierea unui primitiv, ca un întreg sau un float. La urma urmei, sub capota un șir este o secvență de caractere. Deci, copierea un șir de caractere, prin urmare, trebuie să implica copierea că întreaga secvență a caractere. Să ne îndreptăm atenția înapoi la care ultima punere în aplicare și rupe această linie, șir t este egal cu s, ceea ce în mod clar nu a fost suficientă. Să-l înlocuiască cu o linie care arată, în schimb, ca aceasta. Șir t devine malloc de lungime șir de S Plus 1 ori mai mare de un char. Acum există citat un pic merge în această linie de cod. În primul rând, malloc, pe termen scurt de memorie alocare, și Funcția nu doar asta. Având în vedere un întreg, se întoarce la tine adresa de o bucată de memorie de că mulți bytes. Între timp, lungimea șirului de s, plus o este menit să indice că vrem ca de multe bytes ca s ocupă deja, inclusiv secvența sa terminală nul, backslash 0 la sfârșitul unui șir. Între timp, nu-mi amintesc în mod necesar cât de mare este un char, chiar deși pe majoritatea sistemelor este pur și simplu o octet, așa că voi suna dimensiune de caracter la dau seama dinamic cât de mare un caracter individual este. După ce înmulțit împreună, mă întorc numărul total de bytes de care am nevoie. Dar ce se întâmplă dacă malloc nu reveni memoria avem nevoie? Mi-ar verifica cel mai bine pentru că, după cum urmează. Dacă t este egal cu zero, atunci mă duc întâi pentru gratuit, memoria întors de get șir, și apoi am de gând să întoarcă 1, pentru a semnifica eroare. Dar dacă totul este bine, am de gând să procedeze de a utiliza un patru buclă și repeta după cum urmează. Pentru int i obține 0, n este egal cu lungimea șir de s. Am de gând să facă acest lucru, atât timp cât i se mai mic sau egal cu n, astfel încât să repeta în sus prin și inclusiv caracter de terminare nul în s.. Și pe fiecare iterație, eu sunt O să i incrementa. Între timp, în interiorul de această buclă, copiați s lui i-lea caracter în t lui i-lea locație, este suficient să se facă t suport i se s suport i. Aș adăuga cel mai bun unul suplimentar linie la codul meu. În special, pentru că eu sunt acum, folosind malloc, cerând pentru memorie, este meu responsabilitatea de a elibera acea memorie cand am terminat cu ea, la fel ca noi ar trebui să fie eliberarea de memorie care este ne-a dat de șir GET. Deci, la sfârșitul acestui program, sunt va adăuga o linie suplimentară pentru a elibera t înainte de a reveni 0 pentru a indica succes. Să acum salva, compila, și rula acest nou program. Face copie 1 punct slash copie 1. Și voi spune ceva de genul salut în toate litere mici. Și din fericire, de data aceasta mea original rămâne neschimbată. salut în toate litere mici. Dar copia este, într-adevăr, capitalizate.