DAVID J. Malan: Jadi ternyata bahwa menyalin string tidak hampir sama sederhana seperti menyalin primitif, seperti int atau pelampung. Setelah semua, di bawah tenda string adalah karakter berurutan. Jadi menyalin string, oleh karena itu, harus melibatkan menyalin bahwa seluruh urutan karakter. Mari kita mengalihkan perhatian kita kembali ke implementasi terakhir dan merobek ini line, tali t sama, yang jelas tidak cukup. Mari kita menggantinya dengan garis yang terlihat, sebaliknya, seperti ini. String t mendapat malloc panjang string s ditambah 1 kali ukuran char. Sekarang ada kutipan sedikit akan di dalam baris kode. Pertama, malloc, pendek untuk memori alokasi, dan fungsi tidak hanya itu. Mengingat integer, itu kembali kepada Anda alamat sepotong memori dari yang banyak byte. Sementara itu, panjang string s ditambah 1 dimaksudkan untuk menunjukkan bahwa kita inginkan sebagai banyak byte sebagai s sudah menempati, termasuk null terminator, yang backslash 0 di akhir string. Sementara itu, saya tidak selalu ingat seberapa besar char, bahkan meskipun pada kebanyakan sistem itu hanya 1 byte, jadi saya akan menelepon ukuran char mengetahui secara dinamis seberapa besar karakter individu. Setelah dikalikan bersama-sama, saya mendapatkan kembali jumlah byte yang saya butuhkan. Tapi bagaimana kalau malloc gagal kembali memori yang kita butuhkan? Aku terbaik memeriksa untuk itu sebagai berikut. Jika t sama dengan nol, maka aku pertama akan untuk free s, memori dikembalikan oleh get tali, dan kemudian aku akan kembali 1, untuk menandakan kesalahan. Tetapi jika semuanya baik-baik, aku akan melanjutkan menggunakan empat lingkaran dan iterate sebagai berikut. Untuk int saya mendapatkan 0, n equals panjang string s. Aku akan melakukan hal ini selama i adalah kurang dari atau sama dengan n sehingga saya iterate melalui dan termasuk karakter terminating nol dalam s. Dan pada setiap iterasi, aku akan kenaikan i. Sementara itu, dalam lingkaran ini, copy s s karakter ke-i ke t i-th lokasi, cukup dengan melakukan t braket i mendapat s braket i. Aku terbaik akan menambahkan satu tambahan line untuk kode saya. Secara khusus, karena aku sekarang menggunakan malloc, meminta memori, itu saya tanggung jawab untuk membebaskan memori yang ketika aku sudah selesai dengan hal itu, sama seperti kita harus membebaskan memori yang diberikan kepada kita oleh get tali. Jadi di akhir program ini, saya akan menambahkan satu baris tambahan untuk membebaskan t sebelum kembali 0 untuk menunjukkan keberhasilan. Sekarang mari kita simpan, kompilasi, dan menjalankan program baru ini. Membuat salinan 1 dot slash copy 1. Dan aku akan mengatakan sesuatu seperti halo dalam huruf kecil semua. Dan untungnya, kali ini saya asli tetap tidak berubah. halo dalam huruf kecil semua. Tapi salinan tersebut, memang, dikapitalisasi.