DAVID J. Malan: Dus het blijkt dat het kopiëren van een string is lang niet zo eenvoudig als het kopiëren van een primitieve, zoals een int of float. Immers, onder de motorkap een string is een reeks tekens. Zo kopieert een string derhalve moet gaan om het overschrijven dat hele reeks van karakters. Laten we onze aandacht weer op dat laatste implementatie en rip uit dit lijn, koord t gelijk s, die was duidelijk niet voldoende. Laten we vervangen door een lijn die ziet er, in plaats daarvan, zoals deze. String t krijgt malloc van de string lengte van s plus 1 keer de grootte van een char. Nu is er citaat een beetje gaan in deze regel code. Ten eerste, malloc, kort voor het geheugen toewijzing, en de functie doet precies dat. Gegeven een integer, keert het terug naar de adres van een stuk van het geheugen van dat veel bytes. Ondertussen, de lengte van de string van s plus 1 is bedoeld om aan te geven dat we willen als bytes als s al bezet, inclusief de null-terminator, de backslash 0 aan het einde van een koord. Ondertussen weet ik niet per se herinneren hoe groot een char is, zelfs hoewel op de meeste systemen is het gewoon 1 byte, dus ik zal de grootte van char bellen om erachter te komen hoe groot dynamisch een individueel karakter. Eenmaal bij elkaar vermenigvuldigd, krijg ik weer de totale aantal bytes dat ik nodig heb. Maar wat als malloc nalaat het geheugen moeten we terugkeren? Ik zou best vraagt ​​dat als volgt. Als t gelijk is aan nul, dan ga ik eerst naar om gratis s, het geheugen teruggegeven door get snaar, en dan ga ik naar return 1, om fout betekenen. Maar als het goed is, ga ik verder een vier lus gebruiken en herhalen als volgt. Voor int krijg ik 0, n gelijken de string lengte van s. Ik ga dit doen zolang ik is minder dan of gelijk aan n, zodat ik herhalen omhoog door en met de null afsluitende karakter in s. En op elke iteratie, ik ben naar i verhogen. Ondertussen, de binnenkant van deze lus, kopiëren s i-ste karakter in t i-th locatie, volstaat het om t te doen beugel i krijgt s beugel i. Ik zou best nog een extra lijn naar mijn code. In het bijzonder, want ik ben nu met behulp van malloc, vragen om het geheugen, het is mijn verantwoordelijkheid vrij te maken dat het geheugen als ik klaar ben met het, net als wij moet vrijmaken geheugen dat aan ons gegeven door get string. Dus aan het eind van dit programma, ik ben gaan naar een extra regel toe te voegen om t te bevrijden alvorens terug te keren 0 tot succes geven. Laten we nu nog redden, compileren, en run dit nieuwe programma. Maak kopie 1 dot slash kopie 1. En ik zal iets zeggen als hello in alle kleine letters. En gelukkig, deze keer mijn origineel blijft ongewijzigd. hello in alle kleine letters. Maar de kopie is, inderdaad, gekapitaliseerd.