1 00:00:00,000 --> 00:00:00,410 2 00:00:00,410 --> 00:00:03,130 >> DAVID J. Malan: Така се оказва, че копиране на низ не е толкова 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 String тона получава изчистване на низ дължина S плюс 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 макар и в повечето системи това е просто един байт, така че аз ще се обадя размер на Чар, за да 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 За Int аз добивам 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 В същото време, вътре в този цикъл, копирате на S-тото характер в тона на I-ия 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