1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [За възпроизвеждане на музика] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Добре. 4 00:00:12,100 --> 00:00:15,620 И така, първото нещо, което на първо място, на видео от познато лице. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO PLAYBACK] 7 00:00:22,560 --> 00:00:23,370 >> -Добре. 8 00:00:23,370 --> 00:00:27,150 Това е CS50, и това е началото на три седмици. 9 00:00:27,150 --> 00:00:29,980 Съжалявам, че не би могъл да бъде там с теб днес, но ми позволи да се въведе 10 00:00:29,980 --> 00:00:32,880 Собствена Rob Boden CS50 е. 11 00:00:32,880 --> 00:00:33,872 >> [END възпроизвеждане на видео] 12 00:00:33,872 --> 00:00:39,340 >> [Аплодисменти и CHEERS] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: The филмография в че видеото е фантастично. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Добре. 16 00:00:47,770 --> 00:00:50,960 Така че, на първо място, има и друг обяд. 17 00:00:50,960 --> 00:00:52,330 Това е утре в 01:15 часа. 18 00:00:52,330 --> 00:00:54,480 Няма по обяд в петък. 19 00:00:54,480 --> 00:00:55,810 Той е с Quora. 20 00:00:55,810 --> 00:01:00,190 И Томи все още не е тук, но един от хората там е бивш ръководител CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Така че той е забавен човек. 23 00:01:02,730 --> 00:01:04,819 Трябва да дойдеш. 24 00:01:04,819 --> 00:01:05,900 >> Добре. 25 00:01:05,900 --> 00:01:11,360 Така миналата седмица, ние започнахме да се разпадне за това, което наистина е низ. 26 00:01:11,360 --> 00:01:14,830 Познаваме се още от началото, че това е една поредица от знаци. 27 00:01:14,830 --> 00:01:18,130 Но миналата седмица, ние се ровят в факта, че това, което е наистина поредица от 28 00:01:18,130 --> 00:01:22,110 знаци, добре, сега ние имаме масиви от символи. 29 00:01:22,110 --> 00:01:26,450 И ние знаем, че низ, това е масив на героите, в самия край, 30 00:01:26,450 --> 00:01:30,920 имаме този специален нищожна байт, това 0 наклонена черта, която показва края на 31 00:01:30,920 --> 00:01:32,230 низа. 32 00:01:32,230 --> 00:01:36,970 >> И така низ е масив от герои, но ние можем да имаме повече от 33 00:01:36,970 --> 00:01:39,530 само един набор от знаци, ние може да има набор от всеки 34 00:01:39,530 --> 00:01:40,890 вид на нещо, което искаме. 35 00:01:40,890 --> 00:01:51,570 Така че, ако си спомняте от миналата седмица, Ages програма, която David въведени 36 00:01:51,570 --> 00:01:53,560 наистина бързо. 37 00:01:53,560 --> 00:01:57,010 Така че първото нещо, което ще направите, е да поиска от потребителя за число, на 38 00:01:57,010 --> 00:01:58,800 брой хора в помещението. 39 00:01:58,800 --> 00:02:01,260 След като имаме това число, ние сме обявяване масив. 40 00:02:01,260 --> 00:02:02,890 Забележете тази скоба синтаксис. 41 00:02:02,890 --> 00:02:04,540 Ще свикнете с това. 42 00:02:04,540 --> 00:02:09,430 >> Така че ние сме за обявяване на масив от цели числа наречен възрасти, и там са п 43 00:02:09,430 --> 00:02:12,080 числа в този масив. 44 00:02:12,080 --> 00:02:16,480 Така че този модел точно тук, този 4 Int I е равна на 0, аз е по-малко от N, аз плюс 45 00:02:16,480 --> 00:02:20,580 плюс, че също ще бъде модел че ще ви бъде много свикнали. 46 00:02:20,580 --> 00:02:24,000 Защото това е доста много как сте винаги ще обхождане на масиви. 47 00:02:24,000 --> 00:02:26,330 Така че не забравяйте, че н е дължина на нашия масив. 48 00:02:26,330 --> 00:02:32,120 И така, тук, ние многократно пита за възрастта на човек, с когото в стаята. 49 00:02:32,120 --> 00:02:36,640 >> След това, ние слезем, и за каквото и произволна причина, ние след това 50 00:02:36,640 --> 00:02:40,220 разпечатате на колко години те ще да бъде година от сега. 51 00:02:40,220 --> 00:02:49,980 И работи тази програма, да направи възрасти, точкова черта възрасти. 52 00:02:49,980 --> 00:02:53,010 Така броят на хората в помещението, нека да кажем, че има три. 53 00:02:53,010 --> 00:02:59,880 И казват, първият човек, е 13, Следващата е на 26 г., а последната е 30. 54 00:02:59,880 --> 00:03:05,080 Така че след това тя ще обхождане на тези три хора, принтират 14, 27, и 31. 55 00:03:05,080 --> 00:03:16,060 >> Така че не забравяйте, че когато ние декларираме масив с размер N, индексите в тази 56 00:03:16,060 --> 00:03:19,950 масив, масив има ценности и индекси 0, 1, 2, чак 57 00:03:19,950 --> 00:03:21,680 до п минус 1. 58 00:03:21,680 --> 00:03:26,255 Така че, когато каза, че има трима души в помещението, и ние поставяме тук 59 00:03:26,255 --> 00:03:29,850 първата итерация чрез този контур, аз ще бъде 0. 60 00:03:29,850 --> 00:03:31,650 Така че в индекс 0. 61 00:03:31,650 --> 00:03:34,540 Ние сме присвояване на първо възрастта потребителят въведе. 62 00:03:34,540 --> 00:03:38,870 След това в следващия един, ние навлизаме в второ н потребителят въведе и в 63 00:03:38,870 --> 00:03:40,580 до две, последната п. 64 00:03:40,580 --> 00:03:44,200 >> Така че забележите, че масив на площ три няма нищо 65 00:03:44,200 --> 00:03:46,040 в индекса три. 66 00:03:46,040 --> 00:03:49,036 Това не е валиден. 67 00:03:49,036 --> 00:03:50,250 Добре. 68 00:03:50,250 --> 00:03:55,136 Така че, да се върна тук. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Така че сега, че сме се справиха с масиви, имаме някаква интимност. 71 00:04:01,590 --> 00:04:03,780 Сега отиваме да се премине към командния линия аргументи, които ще бъдат 72 00:04:03,780 --> 00:04:05,890 доста от значение за този проблем набор. 73 00:04:05,890 --> 00:04:09,670 >> Така че до сега, когато съм обявена вашата основна функция, ние сме 74 00:04:09,670 --> 00:04:11,230 каза вътр основната невалидна. 75 00:04:11,230 --> 00:04:14,070 Така нищожен просто означава, че ние не се подминават всякакъв 76 00:04:14,070 --> 00:04:16,440 аргументи за тази функция. 77 00:04:16,440 --> 00:04:19,190 Сега отиваме да се види, че основният могат да се вземат някои аргументи. 78 00:04:19,190 --> 00:04:22,470 Тук ние ги наричаме вътр argc и струнни ARGV скоби. 79 00:04:22,470 --> 00:04:26,930 Скобите, за пореден път, което показва, че си имаме работа с масиви. 80 00:04:26,930 --> 00:04:31,850 Така че тук, низ ARGV скоби, ние сме занимаваща се с масив от низове. 81 00:04:31,850 --> 00:04:35,360 Така argc, че това ще се посочва колко аргументи ние имаме 82 00:04:35,360 --> 00:04:37,580 премина към тази програма. 83 00:04:37,580 --> 00:04:46,050 И да видим какво означава това, нека да затворите този. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Така че до този момент, ние сме се правят всеки програма като дот черта възрасти. 86 00:04:50,790 --> 00:04:55,250 Ние може също така, в командния ред, минало премине аргументи, като по този начин на термина, команда 87 00:04:55,250 --> 00:04:56,550 линия аргументи. 88 00:04:56,550 --> 00:04:59,760 Така че първият аргумент, здравей свят. 89 00:04:59,760 --> 00:05:03,350 Така че тук, argc ще бъде три. 90 00:05:03,350 --> 00:05:07,720 Това е броят на аргументите в командния ред. 91 00:05:07,720 --> 00:05:12,840 Argc е винаги най-малко една, от точка наклонена черта възрасти, себе си, се смята за един от 92 00:05:12,840 --> 00:05:14,490 Аргументите на командния ред. 93 00:05:14,490 --> 00:05:17,010 >> Тогава здравей е първият. 94 00:05:17,010 --> 00:05:20,460 Ако дот черта възрасти е нулев, а след това здравей е първото, и свят е 95 00:05:20,460 --> 00:05:22,830 вторият аргумент командния ред. 96 00:05:22,830 --> 00:05:29,490 Така че низ ARGV, ние ще видим, съдържа низове, точкова черта 97 00:05:29,490 --> 00:05:33,830 възрасти, здравей, и свят. 98 00:05:33,830 --> 00:05:38,945 И, по искане на Давид, отиваме да играе видео въвеждането че. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO PLAYBACK] 101 00:05:43,890 --> 00:05:46,240 >> -До сега в програмите с които сме се писмено, ние декларираме 102 00:05:46,240 --> 00:05:48,500 Основният като Int основната невалидна. 103 00:05:48,500 --> 00:05:51,170 И през цялото това време, че има нищожен просто са били уточнява, че 104 00:05:51,170 --> 00:05:54,430 програма не поема никаква аргументи командния ред. 105 00:05:54,430 --> 00:05:57,750 С други думи, когато един потребител изпълнява програма, той или тя може да даде команда 106 00:05:57,750 --> 00:06:01,710 аргументи, с написването допълнително думи или фрази, след като програмата е 107 00:06:01,710 --> 00:06:03,000 име на подканата. 108 00:06:03,000 --> 00:06:06,550 >> Е, ако искате вашата програма да вземат аргументи от командния ред, един или 109 00:06:06,550 --> 00:06:10,540 повече такива думи, ние трябва да се замени анулира с няколко аргумента. 110 00:06:10,540 --> 00:06:12,200 Така че нека да направим това. 111 00:06:12,200 --> 00:06:15,750 Включи CS50.h. 112 00:06:15,750 --> 00:06:19,360 Включи стандарт io.h. 113 00:06:19,360 --> 00:06:20,760 Int главната. 114 00:06:20,760 --> 00:06:26,330 И сега, вместо празнота, аз отивам да укажете вътр нарича argc, и 115 00:06:26,330 --> 00:06:28,780 масив от низове, наречени ARGV. 116 00:06:28,780 --> 00:06:31,820 Сега, argc и ARGV са просто конвенции. 117 00:06:31,820 --> 00:06:34,000 >> Можехме да нарича тези аргументи почти всичко, което искаме. 118 00:06:34,000 --> 00:06:37,630 Но това, което е важно, е, че е argc едно цяло число, защото по дефиниция, е 119 00:06:37,630 --> 00:06:41,360 ще съдържа броя на аргументите, на брой думи в общия че 120 00:06:41,360 --> 00:06:43,380 потребителят е въвел в своя ред. 121 00:06:43,380 --> 00:06:47,910 ARGV Междувременно аргумент вектор, е Ще действително да бъде масив съхраняване 122 00:06:47,910 --> 00:06:52,020 всички думи, които потребителят е написа на негово или нейно ред. 123 00:06:52,020 --> 00:06:54,500 >> Да пристъпя да направя нещо сега с един или повече от тези 124 00:06:54,500 --> 00:06:55,660 аргументи командния ред. 125 00:06:55,660 --> 00:07:00,070 По-специално, да вървим напред и печат каквито дума видовете потребителски 126 00:07:00,070 --> 00:07:03,960 след името на програмата в командния ред. 127 00:07:03,960 --> 00:07:04,730 Open скоба. 128 00:07:04,730 --> 00:07:06,240 Close скоба. 129 00:07:06,240 --> 00:07:10,510 ФОРМАТ процента и наклонена черта и запетая. 130 00:07:10,510 --> 00:07:14,550 И сега аз трябва да кажа ФОРМАТ каква стойност да се включите в този контейнер. 131 00:07:14,550 --> 00:07:18,600 Искам първо думата, която потребителят има въвели след името на програмата, 132 00:07:18,600 --> 00:07:23,130 и така аз отивам да се уточни ARGV скоба 1, в близост 133 00:07:23,130 --> 00:07:24,830 скоби, точка и запетая. 134 00:07:24,830 --> 00:07:27,290 >> Сега, защо скоба 1, а не скоба 0? 135 00:07:27,290 --> 00:07:30,990 Е, оказва се, автоматично се съхраняват в ARGV 0 ще бъде 136 00:07:30,990 --> 00:07:32,620 действителното име на програмата. 137 00:07:32,620 --> 00:07:36,180 Така че първата дума, че потребителят след името на програмата е, чрез 138 00:07:36,180 --> 00:07:38,990 конвенция, ще бъде съхранява в ARGV 1. 139 00:07:38,990 --> 00:07:42,380 Нека сега да състави и стартирате тази програма. 140 00:07:42,380 --> 00:07:47,780 >> Направете ARGV 0, точка наклонена черта ARGV 0. 141 00:07:47,780 --> 00:07:50,520 И сега една дума като здрасти. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 И ние я имаме, здравей. 144 00:07:53,520 --> 00:07:55,750 >> [END възпроизвеждане на видео] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Добре. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Затворете това. 148 00:08:01,230 --> 00:08:16,730 Така че, като се погледнете в тази програма, че ние просто се запозна с нас, добре, просто 149 00:08:16,730 --> 00:08:24,710 да се покаже, ако ние отпечатате ARGV 0, марка, сега какво е, ARGV 0, точка наклонена черта ARGV 0. 150 00:08:24,710 --> 00:08:30,440 Така че, както се очаква, това е отпечатване на името на програмата, тъй като ARGV 0 е 151 00:08:30,440 --> 00:08:32,970 винаги ще бъде най- името на програмата. 152 00:08:32,970 --> 00:08:35,640 Но нека да направим нещо малко по-интересно. 153 00:08:35,640 --> 00:08:42,080 >> Така че в комплекта проблем, ще бъде запознават с тази функция, atoi. 154 00:08:42,080 --> 00:08:44,440 Така че това, което ние използваме atoi за? 155 00:08:44,440 --> 00:08:48,550 Това ще да конвертирате низ в цяло число. 156 00:08:48,550 --> 00:08:53,280 Така че, ако премине на низа, едно, две, три, да atoi, че ще конвертирате, че 157 00:08:53,280 --> 00:08:56,910 до цяло число, едно, две, три. 158 00:08:56,910 --> 00:09:01,480 Така че ние ще конвертирате първата аргумент командния ред до цяло число, 159 00:09:01,480 --> 00:09:05,690 и след това просто да отпечатате това число. 160 00:09:05,690 --> 00:09:09,680 >> Така че, общо взето, ние сме вид reimplementing getint, само 161 00:09:09,680 --> 00:09:12,350 число се вписват в командата Онлайн вместо в програмата 162 00:09:12,350 --> 00:09:14,560 интерактивно. 163 00:09:14,560 --> 00:09:23,170 Така че след това, което прави ARGV 0, нека да направим това тук, и затворете това. 164 00:09:23,170 --> 00:09:27,670 Така работи ARGV 0, и нека да въведете число, едно две три четири едно две. 165 00:09:27,670 --> 00:09:30,840 Така че това ще отпечата число, един две три четири едно две. 166 00:09:30,840 --> 00:09:35,500 Има някои тънкости да atoi, че ще престанат да се грижат за нищо 167 00:09:35,500 --> 00:09:39,040 отвъд валиден цифров знак, но това няма значение. 168 00:09:39,040 --> 00:09:42,870 >> И така, какво мислите се случва ако направя това? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Сегментация вина. 171 00:09:47,050 --> 00:09:50,410 Така че, защо е това? 172 00:09:50,410 --> 00:09:56,060 Ако погледнем назад в нашата програма, ние сме конвертиране ARGV 1, първият аргумент 173 00:09:56,060 --> 00:09:59,610 след името на програмата, с число. 174 00:09:59,610 --> 00:10:03,350 Но няма аргумент след името на програмата. 175 00:10:03,350 --> 00:10:08,060 Така че тук, ние виждаме, че това е бъги програма, тъй като, ако се опитаме да го изпълним 176 00:10:08,060 --> 00:10:10,530 без никакви аргументи, тя просто ще се срине. 177 00:10:10,530 --> 00:10:16,950 >> Така че друг общ модел, който ще видим е нещо подобно, ако argc е по-малко 178 00:10:16,950 --> 00:10:21,100 от две, което показва, че не е имало най-малко име и програмата 179 00:10:21,100 --> 00:10:29,100 първият аргумент, а след това ние ще направим нещо като ФОРМАТ, не е достатъчно 180 00:10:29,100 --> 00:10:31,190 аргументи командния ред. 181 00:10:31,190 --> 00:10:33,170 Това вероятно не е добра, за да отпечатате, това е може би нещо, като 182 00:10:33,170 --> 00:10:35,440 трябва да въведете цяло число в командния ред. 183 00:10:35,440 --> 00:10:37,450 Аз просто ще го свършва дотук. 184 00:10:37,450 --> 00:10:39,600 И след това се върнете една. 185 00:10:39,600 --> 00:10:44,740 Така че не забравяйте, че в края на нашия програма, ако се върнем 0, че нещо 186 00:10:44,740 --> 00:10:47,060 показва успех. 187 00:10:47,060 --> 00:10:50,940 И главната също автоматично връща 0, ако не го направиш. 188 00:10:50,940 --> 00:10:55,800 >> Така че тук, ние сме едно пренастройване да се посочи че това не е успех. 189 00:10:55,800 --> 00:11:01,000 И вие можете да се върнете каквото искате, просто, 0 означава успех, а 190 00:11:01,000 --> 00:11:03,390 нещо друго показва недостатъчност. 191 00:11:03,390 --> 00:11:04,855 Така че нека да стартирате тази версия на нещата. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Така че сега, ако не въведете командния ред аргумент, че ще каже правилно 194 00:11:16,600 --> 00:11:18,290 нас, не е достатъчно, на командния ред. 195 00:11:18,290 --> 00:11:20,610 Още не довърши изречението. 196 00:11:20,610 --> 00:11:24,950 Иначе, ако ние всъщност го давате един, тя може да приключи програмата. 197 00:11:24,950 --> 00:11:27,920 Така че това е начина, по който ще използва argc в За да се потвърди броя на 198 00:11:27,920 --> 00:11:30,630 аргументи от командния ред, които реално са прехвърлени. 199 00:11:30,630 --> 00:11:39,360 >> Така че нека да направим тази програма е малко по- сложно, и погледнете в секунда 200 00:11:39,360 --> 00:11:42,180 повторение на нещата. 201 00:11:42,180 --> 00:11:46,310 Така че сега, ние сме не само отпечатването на първият аргумент командния ред. 202 00:11:46,310 --> 00:11:51,210 Ето, ние сме итерации от вътр I равни 0, аз е по-малко от argc, аз плюс 203 00:11:51,210 --> 00:11:55,280 плюс, и печат ARGV, индекс аз. 204 00:11:55,280 --> 00:11:59,300 Така този модел, отново, това е същото модел, както преди, освен вместо 205 00:11:59,300 --> 00:12:02,600 на свикване на променливата н, ние използваме argc. 206 00:12:02,600 --> 00:12:09,520 >> Така че това е итерации над всеки индекс в масива, и отпечатване на всяка 207 00:12:09,520 --> 00:12:11,910 елемент в този масив. 208 00:12:11,910 --> 00:12:20,300 И така, когато стартирате тази програма, добре, Не въвеждайте никаква команда линия 209 00:12:20,300 --> 00:12:22,540 аргументи, така че само разпечатки името на програмата. 210 00:12:22,540 --> 00:12:26,053 Ако въведете един куп неща, тя ще отпечатате един, всеки по своя собствена линия. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Така че нека да вземе това една стъпка по-нататък. 214 00:12:34,770 --> 00:12:38,890 И вместо да отпечатвате всеки аргумент по своя собствена линия, нека да отпечатате всяко 215 00:12:38,890 --> 00:12:42,590 характер на всеки аргумент по своя собствена линия. 216 00:12:42,590 --> 00:12:46,700 Така че не забравяйте, че е ARGV масив от низове. 217 00:12:46,700 --> 00:12:50,960 Така че това, което е низ, но набор от символи? 218 00:12:50,960 --> 00:12:57,140 Така че това означава, че ARGV е наистина масив от набор от символи. 219 00:12:57,140 --> 00:13:04,920 Така че, като се възползва от това, нека да пренебрегнем този за сега. 220 00:13:04,920 --> 00:13:08,190 Нека просто да разгледа низ ARGV 0. 221 00:13:08,190 --> 00:13:14,170 >> Така че, ако искаме да донесе на всеки знак на ARGV 0 на отделен ред, а след това аз искам 222 00:13:14,170 --> 00:13:19,500 да направи модела сме свикнали, аз е по-малко от дължината на масива, 223 00:13:19,500 --> 00:13:23,990 които тук се strlen на, това е не това, което искам да направя, низ 224 00:13:23,990 --> 00:13:26,450 S е равна ARGV 0. 225 00:13:26,450 --> 00:13:30,390 Така че е по-малко от дължината на нашия масив, който в този случай е масив 226 00:13:30,390 --> 00:13:34,410 на героите, аз плюс плюс. 227 00:13:34,410 --> 00:13:41,040 И така, както видяхме миналата седмица, той е идеален ако се движим, че strlen извън 228 00:13:41,040 --> 00:13:45,210 на състоянието, тъй като п ще се добавят на strlen на S всеки път, когато отидете 229 00:13:45,210 --> 00:13:47,720 през примката, и това е Няма да се променя. 230 00:13:47,720 --> 00:13:50,230 Така че ние ще го равно на п тук настроен. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Така че сега, ние сме итерации над всеки индекс в масива. 234 00:14:01,320 --> 00:14:05,630 И така, ако искаме да отпечатате всяко характер в този масив, сто в е 235 00:14:05,630 --> 00:14:06,880 флага искаме да използваме за знаците. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 И сега скоба аз ще бъде на низ, индекс характер аз, така че ако 238 00:14:19,770 --> 00:14:20,970 низ бяха здравей. 239 00:14:20,970 --> 00:14:27,530 тогава е 0 ще бъде ч, S скоба 1 ще бъде д, и така нататък. 240 00:14:27,530 --> 00:14:30,800 >> Така че сега ние искаме да се съчетаят тези две неща. 241 00:14:30,800 --> 00:14:35,440 Искаме да отпечатате всяко характер на всеки аргумент на командния ред. 242 00:14:35,440 --> 00:14:38,950 Така че ние ще трябва вложени за цикъл. 243 00:14:38,950 --> 00:14:47,480 И обикновено, първият брояч Аз съм, следващата ще бъде к, п 244 00:14:47,480 --> 00:14:54,450 ще бъде strlen на ARGV Аз, Аз е по-малко от N, аз плюс плюс. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 И сега вместо печат ARGV аз, така ARGV скоба аз ще индекс - 247 00:15:06,870 --> 00:15:14,280 че ще бъде на I-ия командния ред аргумент, ARGV I, J ще 248 00:15:14,280 --> 00:15:16,925 бъде jth характер на аргумента, I-та. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Ще се отърва от този тук сега тъй като ние го сложи в тази примка. 251 00:15:24,810 --> 00:15:33,900 Така че е еквивалентна на струнни и равни ARGV аз, а след това и скоба к. 252 00:15:33,900 --> 00:15:36,980 >> Е, ние не трябва да се декларира тази променлива и. 253 00:15:36,980 --> 00:15:44,530 Вместо това, ние просто ще се съчетаят тези две в това, което сме имали, ARGV I, J. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [недоловим]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: Добър разговор. 257 00:15:49,680 --> 00:15:52,936 Така че това е счупен. 258 00:15:52,936 --> 00:15:55,510 Ако аз всъщност го прокара, Бихме са осъзнали това. 259 00:15:55,510 --> 00:16:01,210 Така че на гишето ме интересува в този конкретен за 260 00:16:01,210 --> 00:16:05,410 контур е J, итератора. 261 00:16:05,410 --> 00:16:08,560 Така щеше да се сблъскате с проблеми, Вероятно един безкраен цикъл, ако ние 262 00:16:08,560 --> 00:16:09,540 не е определил това. 263 00:16:09,540 --> 00:16:12,220 Ето защо ние сме също така говори за отстраняване на грешки и днес. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Така че нека да стартирате тази програма. 266 00:16:15,240 --> 00:16:21,200 И нека действително добавите отделен ФОРМАТ точно тук, че просто ще се отпечата 267 00:16:21,200 --> 00:16:27,480 друга линия, тъй като това означава, че когато ние стартирате програмата, ще има празно 268 00:16:27,480 --> 00:16:31,830 линия между всеки един от героите на всеки аргумент командния ред. 269 00:16:31,830 --> 00:16:33,448 Е, ще видим какво означава това. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 Имаш някакъв бъг. 273 00:16:39,870 --> 00:16:42,860 Грешка неявно деклариране библиотека функция strlen. 274 00:16:42,860 --> 00:16:51,630 >> Така че се връщам в нашата програма, I Забравих да хеш включва string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Така string.h ще бъде заглавния файл, който обявява 277 00:16:57,730 --> 00:16:58,980 функцията strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, той съставя. 280 00:17:06,060 --> 00:17:09,109 Сега, нека да го стартирате. 281 00:17:09,109 --> 00:17:10,930 Така че точно това. 282 00:17:10,930 --> 00:17:17,790 Това ще отпечата ни име на програма, здравей свят. 283 00:17:17,790 --> 00:17:23,510 Това ще да отпечатате всяко нещо, всеки характер, по своя собствена линия. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Така че нека действително се възползвам от тази една стъпка по-нататък. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 И вместо да се използва string.h, нека мисля за това как бихме приложат собствената ни 288 00:17:39,700 --> 00:17:41,420 strlen функция. 289 00:17:41,420 --> 00:17:45,600 Така че аз веднага ще дам функция подпис. 290 00:17:45,600 --> 00:17:52,900 Така че нека да се обади в my_strlen, и това е Ще отнеме низ като аргумент, 291 00:17:52,900 --> 00:17:57,220 и ние очакваме да се върне на Продължителността на този низ. 292 00:17:57,220 --> 00:18:03,430 Е, къде е този човек? 293 00:18:03,430 --> 00:18:04,990 Да. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Така че не забравяйте, от по-рано, че слайда беше също от миналата седмица, че 296 00:18:12,900 --> 00:18:18,890 масив от знаци, добре, низ, така че нека да кажем, че това е нашата низ ите. 297 00:18:18,890 --> 00:18:29,870 Така че, ако S е низ, здравей, след това, H-E-L-L-O, в паметта, че ще 298 00:18:29,870 --> 00:18:35,610 да, и след това обратно наклонена черта 0 характер. 299 00:18:35,610 --> 00:18:39,170 >> Е, как да стигнем до дължината на S? 300 00:18:39,170 --> 00:18:43,190 Е, този трик се търсят за тази хлабина 0 характер, тази нищожна 301 00:18:43,190 --> 00:18:44,380 терминатор. 302 00:18:44,380 --> 00:18:50,270 Така че алгоритъма се случва да бъде нещо като няколко 303 00:18:50,270 --> 00:18:51,510 достатъчно знаци, които - 304 00:18:51,510 --> 00:18:56,180 нека да има тази ръка представляват някои брояч, нека наречем това Int дължина. 305 00:18:56,180 --> 00:19:00,060 Така че, като се започне от тук, ние сме ще обхождане на нашия низ. 306 00:19:00,060 --> 00:19:04,100 >> Така че първият знак, че е H, и това не е обратно наклонена черта 0, така че 307 00:19:04,100 --> 00:19:05,170 Дължината е 1. 308 00:19:05,170 --> 00:19:08,050 ITERATE към следващия знак, E, и това не е обратно наклонена черта 0. 309 00:19:08,050 --> 00:19:09,630 Дължина е 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 О, 5. 313 00:19:13,050 --> 00:19:16,690 И най-накрая, стигаме обратно наклонена черта 0, и така че това означава, добре, 314 00:19:16,690 --> 00:19:17,780 този низ е приключила. 315 00:19:17,780 --> 00:19:20,130 Така че нека да се върнем 5. 316 00:19:20,130 --> 00:19:33,630 >> Така че действително прилагане на това, на първо място, ми н дължина е равна на 0, дясната ми ръка. 317 00:19:33,630 --> 00:19:36,088 И ние отиваме, за да превъртате - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [недоловим] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: О, да стрелят. 320 00:19:38,640 --> 00:19:39,870 Добър избор. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Така н дължина е равна на 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Така че сега, докато е с дължина не равен и след това, наклонена черта 0. 325 00:19:58,310 --> 00:20:04,660 Така че не забравяйте, тази наклонена черта 0, това е действителния характер, и това показва, 326 00:20:04,660 --> 00:20:05,820 края на низа. 327 00:20:05,820 --> 00:20:09,850 Точно както, също така, наклонена черта п е действително характер. 328 00:20:09,850 --> 00:20:14,040 Обратно наклонена черта 0 ще посочи на края на нашия низ. 329 00:20:14,040 --> 00:20:15,414 Аз не искам да слагам, че там. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 И макар и индексирани с дължина, не е равна на нула терминатор, тогава 332 00:20:25,620 --> 00:20:27,130 ние просто ще увеличите дължина. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Така че след това, в края на нашата програма, дължина е в крайна сметка ще 335 00:20:34,880 --> 00:20:37,610 да бъде 5 в този случай. 336 00:20:37,610 --> 00:20:39,210 И ние просто ще се върне дължина. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Така че сега тук, аз не правя направи my_strlen. 340 00:20:48,290 --> 00:20:50,700 Нека да го компилирате да се уверите, всичко върви гладко. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Правех в 2? 343 00:20:58,210 --> 00:21:00,565 Или е, че един? 344 00:21:00,565 --> 00:21:01,940 Това трябва да направим. 345 00:21:01,940 --> 00:21:02,690 Добре. 346 00:21:02,690 --> 00:21:08,490 Така че това е ARGV 2. 347 00:21:08,490 --> 00:21:11,585 Работи като очакваното, въпреки че беше, че едно аз съм го направил в? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Да. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Тази версия на неща, които не са имали ФОРМАТ на новата линия след това, но тя 352 00:21:21,820 --> 00:21:22,910 не прави никаква разлика. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Така че работи както се очаква. 355 00:21:25,780 --> 00:21:34,750 >> Сега ние дори да комбинирате една стъпка по-нататък, където известие тук, добре, 356 00:21:34,750 --> 00:21:38,920 на първо място, ние сме измъкна strlen на ARGV аз, и тогава ние сме итерации над 357 00:21:38,920 --> 00:21:41,450 всеки герой в тази поредица. 358 00:21:41,450 --> 00:21:47,480 Така че вместо да правиш това, какво ще стане ако ние просто комбинирате тази логика на изчакване 359 00:21:47,480 --> 00:21:50,740 докато не удари наклонена черта 0 полето в това за цикъл? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Така обхождане докато ARGV I, J прави не е равно наклонена черта 0. 362 00:22:07,490 --> 00:22:10,680 Така че нека да го стартирате първия. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Добре. 365 00:22:21,180 --> 00:22:27,655 Така че тук, на това условие се казва - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 нека да изчистите това. 368 00:22:40,060 --> 00:22:49,140 Така че сега, нека това бъде нашата ARGV. 369 00:22:49,140 --> 00:22:55,290 Така че, когато аз просто избяга тази програма преди, ARGV е масив от низове. 370 00:22:55,290 --> 00:23:03,100 И така, ако аз го изпълним с точка наклонена черта ARGV 2, здравей свят, тогава ARGV 371 00:23:03,100 --> 00:23:07,650 се е дължина 3, за ARGV нула, здравей, и свят. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> И вътре на всеки от тези показатели е самия масив, където това ще бъде 374 00:23:19,660 --> 00:23:23,780 точка, това ще бъде наклонена черта, аз не знам ако това е правилната посока, аз 375 00:23:23,780 --> 00:23:25,680 Не мисля, че беше. 376 00:23:25,680 --> 00:23:30,110 A-R-V тире, се нуждаят от повече пространство. 377 00:23:30,110 --> 00:23:32,570 Да се ​​нарязва на този масив. 378 00:23:32,570 --> 00:23:38,230 A-R-V тире 0, и след това обратно наклонена черта 0. 379 00:23:38,230 --> 00:23:43,160 И тогава в безпорядък ще бъде здравей. 380 00:23:43,160 --> 00:23:45,910 Да речем, H-E наклонена черта 0. 381 00:23:45,910 --> 00:23:51,130 И най-накрая, W-O наклонена черта 0. 382 00:23:51,130 --> 00:23:59,730 >> Така че алгоритъмът, че ние просто пише, Вложеният за линии, това, което те са 383 00:23:59,730 --> 00:24:07,321 правите, е, ние първо трябва на противодействие аз и тогава J. 384 00:24:07,321 --> 00:24:15,206 Това би било по-лесно с кода в екран: Нека да се върнем към това. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Така че забележите, че аз е итератор, че е итерации над всяка команда 387 00:24:24,600 --> 00:24:25,610 аргумент линия. 388 00:24:25,610 --> 00:24:28,870 И J е итератор итерации над всеки един от героите в тази 389 00:24:28,870 --> 00:24:30,410 аргумент командния ред. 390 00:24:30,410 --> 00:24:46,755 Така че това, което този съкровената ФОРМАТ прави е, ние сме ФОРМАТ ARGV 0 0, ФОРМАТ 391 00:24:46,755 --> 00:24:58,680 ARGV 0 1, ФОРМАТ ARGV 0 2 0 3 0 4 0 5, 6 0, но сега, ARGV 0 7 ще 392 00:24:58,680 --> 00:25:00,670 равен наклонена черта 0. 393 00:25:00,670 --> 00:25:05,730 >> Така че след това ние се оттегляме, че за линия, и сега аз да повтаря едно. 394 00:25:05,730 --> 00:25:10,910 И сега ние ще печат ARGV 1 0, 1 1 ARGV - 395 00:25:10,910 --> 00:25:17,040 Е, сега, тъй като аз нарязани здравей кратко, ARGV 1 2 отново ще бъде 396 00:25:17,040 --> 00:25:18,170 наклонена черта 0. 397 00:25:18,170 --> 00:25:25,050 И така, аз и нарастване продължи, и така нататък, докато не отпечатате всички 398 00:25:25,050 --> 00:25:28,580 свят, и тези, които са три на командния ред аргументи, а ние ще излезете от 399 00:25:28,580 --> 00:25:31,670 най-външния контур, и завърши нашата програма. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Така че нека да се върна тук. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Така че ще спечелят някои познаване командния ред аргументи за това 406 00:25:52,370 --> 00:25:54,460 Особен проблем настроен. 407 00:25:54,460 --> 00:25:56,630 >> Сега, отстраняване на грешки. 408 00:25:56,630 --> 00:26:01,680 Така че, най-вероятно вече трябваше да направя някои грешки с предишния 409 00:26:01,680 --> 00:26:03,120 проблем настроен. 410 00:26:03,120 --> 00:26:08,420 И един много лесен начин за отстраняване на грешки, на първо място, нека да разгледаме програма, бъги. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Е, ходене чрез тази програма, ние ще поиска от потребителя за 413 00:26:23,830 --> 00:26:29,350 число, вземете че число, и след това, произволно, ние имаме една линия, докато, че 414 00:26:29,350 --> 00:26:32,280 е просто ще декрементира аз, докато тя е равна на 10. 415 00:26:32,280 --> 00:26:35,820 Нека просто да приемем, аз съм въвеждане цяло число по-голямо от 10. 416 00:26:35,820 --> 00:26:38,700 Така декрементира аз, докато тя е равна на 10. 417 00:26:38,700 --> 00:26:42,630 >> И след това имаме още един, докато контур че, докато аз не е равно на 0, ние сме 418 00:26:42,630 --> 00:26:44,540 ще декрементира аз от 3. 419 00:26:44,540 --> 00:26:49,790 Така че, ако ви видя на намерението на бъг тук, е, че това ще декрементира аз да 420 00:26:49,790 --> 00:26:57,010 да бъде 10, а след това тази линия, докато воля намаляване и от 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 отрицателна 2, отрицателна 5, и така нататък, на отрицателна безкрайност, тъй като аз ще 422 00:27:02,880 --> 00:27:05,920 всъщност никога не се равнява на 0. 423 00:27:05,920 --> 00:27:08,610 И след това в края на тази програма, имаме функцията Foo което е 424 00:27:08,610 --> 00:27:12,130 става за печат, че аз. 425 00:27:12,130 --> 00:27:16,520 >> Така че това е кратък и тривиален програма, и грешката е очевидна, 426 00:27:16,520 --> 00:27:18,790 особено след като току-що каза каква е била грешката. 427 00:27:18,790 --> 00:27:24,840 Но целта тук е, добре, това може да всъщност изглежда като някои от вашите 428 00:27:24,840 --> 00:27:30,040 решения от алчни от последните проблем настроен, и може би ви е нужно 429 00:27:30,040 --> 00:27:32,800 някои безкраен цикъл във вашата програма, и вие нямате представа 430 00:27:32,800 --> 00:27:34,100 какво го причинява. 431 00:27:34,100 --> 00:27:38,690 Така че е много полезна техника за отстраняване на грешки е просто да добавите printfs 432 00:27:38,690 --> 00:27:40,180 целия си код. 433 00:27:40,180 --> 00:27:49,200 >> Така че тук аз искам ФОРМАТ извън първа линия, докато. 434 00:27:49,200 --> 00:27:53,155 И тук искам ФОРМАТ, и аз просто ще отпечатате аз. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Аз дори ще направя първата линия, докато, аз. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Отвън, докато вторият цикъл. 439 00:28:09,040 --> 00:28:12,170 За пореден път, отпечатайте вътре от тук, стойността аз. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 И нека да стартирате тази. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Така точка наклонена черта отстраняване на грешки. 444 00:28:24,800 --> 00:28:25,610 Въведете цяло число. 445 00:28:25,610 --> 00:28:28,150 Нека да направим 13. 446 00:28:28,150 --> 00:28:28,760 И бум. 447 00:28:28,760 --> 00:28:33,300 Ние виждаме, че ние сме безкрайно обикаляне вътре в секунда, докато примката. 448 00:28:33,300 --> 00:28:36,305 Така че сега ние знаем какво е бъг. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Но ФОРМАТ отстраняване на грешки е напълно страхотно, но след като си програми получават 451 00:28:45,610 --> 00:28:50,560 по-дълго и по-сложно, има по-сложни решения 452 00:28:50,560 --> 00:28:51,705 Първи Нещата труд. 453 00:28:51,705 --> 00:28:52,955 Така че нека да се премахнат всички тези printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 И нека да сме сигурни, че не е направил чупи нищо. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Така че програмата отиваме да се въведе, се нарича 458 00:29:14,180 --> 00:29:16,715 GDB, за GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Ами, всъщност, да се премахне за отстраняване на грешки второ, и да трасира отново. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Ами, всъщност първо, един добър урок в аргументите командния ред. 463 00:29:34,440 --> 00:29:37,780 Забележете, че това звъня команда, която е съставяне всичко се предава 464 00:29:37,780 --> 00:29:41,300 в командния ред, тези аргументи командния ред. 465 00:29:41,300 --> 00:29:46,250 Така че как точно ще се използва аргументи на командния ред, тъй като ние 466 00:29:46,250 --> 00:29:51,500 преди, и както щете в PSET 2, това е как звъня ги използва. 467 00:29:51,500 --> 00:30:00,070 >> Така че забележите, че този първи флаг, тире ggdb3, че това, което казва, е, звъня, 468 00:30:00,070 --> 00:30:03,790 трябва да компилирате този файл с намерение, че ние в крайна сметка ще 469 00:30:03,790 --> 00:30:05,380 трябва да го развенчава. 470 00:30:05,380 --> 00:30:13,840 Така че, стига да имат този флаг, Тогава ще можем да GDB отстраняване на грешки. 471 00:30:13,840 --> 00:30:17,380 И тя ще се отвори на GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Така че има много команди че трябва да свикнеш. 473 00:30:22,920 --> 00:30:27,100 Първо едно, че най-вероятно ще веднага се нуждаете е Run. 474 00:30:27,100 --> 00:30:28,200 Така че това, което се управлява смяташ да правиш? 475 00:30:28,200 --> 00:30:30,910 Ще започнем нашата програма. 476 00:30:30,910 --> 00:30:36,180 Така тичайте, като се започне програма, програмата ни пита за цяло число, 13. 477 00:30:36,180 --> 00:30:39,170 И след това е безкрайно обикаляне като Очаква се, освен махнах 478 00:30:39,170 --> 00:30:40,500 printfs, така че ние дори не видя това. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Излезли нормално. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Това е възможно, че тя обви всички обратно, обратно към - пренебрегвайки факта, че. 484 00:30:53,640 --> 00:30:55,170 Да приемем, че не излезете нормално. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Има сложен отговор на това. 487 00:31:03,370 --> 00:31:07,890 >> Така че сега, че не е много полезно. 488 00:31:07,890 --> 00:31:11,480 Така че просто работи нашата програма вътре в този дебъгер не ни помага по никакъв 489 00:31:11,480 --> 00:31:15,610 начин, тъй като ние може просто да се направи дот наклонена черта отстраняване на грешки от извън GDB. 490 00:31:15,610 --> 00:31:21,250 Така командата която най-вероятно ще - 491 00:31:21,250 --> 00:31:22,970 и аз ще напусна това. 492 00:31:22,970 --> 00:31:25,850 Control-D или се откажат, и двамата работят. 493 00:31:25,850 --> 00:31:29,550 Така че нека да го отворите отново. 494 00:31:29,550 --> 00:31:31,130 >> Друга команда, която най-вероятно ще веднага искам да 495 00:31:31,130 --> 00:31:33,600 свикнеш е Break. 496 00:31:33,600 --> 00:31:37,120 Така че ние ще се счупи на главната за сега, и след това ще ти обясня това. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Е, тук виждаме ние зададете точка на прекъсване в този ред в debug.c. 499 00:31:46,370 --> 00:31:50,160 Така че това, което пауза средства е, че когато тип писта, програмата ще 500 00:31:50,160 --> 00:31:53,560 продължат да вървят, докато Ударих точка на прекъсване. 501 00:31:53,560 --> 00:31:59,390 Така че, когато удари план, програмата започва, и след това тя се разпада веднага след като го 502 00:31:59,390 --> 00:32:01,940 влиза в основната функция. 503 00:32:01,940 --> 00:32:06,930 Пробив главната ще бъде нещо вие доста често правя. 504 00:32:06,930 --> 00:32:11,340 >> И сега, за да ви запозная до още няколко команди. 505 00:32:11,340 --> 00:32:14,330 Забележете, че той казва, че проби по линия 11, който е 506 00:32:14,330 --> 00:32:16,230 ФОРМАТ, въведете цяло число. 507 00:32:16,230 --> 00:32:21,260 Така че командата Next ще бъде как отиваме на следващия ред код. 508 00:32:21,260 --> 00:32:24,810 Това ще ни позволи да се оттегли чрез нашата програма ред по ред. 509 00:32:24,810 --> 00:32:26,260 Така че следващия. 510 00:32:26,260 --> 00:32:29,820 >> Сега ред 12, отиваме за да получите цяло число. 511 00:32:29,820 --> 00:32:30,450 Next. 512 00:32:30,450 --> 00:32:34,290 А ако просто удари Въведете отново, тя ще ремонтирам последното нещо, което си направил. 513 00:32:34,290 --> 00:32:36,480 Така че аз не трябва да въведете Следващата всеки път. 514 00:32:36,480 --> 00:32:40,100 Така че, въведете цяло число, 13. 515 00:32:40,100 --> 00:32:46,940 Така че сега, линия 14, докато аз е по-голяма от 10, а аз ще правя по-нататък. 516 00:32:46,940 --> 00:32:48,685 И ние виждаме, ние ще декрементира аз. 517 00:32:48,685 --> 00:32:50,210 Така че ние ще декрементира аз отново. 518 00:32:50,210 --> 00:32:53,620 >> Така че сега, друга полезна команда Print. 519 00:32:53,620 --> 00:32:55,750 Така Print ще разпечатате стойността на променливата. 520 00:32:55,750 --> 00:32:57,825 Да се ​​изведат стойност на променлива аз. 521 00:32:57,825 --> 00:32:58,705 Нека да отпечатате аз. 522 00:32:58,705 --> 00:33:00,910 Ще кажа, че е 11. 523 00:33:00,910 --> 00:33:03,330 Сега ние Next отново, докато и е по-голямо от 10. 524 00:33:03,330 --> 00:33:05,590 Така че аз все още е по-голяма от 10, тъй като това е 11. 525 00:33:05,590 --> 00:33:06,920 аз минус минус. 526 00:33:06,920 --> 00:33:08,250 Нека да отпечатате отново. 527 00:33:08,250 --> 00:33:10,950 Както се очакваше, това е 10. 528 00:33:10,950 --> 00:33:12,510 >> Така че сега, в непосредствена близост. 529 00:33:12,510 --> 00:33:16,250 Той се връща към състоянието, е по-голяма от 10, но сега е 10, така че 530 00:33:16,250 --> 00:33:20,040 това не е по-голямо от 10, така че можем да очакваме да падне от примката време. 531 00:33:20,040 --> 00:33:22,220 И сега сме под тази линия на код. 532 00:33:22,220 --> 00:33:28,750 И друга команда, List, е просто ще за да се покаже предишната и следващата 533 00:33:28,750 --> 00:33:31,240 няколко реда код, в случай, че загубих себе си. 534 00:33:31,240 --> 00:33:35,420 Така че ние просто излезе тази линия, докато, и сега сме навлезли тази 535 00:33:35,420 --> 00:33:37,080 докато линия, линия 18. 536 00:33:37,080 --> 00:33:39,860 Така че, докато аз не е равно на 0. 537 00:33:39,860 --> 00:33:46,570 И по-нататък, аз се равнява аз минус 3, а ние ще забележите, това просто ще продължим. 538 00:33:46,570 --> 00:33:48,270 И ние можем да отпечатате аз. 539 00:33:48,270 --> 00:33:49,990 >> Всяка команда вид има бързи клавиши. 540 00:33:49,990 --> 00:33:51,720 Така че р е кратък за Print. 541 00:33:51,720 --> 00:33:53,400 Така че ние можем р аз. 542 00:33:53,400 --> 00:33:57,550 Просто продължавайте да държите н, или продължаваш да правиш Next. 543 00:33:57,550 --> 00:33:58,340 Печат и отново. 544 00:33:58,340 --> 00:34:00,380 Виждате ли сега, че е отрицателна 167. 545 00:34:00,380 --> 00:34:06,030 Така че това ще продължи вечно, но не наистина завинаги, тъй като току-що видяхте, то 546 00:34:06,030 --> 00:34:09,330 всъщност ще свърши в някакъв момент. 547 00:34:09,330 --> 00:34:15,699 >> Така, че е началото GDB. 548 00:34:15,699 --> 00:34:19,504 Но нека да направим още едно нещо в GDB. 549 00:34:19,504 --> 00:34:20,754 Ъ-ъ, отстраняване на грешки. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Така че, в този конкретен случай, безкраен цикъл се случи да бъде в рамките на 552 00:34:28,534 --> 00:34:30,050 основната функция. 553 00:34:30,050 --> 00:34:35,779 И за сега, просто приемете, че аз съм ще се премести в безкраен цикъл в 554 00:34:35,779 --> 00:34:37,029 функцията Foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Само не забравяйте, че в края на този програма, добре, това е първоначално 557 00:34:43,730 --> 00:34:46,210 призовава Foo, която беше просто ще отпечата аз. 558 00:34:46,210 --> 00:34:51,880 Но сега ние се обаждате Foo, което е ще декрементира аз, докато тя е 0, и 559 00:34:51,880 --> 00:34:54,548 след това да отпечатате тази променлива. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Запиши това. 562 00:34:57,970 --> 00:35:00,175 Направете отстраняване на грешки. 563 00:35:00,175 --> 00:35:03,310 И сега, GDB отстраняване на грешки. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Така че, ако аз просто Run тогава аз няма да да е в състояние действително да засили чрез моя 566 00:35:10,580 --> 00:35:11,730 програмата ред по ред. 567 00:35:11,730 --> 00:35:19,820 Така че нека да се прекъсне най-основната, и след това въведете план. 568 00:35:19,820 --> 00:35:28,160 Така че проверете това, ФОРМАТ, въведете цяло число, да получите числото, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Така че ние ще продължим да Декрементирането докато не е по-голямо от 10. 571 00:35:37,490 --> 00:35:42,840 След това отиваме да падне в докато контур, и стигнем до линията - 572 00:35:42,840 --> 00:35:44,364 нека си го отваря в отделен прозорец. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Така че ние декрементирани докато аз вече не беше по-голяма от 10, и след това ние 575 00:35:53,300 --> 00:35:55,700 нарича функцията, Foo. 576 00:35:55,700 --> 00:36:01,340 >> Така че това, което се е случило веднага след като се удари функция Foo, добре, Обадих Foo, и 577 00:36:01,340 --> 00:36:04,030 След това вече нямах контрол над GDB. 578 00:36:04,030 --> 00:36:10,230 Така че веднага след като се удари Next в този ред, нещата продължиха, докато това се случи, 579 00:36:10,230 --> 00:36:12,400 когато програмата отпадна, когато - 580 00:36:12,400 --> 00:36:14,450 Предполагам, че това не е съществувала в крайна сметка. 581 00:36:14,450 --> 00:36:16,390 Видя го спрем за малко все пак. 582 00:36:16,390 --> 00:36:22,040 Така че защо аз губя контрол над програмата в този момент? 583 00:36:22,040 --> 00:36:27,540 Е, когато пиша по-нататък, че отива да буквалния следващия ред на код, който 584 00:36:27,540 --> 00:36:28,850 ще се изпълни. 585 00:36:28,850 --> 00:36:35,950 Така че, след като ред 21, на следващия ред на код че ще изпълни е ред 22, 586 00:36:35,950 --> 00:36:38,520 което е, излизане от главния. 587 00:36:38,520 --> 00:36:43,810 Така че аз не искам просто да отида на следващия ред на код. 588 00:36:43,810 --> 00:36:48,170 Искам да отида в функция, Foo, и след това да преминете през 589 00:36:48,170 --> 00:36:49,830 тези редове код. 590 00:36:49,830 --> 00:36:53,726 >> Така че, имаме алтернатива. 591 00:36:53,726 --> 00:36:56,770 Да се ​​откажат от това отново. 592 00:36:56,770 --> 00:36:58,020 Пробив главната. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Ъ-ъ, един, следващия, следващия, 13, в непосредствена близост, следващото, следващото, внимателно, 595 00:37:06,370 --> 00:37:09,820 преди да удари линия Foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Така че сега, ние сме на ред 21, където ние наричаме Foo. 598 00:37:13,700 --> 00:37:17,100 Ние не искаме да въведете следващата, тъй като това Просто ще се обадя на функция Foo, и 599 00:37:17,100 --> 00:37:18,710 преминете към следващия ред код. 600 00:37:18,710 --> 00:37:20,840 Това, което искате да използвате, е стъпка. 601 00:37:20,840 --> 00:37:25,690 Така че има разлика между Step и следващо място, където Step стъпки в 602 00:37:25,690 --> 00:37:28,190 функционира, и Next отива върху функцията. 603 00:37:28,190 --> 00:37:32,830 Той просто изпълнява целостта на функцията и продължава да работи. 604 00:37:32,830 --> 00:37:37,210 >> Така стъпка ще ни донесе във функцията, Foo. 605 00:37:37,210 --> 00:37:41,160 И ние виждаме тук, сега, ние сме обратно в тази линия, докато това е на теория, 606 00:37:41,160 --> 00:37:44,190 ще продължи завинаги. 607 00:37:44,190 --> 00:37:50,420 И ако ви удари стъпка, когато не е дори функция да се обадя, а след това е 608 00:37:50,420 --> 00:37:51,720 идентичен с Next. 609 00:37:51,720 --> 00:37:55,320 Така че това е само когато сте на линия, която призовава функция, която Стъпка 610 00:37:55,320 --> 00:37:56,970 ще се различава от Next. 611 00:37:56,970 --> 00:37:57,930 Така стъпка ще ни доведе тук. 612 00:37:57,930 --> 00:38:02,100 Стъпка, стъпка, стъпка, стъпка, стъпка, стъпка, и Просто ще безкраен цикъл завинаги. 613 00:38:02,100 --> 00:38:06,810 >> Така че може да се използва за тази, като начин за идентифициране на безкрайни цикли, е 614 00:38:06,810 --> 00:38:08,960 просто държим този клавиш, за да въведете да видим къде можете да заседнат. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Има по-добри начини да се направи това, но за сега, че е напълно достатъчно. 617 00:38:14,780 --> 00:38:17,967 И стилистично, че да съответстват Style 50, което трябваше да направя това. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Така че една последна команда, за да се въведе. 621 00:38:28,400 --> 00:38:30,810 Е, нека GDB дебъгване инча 622 00:38:30,810 --> 00:38:35,580 Така че, вместо да се счупи при главния, ако I знам функцията Foo е и 623 00:38:35,580 --> 00:38:39,230 проблем, тогава може да има само каза, почивка в Foo, вместо. 624 00:38:39,230 --> 00:38:42,310 Да кажем, че почивката двата основни и Foo. 625 00:38:42,310 --> 00:38:45,390 Така че можете да настроите възможно най-много точки на прекъсване колкото искате. 626 00:38:45,390 --> 00:38:49,230 Когато пиша план, това ще да спират на - 627 00:38:49,230 --> 00:38:52,180 О, нека да компилирате, тъй като Промених нещата. 628 00:38:52,180 --> 00:38:55,950 Ще видите тази линия, Внимание, източник файл е по-скорошна от изпълним. 629 00:38:55,950 --> 00:38:59,680 Така че това означава, че аз просто отидох в тук и да се промени това, че да съответстват Style 630 00:38:59,680 --> 00:39:03,100 50, но не съм прекомпилирате програмата. 631 00:39:03,100 --> 00:39:04,870 Така GDB ме кара да се наясно с това. 632 00:39:04,870 --> 00:39:10,130 Аз ще напусна, направи отстраняване на грешки отново, удари GDB отстраняване на грешки. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Така че сега, обратно на това, което правя. 635 00:39:12,800 --> 00:39:15,720 Пробив главната, почивка Foo. 636 00:39:15,720 --> 00:39:20,680 Сега ако стартирате програмата, така че е ще продължи, докато удря 637 00:39:20,680 --> 00:39:21,320 точка на прекъсване. 638 00:39:21,320 --> 00:39:24,680 Това прекъсване се случва да бъде първият милион към основната. 639 00:39:24,680 --> 00:39:28,630 Сега, вместо да правиш следващото, следващото, следващото, следващото, следващото, докато не удари Foo, I 640 00:39:28,630 --> 00:39:35,230 да въведете продължи, което ще продължи докато не се удари в следващата точка на прекъсване. 641 00:39:35,230 --> 00:39:37,200 Трябва да въведете число на първо място. 642 00:39:37,200 --> 00:39:40,570 Продължи ще продължи, докато не удари на Следващата точка на прекъсване, което е, че 643 00:39:40,570 --> 00:39:43,320 функция на Foo. 644 00:39:43,320 --> 00:39:50,130 >> Така Run ще тече, докато не удари точка на прекъсване, но пък изпишете само тичам, когато 645 00:39:50,130 --> 00:39:54,060 сте се започне програмата, и след това, от този момент нататък, това е продължи. 646 00:39:54,060 --> 00:40:01,950 Ако аз просто направих пробие основната и след това се завтече, че ще прекъсне в 647 00:40:01,950 --> 00:40:03,670 Основната, и след това да продължите. 648 00:40:03,670 --> 00:40:10,050 Тъй като аз не разполагат с критичната точка на Foo, въведете цяло число, след това сега съм 649 00:40:10,050 --> 00:40:11,380 не ще да се прекъсне най-Foo. 650 00:40:11,380 --> 00:40:16,318 Тя просто ще безкрайност контур до това. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Така че това е Intro да GDB. 654 00:40:24,420 --> 00:40:27,790 Вие трябва да започнете да го използвате в проблемните комплекти. 655 00:40:27,790 --> 00:40:30,550 Тя може да бъде много полезен да се идентифицират грешки. 656 00:40:30,550 --> 00:40:35,280 Ако действително само, ред по ред, отидете чрез кода си, и сравни това, което е 657 00:40:35,280 --> 00:40:39,740 всъщност се случва с това, което се очаква да се случи, то това е доста 658 00:40:39,740 --> 00:40:41,060 трудно да пропуснете вашите грешки. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Така че миналата седмица Дейвид възпитали таен ключ, криптография неща за на 663 00:40:54,040 --> 00:40:59,350 първият път, когато ние не искаме пароли просто да се съхраняват на нашия 664 00:40:59,350 --> 00:41:03,210 компютър по някакъв обикновен текстов файл, където някой може да дойде и просто 665 00:41:03,210 --> 00:41:04,660 го отворите и да ги чете. 666 00:41:04,660 --> 00:41:07,530 В идеалния случай, те ще бъдат криптирани по някакъв начин. 667 00:41:07,530 --> 00:41:13,340 И в Проблем Set 2, ще се занимава с един метод за криптиране, 668 00:41:13,340 --> 00:41:16,520 или, добре, два метода, но те не са толкова големи. 669 00:41:16,520 --> 00:41:20,050 Ако го направите хакерската издание, ти си Също така няма да се занимава с 670 00:41:20,050 --> 00:41:22,150 декодиране на някои неща. 671 00:41:22,150 --> 00:41:29,770 >> Така че въпросът сега е, добре, дори и ако ние имаме най-силната криптиране 672 00:41:29,770 --> 00:41:34,830 алгоритъм в света, ако изберете особено лошо парола, след това го 673 00:41:34,830 --> 00:41:37,720 няма да ви помогне много, тъй като хората все още ще бъде в състояние да го разбера. 674 00:41:37,720 --> 00:41:41,530 Дори ако видя криптирана низ и тя изглежда като каша от боклук 675 00:41:41,530 --> 00:41:44,760 това не означава нищо за тях, ако те все още просто трябва да опитате няколко пароли 676 00:41:44,760 --> 00:41:50,560 за да го разбера, тогава вие не са много сигурни. 677 00:41:50,560 --> 00:41:55,890 Така че гледането на видео, което прави тази точка. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO PLAYBACK] 680 00:42:00,970 --> 00:42:02,100 >> -Helmet, можете Fiend. 681 00:42:02,100 --> 00:42:03,370 Какво става? 682 00:42:03,370 --> 00:42:05,170 Какво правиш с дъщеря ми? 683 00:42:05,170 --> 00:42:09,910 >> -Позволете ми да ви представя брилянтния млад пластичен хирург, д-р Филип 684 00:42:09,910 --> 00:42:13,730 Schlotkin, най-голямото носа работа човек в целия 685 00:42:13,730 --> 00:42:16,080 вселената и Бевърли Хилс. 686 00:42:16,080 --> 00:42:17,210 >> -Ваше Височество. 687 00:42:17,210 --> 00:42:18,070 >> -Nose работа? 688 00:42:18,070 --> 00:42:18,670 Не разбирам. 689 00:42:18,670 --> 00:42:20,090 Тя вече имаше операция на носа. 690 00:42:20,090 --> 00:42:21,910 Беше сладък шестнадесет подарък. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Това не е това, което си мислите. 693 00:42:23,690 --> 00:42:25,420 Това е много, много по-лошо. 694 00:42:25,420 --> 00:42:30,300 Ако не ми дадеш комбинацията за въздушния щит, д-р Schlotkin ще 695 00:42:30,300 --> 00:42:34,226 даде дъщеря си обратно стария си нос. 696 00:42:34,226 --> 00:42:35,476 >> -No. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Откъде взехте това? 699 00:42:40,516 --> 00:42:41,440 >> -Добре. 700 00:42:41,440 --> 00:42:42,180 Аз ще кажа. 701 00:42:42,180 --> 00:42:43,381 Аз ще кажа. 702 00:42:43,381 --> 00:42:44,263 Не, татко. 703 00:42:44,263 --> 00:42:45,590 Не, не трябва. 704 00:42:45,590 --> 00:42:46,860 >> -Прав си, мила моя. 705 00:42:46,860 --> 00:42:48,450 Ще ми липсва новия си нос. 706 00:42:48,450 --> 00:42:52,090 Но аз няма да му кажа, комбинацията, без значение какво. 707 00:42:52,090 --> 00:42:53,680 >> -Много добре. 708 00:42:53,680 --> 00:42:55,685 Д-р Schlotkin, направете си най-лошото. 709 00:42:55,685 --> 00:42:56,914 >> -За мен е удоволствие. 710 00:42:56,914 --> 00:43:00,690 >> [TOOLS СЕ заточени] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Изчакайте. 713 00:43:02,520 --> 00:43:03,836 Изчакайте. 714 00:43:03,836 --> 00:43:05,300 Аз ще кажа. 715 00:43:05,300 --> 00:43:06,880 Аз ще кажа. 716 00:43:06,880 --> 00:43:09,130 >> -Знаех си, че ще работи. 717 00:43:09,130 --> 00:43:09,900 Добре. 718 00:43:09,900 --> 00:43:12,850 Дайте го на мен. 719 00:43:12,850 --> 00:43:16,918 >> -Комбинацията е един. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> -Two. 723 00:43:19,358 --> 00:43:19,846 >> -Two. 724 00:43:19,846 --> 00:43:20,822 >> -Two. 725 00:43:20,822 --> 00:43:21,310 >> -Три. 726 00:43:21,310 --> 00:43:21,798 >> -Три. 727 00:43:21,798 --> 00:43:22,774 >> -Три. 728 00:43:22,774 --> 00:43:23,262 >> -Four. 729 00:43:23,262 --> 00:43:23,750 >> -Four. 730 00:43:23,750 --> 00:43:26,150 >> -Four. 731 00:43:26,150 --> 00:43:27,010 >> -Five. 732 00:43:27,010 --> 00:43:27,670 >> -Five. 733 00:43:27,670 --> 00:43:29,010 >> -Five. 734 00:43:29,010 --> 00:43:34,770 >> -Така комбинацията е един, две, три, четири, пет. 735 00:43:34,770 --> 00:43:37,460 Това е най-тъпото комбинацията Която съм чувал през живота си. 736 00:43:37,460 --> 00:43:39,710 Това е едно от нещата, идиот би имала върху багажа му. 737 00:43:39,710 --> 00:43:42,000 >> -Благодаря ви, Ваше Височество. 738 00:43:42,000 --> 00:43:43,530 >> -Какво си направил? 739 00:43:43,530 --> 00:43:44,490 >> -Обърнах се на разстояние от стената. 740 00:43:44,490 --> 00:43:45,420 >> -Не, не си. 741 00:43:45,420 --> 00:43:45,840 Можете изключен целия филм. 742 00:43:45,840 --> 00:43:46,930 >> -Сигурно съм натиснал грешен бутон. 743 00:43:46,930 --> 00:43:48,265 >> -Ами, сложи я отново. 744 00:43:48,265 --> 00:43:49,110 Поставете филма отново. 745 00:43:49,110 --> 00:43:49,510 >> -Да, сър. 746 00:43:49,510 --> 00:43:49,917 Да, сър. 747 00:43:49,917 --> 00:43:50,324 >> -Да вървим, Арнолд. 748 00:43:50,324 --> 00:43:51,140 Хайде, Гретхен. 749 00:43:51,140 --> 00:43:53,060 Разбира се, вие знаете, че все пак ще Трябва да ви таксуваме за това. 750 00:43:53,060 --> 00:43:53,440 >> [END възпроизвеждане на видео] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Добре. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Така че сега, че ние сме вече говори за сигурността в някои отношения, хубав 754 00:44:08,430 --> 00:44:16,050 Малко филм плакат, така че в неотдавнашно ден, тези въпроси с НСА 755 00:44:16,050 --> 00:44:17,300 мониторинг всичко. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Тя може да бъде трудно да се чувстват като теб има някакъв вид на правото на неприкосновеност на 758 00:44:26,930 --> 00:44:34,540 онлайн свят, въпреки че не мога да кажа вие повечето от детайлите на Prism. 759 00:44:34,540 --> 00:44:42,130 Така се движи отвъд призма, ние не отиваме да се говори за това, сега 760 00:44:42,130 --> 00:44:44,030 мисля за вашия лаптоп. 761 00:44:44,030 --> 00:44:48,360 Така че тук, искам да превключите до реалното ми сметка, 762 00:44:48,360 --> 00:44:50,370 с моя малък пингвин. 763 00:44:50,370 --> 00:44:57,310 Така че аз имам набор парола, както и че парола е каквото си искам да бъде. 764 00:44:57,310 --> 00:45:02,430 >> Но не забравяйте, че това, което аз съм сеч в с, така че това влизане 765 00:45:02,430 --> 00:45:04,850 бърза, е някоя програма. 766 00:45:04,850 --> 00:45:07,910 Това е някаква програма, която беше написана от един човек. 767 00:45:07,910 --> 00:45:13,250 И така, това лице, ако те са особено злонамерени, те биха могли 768 00:45:13,250 --> 00:45:17,780 казах, добре, така че ако паролата че аз въведете е равна на моята 769 00:45:17,780 --> 00:45:22,800 действителната парола, или това е равно до някаква специална парола - 770 00:45:22,800 --> 00:45:25,550 David е страхотно или нещо такова - 771 00:45:25,550 --> 00:45:27,190 след това да ги пусне вътре 772 00:45:27,190 --> 00:45:33,760 Така че един злонамерен програмист може да има достъп до всички ваши Macs, или 773 00:45:33,760 --> 00:45:36,150 Windows, или нещо подобно. 774 00:45:36,150 --> 00:45:41,980 >> Така че не е много по-голям проблем, тъй като, Искам да кажа, това е влизане програма 775 00:45:41,980 --> 00:45:48,720 която е доставена с OS X, стотици или хиляди хора имат 776 00:45:48,720 --> 00:45:50,020 преразглежда този код. 777 00:45:50,020 --> 00:45:55,330 И така, ако в кода си някъде, вие казват, че ако този низ се равнява на равни 778 00:45:55,330 --> 00:45:58,860 David е страхотно, вход, след това някой е Ще бъде, като, изчакайте. 779 00:45:58,860 --> 00:45:59,800 Това не е правилно. 780 00:45:59,800 --> 00:46:01,790 Това не трябва да е тук. 781 00:46:01,790 --> 00:46:06,650 Така че това е един от начините да стигнем неща да бъде защитен вид. 782 00:46:06,650 --> 00:46:10,300 >> Но помисли дори програми че ти пиша. 783 00:46:10,300 --> 00:46:13,000 Да речем, че е написал програмата за вход. 784 00:46:13,000 --> 00:46:20,440 Така че това влизане програма, която сте написали, така очевидно, че сте добър 785 00:46:20,440 --> 00:46:21,210 програмист. 786 00:46:21,210 --> 00:46:25,610 Вие не започваш да се постави всеки злонамерен ако х е равно на е равно на Дейвид е страхотен 787 00:46:25,610 --> 00:46:27,860 в кода си. 788 00:46:27,860 --> 00:46:31,930 Но тази програма, това, което правите използвате, за да съставят тази програма? 789 00:46:31,930 --> 00:46:34,180 Нещо като звъня. 790 00:46:34,180 --> 00:46:38,460 И какво, ако лицето, което се е случило с напиши звъня специален двукорпусен в звъня 791 00:46:38,460 --> 00:46:44,310 нещо подобно, ако аз съм съставянето на идентифицирайте програма, след това въведете този код 792 00:46:44,310 --> 00:46:49,720 в програмата за вход, която казва, ако х е равно равнява David е страхотно? 793 00:46:49,720 --> 00:46:59,890 Така че все още не съвсем, но ние имаме едни и същи Въпросът тук, където звъня, добре, 794 00:46:59,890 --> 00:47:03,790 хиляди, ако не и десетки хиляди хора, са се занимавали с звъня, да има 795 00:47:03,790 --> 00:47:07,160 погледна към своите реда код и каза, Всичко е наред, няма нищо лошо тук. 796 00:47:07,160 --> 00:47:10,680 Очевидно е, че никой не се справя всичко това злонамерен. 797 00:47:10,680 --> 00:47:15,780 >> Но това, което е самата звъня, като, Ами ако се съберат звъня? 798 00:47:15,780 --> 00:47:20,900 Какво става, ако имам някакъв компилатор, че компилира звъня, че вмъква в звъня 799 00:47:20,900 --> 00:47:25,610 този специален хак, който казва, добре, когато компилирате звъня, тогава 800 00:47:25,610 --> 00:47:31,290 изпълним ли да се следва специално да потърсите във вътрешността на програмата за влизане и вложка 801 00:47:31,290 --> 00:47:34,230 тази парола, се равнява на равни Dave е страхотно? 802 00:47:34,230 --> 00:47:37,990 Така че не забравяйте, че вашият самия компилатор трябва да бъде съставен в някакъв момент. 803 00:47:37,990 --> 00:47:42,810 Така че, ако това, което сте избрали да съставят звъня с, себе си е злонамерен, а след това 804 00:47:42,810 --> 00:47:45,580 може да се завинти на цялата начин за установяване на ред. 805 00:47:45,580 --> 00:47:49,630 >> Така че тук, ние имаме Ken Thompson и Денис Ричи. 806 00:47:49,630 --> 00:47:53,780 Така че това е една икона снимка. 807 00:47:53,780 --> 00:47:55,470 Денис Ричи е от дясната страна. 808 00:47:55,470 --> 00:47:58,740 Той е голям - 809 00:47:58,740 --> 00:48:03,640 почти пише C. Така че можете да му благодаря за този клас. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson е в ляво. 811 00:48:04,840 --> 00:48:07,780 В две от тях в общи линии пише UNIX. 812 00:48:07,780 --> 00:48:10,140 Е, те са основни донори в UNIX. 813 00:48:10,140 --> 00:48:11,310 Имаше някои други. 814 00:48:11,310 --> 00:48:16,240 Така Кен Томпсън, в някакъв момент, той печели наградата на Тюринг. 815 00:48:16,240 --> 00:48:20,860 И наградата Тюринг, винаги съм чувал тя съотнесени този начин, това е най- 816 00:48:20,860 --> 00:48:23,100 Нобеловата награда по компютърни науки. 817 00:48:23,100 --> 00:48:27,500 >> Така в наградата Тюринг, той трябва да даде му реч. 818 00:48:27,500 --> 00:48:31,790 И той дава тази много известна реч сега, наречена Размисли върху Доверявайки 819 00:48:31,790 --> 00:48:35,620 Trust, който сме вързали За да на сайта на курса. 820 00:48:35,620 --> 00:48:41,670 И в тази реч, казва той, добре, затова написах UNIX, и сега всички 821 00:48:41,670 --> 00:48:43,320 ви хора използват UNIX. 822 00:48:43,320 --> 00:48:46,960 Сега, не забравяйте, че днес е Linux пряк потомък на UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X пряко използва UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows не прави толкова много, но много на идеи бяха взети от UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Така той отива на сцената и казва: Всичко е наред, аз написах UNIX. 826 00:48:59,220 --> 00:49:03,940 И точно затова вие знаете, аз съм можете да влезете във всеки 827 00:49:03,940 --> 00:49:05,590 един от вашите компютри. 828 00:49:05,590 --> 00:49:14,280 Тъй като сложих една от тези специални ако х равнява се равнява на Ken Thomson е страхотно, 829 00:49:14,280 --> 00:49:16,350 тогава аз съм позволено да влезнете. 830 00:49:16,350 --> 00:49:18,370 Така че хората са като, добре, Как го направи това? 831 00:49:18,370 --> 00:49:21,090 Разгледахме програмата за вход и нищо не е там. 832 00:49:21,090 --> 00:49:24,700 Той е като, добре, аз модифициран компилатор , за да влезете в програмата за вход 833 00:49:24,700 --> 00:49:30,490 така че програмата за влизане сега ще има че х е равно равнява Ken Thompson 834 00:49:30,490 --> 00:49:31,700 е страхотно. 835 00:49:31,700 --> 00:49:33,120 >> И те казват, добре, че не е вярно. 836 00:49:33,120 --> 00:49:35,740 Търсим най-компилатора, и компилатор няма никакви линии на 837 00:49:35,740 --> 00:49:36,400 код подобно. 838 00:49:36,400 --> 00:49:40,540 Той е като, добре, но това, което сте съставянето на компилатора с? 839 00:49:40,540 --> 00:49:44,810 И те мислят, а той е, като, добре, Аз съм този, който ви е дал на компилатора 840 00:49:44,810 --> 00:49:50,580 използвате, за да съставят компилатора, така че компилирате компилатор, че 841 00:49:50,580 --> 00:49:56,390 себе си е злонамерен, и ще прекъсне програмата за вход. 842 00:49:56,390 --> 00:49:59,360 Така че, общо взето, в този момент, има никакъв начин не бихте могли да потърсите при източника 843 00:49:59,360 --> 00:50:02,450 код на програмата за вход за да видите какво не е наред. 844 00:50:02,450 --> 00:50:04,220 Вие дори не може да погледне в изходния код на компилатора 845 00:50:04,220 --> 00:50:06,790 за да видите какво не е наред. 846 00:50:06,790 --> 00:50:11,940 >> Може би трябва да погледнем в машината код, действителната двоичен на 847 00:50:11,940 --> 00:50:16,760 компилиран компилатор, за да видите, чакай, това реда код не трябва да са тук. 848 00:50:16,760 --> 00:50:22,130 Но Кен Томпсън го взе една крачка допълнително и каза, добре, има 849 00:50:22,130 --> 00:50:25,980 тези специални програми, които всъщност да ви помогне да прочетете двоичен на програми, 850 00:50:25,980 --> 00:50:29,340 и така, ако някой е използвал тази програма да се прочетете двоичен, те ще видят те 851 00:50:29,340 --> 00:50:30,490 реда код. 852 00:50:30,490 --> 00:50:34,020 Той модифициран тези програми, за да се каже, всичко, Добре, ако търсите най- 853 00:50:34,020 --> 00:50:38,460 компилатор, не показват това конкретно набор от двоичен. 854 00:50:38,460 --> 00:50:42,830 >> Така че след това трябва да се вземат, че една стъпка допълнително и в общи линии, които могат да имат 855 00:50:42,830 --> 00:50:46,210 предприети няколко нива на околните, и в някакъв момент, никой не е действително 856 00:50:46,210 --> 00:50:47,990 ще бъде проверка. 857 00:50:47,990 --> 00:50:52,590 Така че поуката от историята е, че си няма да се пише 858 00:50:52,590 --> 00:50:54,340 Звъня в този клас. 859 00:50:54,340 --> 00:50:57,020 Ти започваш да се използва за катерене Звъня много в този клас. 860 00:50:57,020 --> 00:51:00,490 За всичко, което знам, звъня е злонамерена програма, която се саботират всеки 861 00:51:00,490 --> 00:51:03,520 една програма, което някога сте компилиран. 862 00:51:03,520 --> 00:51:08,206 И да ви оставя на това много зловещо обърнете внимание, ще видите в сряда. 863 00:51:08,206 --> 00:51:10,030 >> [APPLAUSE] 864 00:51:10,030 --> 00:51:12,935 >> SPEAKER 2: На следващото CS50. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Да не си посмяла да кажа, че. 866 00:51:14,580 --> 00:51:15,930 Можете да направите това. 867 00:51:15,930 --> 00:51:19,440 Вие сте направили това и преди, можете да направите това днес, можете да направите това утре. 868 00:51:19,440 --> 00:51:20,930 Вие сте били прави това в продължение на години. 869 00:51:20,930 --> 00:51:22,790 Просто отидете там и да направим това. 870 00:51:22,790 --> 00:51:24,310 Можете да направите това. 871 00:51:24,310 --> 00:51:26,102 >> [За възпроизвеждане на музика]