1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Ainsi, il s'avère que la copie d'une chaîne n'est pas aussi 3 00:00:03,130 --> 00:00:05,750 simple que la copie d'un primitif, comme un int ou un float. 4 00:00:05,750 --> 00:00:09,190 Après tout, sous le capot d'une chaîne est un des caractères de la séquence. 5 00:00:09,190 --> 00:00:13,130 Donc, la copie d'une chaîne, par conséquent, doit impliquer la copie que toute la séquence de 6 00:00:13,130 --> 00:00:14,240 caractères. 7 00:00:14,240 --> 00:00:17,470 >> Tournons notre attention vers ce que dernière mise en œuvre et arracher ce 8 00:00:17,470 --> 00:00:21,470 ligne, chaîne t est égale à s, qui n'était manifestement pas suffisant. 9 00:00:21,470 --> 00:00:24,440 Nous allons remplacer par une ligne qui semble, au contraire, comme ça. 10 00:00:24,440 --> 00:00:34,020 Chaîne t obtient malloc de longueur de la chaîne de s et 1 fois la taille d'un caractère. 11 00:00:34,020 --> 00:00:36,320 >> Maintenant, il ya citation un peu aller dans cette ligne de code. 12 00:00:36,320 --> 00:00:39,330 Tout d'abord, malloc, court pour la mémoire allocation, et l' 13 00:00:39,330 --> 00:00:40,700 fonction fait exactement cela. 14 00:00:40,700 --> 00:00:44,740 Étant donné un nombre entier, il revient à vous la adresse d'un bloc de mémoire de 15 00:00:44,740 --> 00:00:45,960 que le nombre d'octets. 16 00:00:45,960 --> 00:00:50,090 Pendant ce temps, la longueur de la chaîne de plus 1 est destiné à indiquer que nous voulons que 17 00:00:50,090 --> 00:00:54,690 le nombre d'octets que s occupe déjà, y compris son terminateur null, le 18 00:00:54,690 --> 00:00:57,050 0 barre oblique inverse à la fin d'une chaîne. 19 00:00:57,050 --> 00:01:00,170 >> Pendant ce temps, je ne me souviens pas nécessairement la taille d'un char est, même 20 00:01:00,170 --> 00:01:04,340 mais sur la plupart des systèmes, il est tout simplement une octet, donc je vais appeler la taille de l'omble de 21 00:01:04,340 --> 00:01:08,210 comprendre de façon dynamique la taille un caractère individuel est. 22 00:01:08,210 --> 00:01:12,550 Une fois multipliés ensemble, je serai de retour l' nombre total d'octets dont j'ai besoin. 23 00:01:12,550 --> 00:01:14,680 >> Mais que faire si malloc ne retourner la mémoire dont nous avons besoin? 24 00:01:14,680 --> 00:01:16,730 Je ferais mieux de vérifier que pour les suivants. 25 00:01:16,730 --> 00:01:23,330 Si t est égal à zéro, alors je vais d'abord à s gratuitement, la mémoire renvoyée par get 26 00:01:23,330 --> 00:01:27,120 chaîne, et puis je vais retourner 1, pour signifier erreur. 27 00:01:27,120 --> 00:01:30,360 >> Mais si tout va bien, je vais procéder à utiliser une boucle de quatre et itérer 28 00:01:30,360 --> 00:01:31,110 comme suit. 29 00:01:31,110 --> 00:01:36,000 Pour int j'obtiens 0, n est égal à la longueur de la chaîne de l'art. 30 00:01:36,000 --> 00:01:40,350 Je vais faire ce aussi longtemps que i est inférieur ou égal à n de sorte que I 31 00:01:40,350 --> 00:01:44,460 itérer jusqu'à et y compris la caractère de fin null s. 32 00:01:44,460 --> 00:01:47,450 >> Et à chaque itération, je suis va incrémenter i. 33 00:01:47,450 --> 00:01:52,496 Pendant ce temps, à l'intérieur de cette boucle, la copie s de i-ème caractère dans i-e de t 34 00:01:52,496 --> 00:01:59,310 emplacement, il suffit de faire t support i obtient de support i. 41 00:01:59,320 --> 00:02:02,750 >> Voyons maintenant Enregistrez, compilez et exécuter ce nouveau programme. 42 00:02:02,750 --> 00:02:06,690 Faire une copie 1 point slash copie 1. 43 00:02:06,690 --> 00:02:09,460 Et je vais dire quelque chose comme bonjour en minuscules. 44 00:02:09,460 --> 00:02:12,280 Et heureusement, cette fois, mon d'origine reste inchangé. 45 00:02:12,280 --> 00:02:13,660 bonjour en minuscules. 46 00:02:13,660 --> 00:02:15,540 Mais la copie est, en effet, en majuscule. 47 00:02:37,120 --> 00:02:38,963