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. Mi piacerebbe migliore aggiungere un ulteriore riga al mio codice. In particolare, perché ora sto usando malloc, chiedendo per la memoria, è il mio responsabilità di liberare quella memoria quando ho finito con esso, proprio come noi va liberando memoria che è dato a noi da stringa get. Così, alla fine di questo programma, sono andando ad aggiungere una riga aggiuntiva per liberare t prima di tornare 0 per indicare il successo. 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.