1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Jadi ternyata bahwa menyalin string tidak hampir sama 3 00:00:03,130 --> 00:00:05,750 sederhana seperti menyalin primitif, seperti int atau pelampung. 4 00:00:05,750 --> 00:00:09,190 Setelah semua, di bawah tenda string adalah karakter berurutan. 5 00:00:09,190 --> 00:00:13,130 Jadi menyalin string, oleh karena itu, harus melibatkan menyalin bahwa seluruh urutan 6 00:00:13,130 --> 00:00:14,240 karakter. 7 00:00:14,240 --> 00:00:17,470 >> Mari kita mengalihkan perhatian kita kembali ke implementasi terakhir dan merobek ini 8 00:00:17,470 --> 00:00:21,470 line, tali t sama, yang jelas tidak cukup. 9 00:00:21,470 --> 00:00:24,440 Mari kita menggantinya dengan garis yang terlihat, sebaliknya, seperti ini. 10 00:00:24,440 --> 00:00:34,020 String t mendapat malloc panjang string s ditambah 1 kali ukuran char. 11 00:00:34,020 --> 00:00:36,320 >> Sekarang ada kutipan sedikit akan di dalam baris kode. 12 00:00:36,320 --> 00:00:39,330 Pertama, malloc, pendek untuk memori alokasi, dan 13 00:00:39,330 --> 00:00:40,700 fungsi tidak hanya itu. 14 00:00:40,700 --> 00:00:44,740 Mengingat integer, itu kembali kepada Anda alamat sepotong memori dari 15 00:00:44,740 --> 00:00:45,960 yang banyak byte. 16 00:00:45,960 --> 00:00:50,090 Sementara itu, panjang string s ditambah 1 dimaksudkan untuk menunjukkan bahwa kita inginkan sebagai 17 00:00:50,090 --> 00:00:54,690 banyak byte sebagai s sudah menempati, termasuk null terminator, yang 18 00:00:54,690 --> 00:00:57,050 backslash 0 di akhir string. 19 00:00:57,050 --> 00:01:00,170 >> Sementara itu, saya tidak selalu ingat seberapa besar char, bahkan 20 00:01:00,170 --> 00:01:04,340 meskipun pada kebanyakan sistem itu hanya 1 byte, jadi saya akan menelepon ukuran char 21 00:01:04,340 --> 00:01:08,210 mengetahui secara dinamis seberapa besar karakter individu. 22 00:01:08,210 --> 00:01:12,550 Setelah dikalikan bersama-sama, saya mendapatkan kembali jumlah byte yang saya butuhkan. 23 00:01:12,550 --> 00:01:14,680 >> Tapi bagaimana kalau malloc gagal kembali memori yang kita butuhkan? 24 00:01:14,680 --> 00:01:16,730 Aku terbaik memeriksa untuk itu sebagai berikut. 25 00:01:16,730 --> 00:01:23,330 Jika t sama dengan nol, maka aku pertama akan untuk free s, memori dikembalikan oleh get 26 00:01:23,330 --> 00:01:27,120 tali, dan kemudian aku akan kembali 1, untuk menandakan kesalahan. 27 00:01:27,120 --> 00:01:30,360 >> Tetapi jika semuanya baik-baik, aku akan melanjutkan menggunakan empat lingkaran dan iterate 28 00:01:30,360 --> 00:01:31,110 sebagai berikut. 29 00:01:31,110 --> 00:01:36,000 Untuk int saya mendapatkan 0, n equals panjang string s. 30 00:01:36,000 --> 00:01:40,350 Aku akan melakukan hal ini selama i adalah kurang dari atau sama dengan n sehingga saya 31 00:01:40,350 --> 00:01:44,460 iterate melalui dan termasuk karakter terminating nol dalam s. 32 00:01:44,460 --> 00:01:47,450 >> Dan pada setiap iterasi, aku akan kenaikan i. 33 00:01:47,450 --> 00:01:52,496 Sementara itu, dalam lingkaran ini, copy s s karakter ke-i ke t i-th 34 00:01:52,496 --> 00:01:59,310 lokasi, cukup dengan melakukan t braket i mendapat s braket i. 41 00:01:59,320 --> 00:02:02,750 >> Sekarang mari kita simpan, kompilasi, dan menjalankan program baru ini. 42 00:02:02,750 --> 00:02:06,690 Membuat salinan 1 dot slash copy 1. 43 00:02:06,690 --> 00:02:09,460 Dan aku akan mengatakan sesuatu seperti halo dalam huruf kecil semua. 44 00:02:09,460 --> 00:02:12,280 Dan untungnya, kali ini saya asli tetap tidak berubah. 45 00:02:12,280 --> 00:02:13,660 halo dalam huruf kecil semua. 46 00:02:13,660 --> 00:02:15,540 Tapi salinan tersebut, memang, dikapitalisasi. 47 00:02:37,120 --> 00:02:38,963