1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Així que resulta que copiar una cadena no és tan 3 00:00:03,130 --> 00:00:05,750 senzill com copiar un primitiu, com un int o float. 4 00:00:05,750 --> 00:00:09,190 Després de tot, sota la campana d'una cadena és una seqüència de caràcters. 5 00:00:09,190 --> 00:00:13,130 Per tant la còpia d'una cadena, per tant, ha de involucrar copiar tota aquesta seqüència de 6 00:00:13,130 --> 00:00:14,240 personatges. 7 00:00:14,240 --> 00:00:17,470 >> Centrarem la nostra atenció de nou a la última aplicació i arrencar aquest 8 00:00:17,470 --> 00:00:21,470 línia, cadena t és igual a s, que clarament no era suficient. 9 00:00:21,470 --> 00:00:24,440 Anem a substituir amb una línia que sembla, en canvi, com aquest. 10 00:00:24,440 --> 00:00:34,020 Cadena t aconsegueix malloc de longitud de la cadena de S Plus 1 vegades la mida d'un char. 11 00:00:34,020 --> 00:00:36,320 >> Ara hi ha pressupost una mica d'anar en aquesta línia de codi. 12 00:00:36,320 --> 00:00:39,330 En primer lloc, malloc, l'abreviatura de la memòria l'assignació i la 13 00:00:39,330 --> 00:00:40,700 funció fa precisament això. 14 00:00:40,700 --> 00:00:44,740 Donat un nombre enter, es torna a vostè el direcció d'un tros de memòria de 15 00:00:44,740 --> 00:00:45,960 que molts bytes. 16 00:00:45,960 --> 00:00:50,090 Mentrestant, la longitud de la cadena de s més 1 pretén indicar que volem que 17 00:00:50,090 --> 00:00:54,690 tants bytes com s ja ocupa, inclòs el seu terminador nul, el 18 00:00:54,690 --> 00:00:57,050 barra invertida 0 al final d'una cadena. 19 00:00:57,050 --> 00:01:00,170 >> Mentrestant, no me'n recordo necessàriament què tan gran és un char, fins i tot 20 00:01:00,170 --> 00:01:04,340 encara que en la majoria dels sistemes és simplement 1 byte, així que vaig a trucar a mida de char a 21 00:01:04,340 --> 00:01:08,210 esbrinar dinàmicament gran un caràcter individual és. 22 00:01:08,210 --> 00:01:12,550 Un cop multiplicats entre si, que torni la nombre total de bytes que necessito. 23 00:01:12,550 --> 00:01:14,680 >> Però el que si malloc no tornar la memòria que necessitem? 24 00:01:14,680 --> 00:01:16,730 Serà millor que comprovo que de la següent manera. 25 00:01:16,730 --> 00:01:23,330 Si t és igual a null, llavors estic anant primer que s lliures, la memòria retornat per get 26 00:01:23,330 --> 00:01:27,120 cadena, i després em vaig a retorna 1, per indicar l'error. 27 00:01:27,120 --> 00:01:30,360 >> Però si tot està bé, vaig a procedir per utilitzar un bucle de quatre i iterar 28 00:01:30,360 --> 00:01:31,110 de la següent manera. 29 00:01:31,110 --> 00:01:36,000 Per int i obtenir 0, n és igual a la longitud de la cadena de s. 30 00:01:36,000 --> 00:01:40,350 Vaig a fer això sempre i quan i és menys de o igual a n de manera que jo 31 00:01:40,350 --> 00:01:44,460 iterar a través d'e incloent la caràcter de terminació null en si. 32 00:01:44,460 --> 00:01:47,450 >> I en cada iteració, estic incrementarà i. 33 00:01:47,450 --> 00:01:52,496 Mentrestant, dins d'aquest bucle, copiar s de l'i-èsim caràcter en la t i-th 34 00:01:52,496 --> 00:01:59,310 ubicació, només cal fer t suport i Obté s abraçadora i. 41 00:01:59,320 --> 00:02:02,750 >> Ara anem a guardar, compilar i executar aquest nou programa. 42 00:02:02,750 --> 00:02:06,690 Fer còpia de còpia 1 punt slash 1. 43 00:02:06,690 --> 00:02:09,460 I vaig a dir una cosa així com hola en minúscules. 44 00:02:09,460 --> 00:02:12,280 I per sort, aquesta vegada la meva original roman sense canvis. 45 00:02:12,280 --> 00:02:13,660 hola en minúscules. 46 00:02:13,660 --> 00:02:15,540 Però la còpia és, de fet, amb majúscula. 47 00:02:37,120 --> 00:02:38,963