1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Entón, verifícase que copiar unha cadea non é tan 3 00:00:03,130 --> 00:00:05,750 sinxelo que copiar un primitivo, como un int ou un float. 4 00:00:05,750 --> 00:00:09,190 Ao final, debaixo do capó unha cadea é un carácteres de secuencia. 5 00:00:09,190 --> 00:00:13,130 Entón, copiando unha cadea, por tanto, ten a involucrar copiar toda esa secuencia de 6 00:00:13,130 --> 00:00:14,240 caracteres. 7 00:00:14,240 --> 00:00:17,470 >> Imos volver a nosa atención para que última implantación e arrincar esta 8 00:00:17,470 --> 00:00:21,470 liña, corda t é igual a s, o que claramente non era suficiente. 9 00:00:21,470 --> 00:00:24,440 Imos substituílo por unha liña que parece, ao contrario, como esta. 10 00:00:24,440 --> 00:00:34,020 Cordas t recibe malloc de lonxitude da corda de s e 1 veces o tamaño dun caracter. 11 00:00:34,020 --> 00:00:36,320 >> Agora hai cita algo vai en nesa liña de código. 12 00:00:36,320 --> 00:00:39,330 En primeiro lugar, malloc, abreviación de memoria concesión, e o 13 00:00:39,330 --> 00:00:40,700 función fai exactamente iso. 14 00:00:40,700 --> 00:00:44,740 Dado un número enteiro, el retorna a vostede o dirección dun bloque de memoria de 15 00:00:44,740 --> 00:00:45,960 que moitos bytes. 16 00:00:45,960 --> 00:00:50,090 Mentres tanto, a lonxitude da corda de s máis 1 pretende indicar que queremos como 17 00:00:50,090 --> 00:00:54,690 moitos bytes como s xa ocupa, incluíndo o seu terminador nulo, o 18 00:00:54,690 --> 00:00:57,050 barra invertida 0 ao final dunha cadea. 19 00:00:57,050 --> 00:01:00,170 >> Mentres tanto, eu non me lembro, necesariamente, quão grande é un char é que, aínda 20 00:01:00,170 --> 00:01:04,340 aínda que na maioría dos sistemas é simplemente unha byte, entón eu vou chamar tamaño do char para 21 00:01:04,340 --> 00:01:08,210 descubrir dinamicamente como gran un carácter individual é. 22 00:01:08,210 --> 00:01:12,550 Xa multiplicados xuntos, eu volver número total de bytes que eu teño. 23 00:01:12,550 --> 00:01:14,680 >> Pero o que se malloc non devolver a memoria que necesitamos? 24 00:01:14,680 --> 00:01:16,730 É mellor eu comprobar a que os seguintes. 25 00:01:16,730 --> 00:01:23,330 Se t é igual a null, entón eu vou primeiro para s libres, a memoria de retorno por get 26 00:01:23,330 --> 00:01:27,120 cadea, e entón eu vou voltar 1, para referirse a erro. 27 00:01:27,120 --> 00:01:30,360 >> Pero, se está todo ben, eu vou seguir usar un loop de catro e iterado 28 00:01:30,360 --> 00:01:31,110 como segue. 29 00:01:31,110 --> 00:01:36,000 Para int i obter 0, n é igual a lonxitude da corda de s. 30 00:01:36,000 --> 00:01:40,350 Vou facelo, sempre que i é inferior ou igual a n, de xeito que eu 31 00:01:40,350 --> 00:01:44,460 iteración través e incluíndo a carácter de terminación nula en s. 32 00:01:44,460 --> 00:01:47,450 >> E en cada iteración, estou indo a incrementar i. 33 00:01:47,450 --> 00:01:52,496 Mentres tanto, dentro dese loop, copiar s do i-th en carácter de t i-th 34 00:01:52,496 --> 00:01:59,310 localización, só tes que facer t soporte i recibe soporte s i. 41 00:01:59,320 --> 00:02:02,750 >> Imos agora gardar, compilar e executar este novo programa. 42 00:02:02,750 --> 00:02:06,690 Facer copia de copia 1 punto barra 1. 43 00:02:06,690 --> 00:02:09,460 E eu vou dicir algo así como Ola en todas as letras minúsculas. 44 00:02:09,460 --> 00:02:12,280 E, por sorte, esta vez a miña orixinal permanece inalterado. 45 00:02:12,280 --> 00:02:13,660 Ola en todas as letras minúsculas. 46 00:02:13,660 --> 00:02:15,540 Pero a copia é, de feito, feito. 47 00:02:37,120 --> 00:02:38,963