1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. MALAN: Jadi ia ternyata bahawa menyalin rentetan tidak sebegitu 3 00:00:03,130 --> 00:00:05,750 semudah menyalin primitif, seperti int atau apungan. 4 00:00:05,750 --> 00:00:09,190 Lagipun, di bawah hood rentetan adalah watak-watak urutan. 5 00:00:09,190 --> 00:00:13,130 Jadi menyalin tali, oleh itu, perlu melibatkan menyalin urutan seluruh 6 00:00:13,130 --> 00:00:14,240 aksara. 7 00:00:14,240 --> 00:00:17,470 >> Mari kita mengubah perhatian kita kembali kepada pelaksanaan lepas dan merobek keluar ini 8 00:00:17,470 --> 00:00:21,470 line, tali t sama s, yang jelas tidak mencukupi. 9 00:00:21,470 --> 00:00:24,440 Mari kita menggantikannya dengan garis yang kelihatan, sebaliknya, seperti ini. 10 00:00:24,440 --> 00:00:34,020 Rentetan t mendapat malloc panjang rentetan s ditambah 1 kali saiz char a. 11 00:00:34,020 --> 00:00:36,320 >> Sekarang ada quote sedikit akan di dalam bidang ini selepas kod. 12 00:00:36,320 --> 00:00:39,330 Pertama, malloc, pendek untuk memori peruntukan, dan 13 00:00:39,330 --> 00:00:40,700 fungsi tidak hanya itu. 14 00:00:40,700 --> 00:00:44,740 Memandangkan integer, ia kembali kepada anda alamat sebahagian daripada ingatan 15 00:00:44,740 --> 00:00:45,960 bahawa banyak bait. 16 00:00:45,960 --> 00:00:50,090 Sementara itu, panjang tali s ditambah 1 bertujuan untuk menunjukkan bahawa kita mahu sebagai 17 00:00:50,090 --> 00:00:54,690 banyak bait sebagai s sudah menduduki, termasuk terminator null, yang 18 00:00:54,690 --> 00:00:57,050 garis sendeng terbalik 0 pada akhir rentetan. 19 00:00:57,050 --> 00:01:00,170 >> Sementara itu, saya tidak semestinya ingat berapa besar char itu, walaupun 20 00:01:00,170 --> 00:01:04,340 walaupun pada kebanyakan sistem ia hanya 1 bait, jadi saya akan memanggil saiz char untuk 21 00:01:04,340 --> 00:01:08,210 memikirkan secara dinamik bagaimana besar watak individu adalah. 22 00:01:08,210 --> 00:01:12,550 Apabila didarab bersama-sama, saya mendapat kembali jumlah bait yang saya perlukan. 23 00:01:12,550 --> 00:01:14,680 >> Tetapi bagaimana jika malloc gagal kembali memori yang kita perlukan? 24 00:01:14,680 --> 00:01:16,730 Saya terbaik akan menyemak yang seperti berikut. 25 00:01:16,730 --> 00:01:23,330 Jika t sama batal, maka saya pertama akan s percuma, memori yang dikembalikan oleh mendapatkan 26 00:01:23,330 --> 00:01:27,120 tali, dan kemudian saya akan kembali 1, untuk menandakan kesilapan. 27 00:01:27,120 --> 00:01:30,360 >> Tetapi jika semuanya berjalan dengan lancar, saya akan meneruskan menggunakan gelung empat dan melelar 28 00:01:30,360 --> 00:01:31,110 seperti berikut. 29 00:01:31,110 --> 00:01:36,000 Untuk int i mendapat 0, n setaraf panjang tali s. 30 00:01:36,000 --> 00:01:40,350 Saya akan melakukan ini selagi i adalah kurang daripada atau sama dengan n supaya saya 31 00:01:40,350 --> 00:01:44,460 melelar atas melalui dan termasuk watak menamatkan null dalam s. 32 00:01:44,460 --> 00:01:47,450 >> Dan pada setiap lelaran, saya akan kenaikan i. 33 00:01:47,450 --> 00:01:52,496 Sementara itu, di dalam gelung ini, salinan s i-ke-watak ke dalam t i-ke- 34 00:01:52,496 --> 00:01:59,310 lokasi, ia mencukupi untuk melakukan t kurungan i mendapat s kurungan i. 41 00:01:59,320 --> 00:02:02,750 >> Sekarang mari kita menyimpan, menyusun, dan menjalankan program baru ini. 42 00:02:02,750 --> 00:02:06,690 Buat salinan 1 dot slash salinan 1. 43 00:02:06,690 --> 00:02:09,460 Dan saya akan mengatakan sesuatu seperti hello dalam semua huruf kecil. 44 00:02:09,460 --> 00:02:12,280 Dan bersyukur kerana, kali ini saya asal tidak berubah. 45 00:02:12,280 --> 00:02:13,660 hello dalam semua huruf kecil. 46 00:02:13,660 --> 00:02:15,540 Tetapi salinan yang adalah, sememangnya, dipermodalkan. 47 00:02:37,120 --> 00:02:38,963