1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> Девід Дж. Малан: Ось і виходить, що копіювання рядка, не так 3 00:00:03,130 --> 00:00:05,750 просто, як копіювання примітивний, як Int або поплавком. 4 00:00:05,750 --> 00:00:09,190 Зрештою, під капотом рядком є символів послідовності. 5 00:00:09,190 --> 00:00:13,130 Так копіювання рядка, тому, повинен залучати копіювання, що всю послідовність 6 00:00:13,130 --> 00:00:14,240 символів. 7 00:00:14,240 --> 00:00:17,470 >> Давайте звернемо увагу на тому, що в минулому впровадження і вирвати цей 8 00:00:17,470 --> 00:00:21,470 лінія, рядок т дорівнює с, що явно не була достатньою. 9 00:00:21,470 --> 00:00:24,440 Давайте замінимо його з лінією, яка виглядає, а не, як це. 10 00:00:24,440 --> 00:00:34,020 Рядок т отримує Танос довжини рядки з S Plus 1 раз розміром з гольца. 11 00:00:34,020 --> 00:00:36,320 >> Тепер є цитата трохи збирається в цьому рядку коду. 12 00:00:36,320 --> 00:00:39,330 По-перше, Танос, короткі для пам'яті виділення і 13 00:00:39,330 --> 00:00:40,700 Функція робить саме це. 14 00:00:40,700 --> 00:00:44,740 Дано ціле число, то повертається до вас у адреса шматок пам'яті 15 00:00:44,740 --> 00:00:45,960 що багато байт. 16 00:00:45,960 --> 00:00:50,090 Тим часом, довжина рядки з 1 плюс покликана підкреслити, що ми хочемо, як 17 00:00:50,090 --> 00:00:54,690 кількість байт з уже займає, в тому числі його нульове закінчення, 18 00:00:54,690 --> 00:00:57,050 зворотний слеш 0 в кінці рядка. 19 00:00:57,050 --> 00:01:00,170 >> Тим часом, я не обов'язково пам'ятати наскільки великий символ є, навіть 20 00:01:00,170 --> 00:01:04,340 хоча в більшості систем це просто 1 байт, так що я буду називати розмір гольца в 21 00:01:04,340 --> 00:01:08,210 з'ясувати, динамічно, наскільки велика індивідуальний характер. 22 00:01:08,210 --> 00:01:12,550 Після помножене разом, я повернуся Загальне число байтів, що мені потрібно. 23 00:01:12,550 --> 00:01:14,680 >> Але що, якщо Танос не в змозі повернути пам'ять ми повинні? 24 00:01:14,680 --> 00:01:16,730 Я б краще перевірити, що в наступному. 25 00:01:16,730 --> 00:01:23,330 Якщо т дорівнює нулю, то я спочатку збирався звільнити з, пам'ять, що повертається Get 26 00:01:23,330 --> 00:01:27,120 рядок, а потім я збираюся повертає 1, щоб показати помилку. 27 00:01:27,120 --> 00:01:30,360 >> Але якщо все добре, я збираюся продовжити використовувати чотири петлі і ітерації 28 00:01:30,360 --> 00:01:31,110 таким чином. 29 00:01:31,110 --> 00:01:36,000 Для внутр я отримую 0, п рівних довжина рядка с. 30 00:01:36,000 --> 00:01:40,350 Я збираюся зробити це до тих пір, як я це менше або дорівнює п так, щоб я 31 00:01:40,350 --> 00:01:44,460 ітерації через включно нуль завершальний знак в с. 32 00:01:44,460 --> 00:01:47,450 >> І на кожній ітерації, я збирається збільшити I. 33 00:01:47,450 --> 00:01:52,496 Тим часом, всередині цієї петлі, копіювання и I-ий символ в г-го T, 34 00:01:52,496 --> 00:01:59,310 розташування, достатньо, щоб зробити т Кронштейн я отримує и кронштейн я. 41 00:01:59,320 --> 00:02:02,750 >> Давайте тепер зберегти, скомпілювати і запустити цю нову програму. 42 00:02:02,750 --> 00:02:06,690 Зробити копію 1 точка слеш копію 1. 43 00:02:06,690 --> 00:02:09,460 І я скажу щось на зразок привіт в нижньому регістрі. 44 00:02:09,460 --> 00:02:12,280 І на щастя, на цей раз мій Оригінальний залишається незмінною. 45 00:02:12,280 --> 00:02:13,660 привіт в нижньому регістрі. 46 00:02:13,660 --> 00:02:15,540 Але копія, дійсно, капіталізуються. 47 00:02:37,120 --> 00:02:38,963