DAVID J. MALAN: Så det viser seg at kopierer en string er ikke på langt nær så enkelt som å kopiere en primitiv, som en int eller en flåte. Tross alt, under panseret en streng er en sekvens tegn. Så kopierer en streng, derfor må bære å kopiere at hele sekvensen av tegn. La oss vende oppmerksomheten tilbake til det siste implementering og rive ut dette linje, string t er lik s, som åpenbart ikke var tilstrekkelig. La oss erstatte den med en linje som ser, i stedet, som dette. String t får malloc av hyssinglengde på s pluss 1 ganger størrelsen av en røye. Nå er det sitatet litt skjer på i denne linjen med kode. Først malloc, kort for minne allokering, og Funksjonen gjør nettopp det. Gitt et heltall, returnerer den til deg adressen til en del av minnet at mange bytes. I mellomtiden, den strenglengde s pluss en er ment for å vise at vi vil ha som mange bytes som er allerede okkuperer, inkludert sin avsluttende null, den backslash 0 på slutten av en streng. I mellomtiden, vet jeg ikke nødvendigvis huske hvor stor røye er, selv men på de fleste systemer er det rett og slett en byte, så jeg skal ringe størrelse på røye til finne ut dynamisk hvor stort en individuell karakter er. Når multiplisert sammen, jeg får tilbake totalt antall byte som jeg trenger. Men hva hvis malloc ikke klarer å returnere minne vi trenger? Jeg ville sjekke best for det som følger. Hvis t er lik null, så jeg først kommer til gratis s, minnet returneres av get streng, og da kommer jeg til å tilbake 1, for å betegne feil. Men hvis alt er bra, kommer jeg til å fortsette å benytte en fire-løkke og iterere som følger. For int jeg får 0, n er lik strengen lengden på s. Jeg kommer til å gjøre dette så lenge jeg er mindre enn eller lik n, så at jeg iterere opp gjennom og herunder null avslutnings karakter i s. Og på hver iterasjon, er jeg kommer til å øke i. I mellomtiden, på innsiden av denne sløyfen, kopiere s i-ende tegn til t i-th plassering, er det nok å gjøre t brakett jeg får s brakett jeg. Jeg hadde beste legge til én ekstra linje til min kode. Spesielt fordi jeg bruker nå malloc, ber om minne, er det min ansvar for å frigjøre det minne når jeg er ferdig med det, akkurat som vi bør frigjøre minne som er gitt til oss av get streng. Så helt på slutten av dette programmet, er jeg kommer til å legge en ekstra linje å frigjøre t før retur 0 for å indikere suksess. La oss nå lagre, sammenstille, og kjøre dette nye programmet. Gjør kopien en prikk slash kopi ett. Og jeg vil si noe sånt hallo i små bokstaver. Og heldigvis, denne gangen min opprinnelige forblir uendret. hallo i små bokstaver. Men kopien er, faktisk, kapitalisert.