DAVID J. MALAN: Så det visar sig att kopiera en sträng är inte alls lika enkelt som att kopiera en primitiv, som en int eller float. När allt under huven en sträng är en sekvens tecken. Så kopierar en sträng, därför måste involverar kopiera hela den sekvens av tecken. Låt oss vända vår uppmärksamhet tillbaka till den förra genomförande och slita ut detta linje, sträng t är lika med s, vilket klart inte var tillräcklig. Låt oss byta ut den mot en linje som ser, i stället, som den här. String t får malloc av stränglängd s plus 1 gånger storleken på en röding. Nu finns det citat lite går på denna rad kod. Först, malloc, kort för minne fördelning, och Funktionen gör just det. Givet ett heltal, återgår den till dig adressen för en bit av minnet av att många bytes. Samtidigt stränglängd s plus 1 är tänkt att visa att vi vill ha som många bytes som ar redan upptar, inklusive dess null terminator, den snedstreck 0 vid slutet av en sträng. Samtidigt tror jag inte nödvändigtvis ihåg hur stor en röding är, till och med även om de flesta system är det helt enkelt en byte, så jag ska ringa storlek röding till räkna ut dynamiskt hur stor särprägel är. När multipliceras ihop, jag får tillbaka den Totalt antal byte som jag behöver. Men vad händer om malloc inte tillbaka minnet som vi behöver? Jag skulle bäst kontrollera det på följande sätt. Om t är lika med noll, då jag först gå till fria s, minnet återvände från get sträng, och sedan ska jag tillbaka 1, för att beteckna fel. Men om allt är bra, jag kommer att fortsätta att använda en fyra slinga och iterera enligt följande. För int jag får 0, n jämlikar stränglängd s. Jag ska göra det så länge som jag är mindre än eller lika med n så att jag iterera upp genom och med null avslutande tecken i talet. Och på varje iteration, jag är kommer att öka i.. Samtidigt, inne i denna slinga, kopiera s s i: te tecknet i t s i: te plats, räcker det att göra t Bracket I får s Bracket I. Jag skulle bäst lägga ytterligare linje till min kod. Speciellt eftersom jag nu använder malloc, ber om minnet, det är min ansvar för att frigöra det minne När jag är klar med det, precis som vi bör frigöra minne som är fått av få sträng. Så i slutet av det här programmet, jag är kommer att lägga till en extra rad att frigöra t innan han återvände 0 för att indikera framgång. Låt oss nu spara, kompilera, och kör detta nya program. Gör kopia 1 dot snedstreck exemplar 1. Och jag ska säga något som hej i gemener. Och tack och lov, denna gång min originalet är oförändrad. hej i gemener. Men kopian är faktiskt aktiveras.