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