>> DAVID J. MALAN: Così si scopre che la copia di una stringa non è così
semplice come la copia di un primitivo, come un int o float.
Dopo tutto, sotto la cappa una stringa è una sequenza di caratteri.
Quindi copia di una stringa, quindi, deve coinvolgere la copia di tutta quella sequenza di
caratteri.
>> Torniamo nostra attenzione a quella ultima implementazione e strappare questo
linea, stringa t è uguale s, che evidentemente non era sufficiente.
Diciamo sostituirla con una linea che sembra, invece, come questo.
String t ottiene malloc della lunghezza della stringa di S Plus 1 volte la dimensione di un carattere.
>> Ora c'è citazione un po 'andare in questa linea di codice.
In primo luogo, malloc, abbreviazione di memoria allocazione, e la
funzione fa proprio questo.
Dato un numero intero, restituisce a voi l' indirizzo di un pezzo di memoria di
tale numero di byte.
Nel frattempo, la lunghezza della stringa di s più 1 si intende per indicare che vogliamo come
numero di byte come s occupa già, compreso il suo terminatore nullo, il
0 backslash alla fine di una stringa.
>> Nel frattempo, non necessariamente ricordo quanto è grande un char è, anche
anche se sulla maggior parte dei sistemi è semplicemente 1 byte, quindi chiamerò dimensione del carattere per
capire quanto è grande dinamicamente un carattere individuale è.
Una volta moltiplicati insieme, torno il numero totale di byte che ho bisogno.
>> Ma cosa succede se malloc non riesce a restituire la memoria di cui abbiamo bisogno?
Mi piacerebbe migliore per verificare che quanto segue.
Se t è uguale a zero, allora sto andando prima a s libero, la memoria restituita da get
stringa, e poi ho intenzione di ritorno 1, a significare errore.
>> Ma se tutto va bene, ho intenzione di continuare utilizzare un quattro loop e iterare
come segue.
Per int ottengo 0, n equals la lunghezza della stringa di s.
Io vado a fare questo fino a quando i è minore o uguale a n in modo che
scorrere attraverso, compresa la carattere di terminazione null in s.
>> E su ogni iterazione, sono andando a incrementare i.
Nel frattempo, all'interno di questo ciclo, copiare s di i-esimo carattere in di t-esimo
posizione, è sufficiente fare t Staffa mi viene s staffa i.
>> Vediamo ora Salvare, compilare e eseguire questo nuovo programma.
Fai copia 1 dot barra copia 1.
E io dico qualcosa di simile ciao a tutti minuscolo.
E per fortuna, questa volta la mia originale rimane invariato.
ciao a tutti minuscolo.
Ma la copia è, infatti, in maiuscolo.