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 једноставна колико и копирање примитивно, као инт или флоат. 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 Стринг т добија маллоц дужине низа С Плус 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 Ако је т једнако нула, онда ја прво идем на бесплатне с, меморија се вратио по гет 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 >> И на свакој итерацији, ја сам И неће повећавати. 33 00:01:47,450 --> 00:01:52,496 У међувремену, унутар ове петље, копирање с је и-ти карактер у Т и-ог 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