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 >> [Відеовідтворення] 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 CS50 власної Роб Боден. 11 00:00:32,880 --> 00:00:33,872 >> [КІНЕЦЬ відеовідтворення] 12 00:00:33,872 --> 00:00:39,340 >> [Оплески, що переходять в овацію] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: фільмографія в що відео є фантастичним. 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 Це завтра в 1: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 Томмі 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 Так що, якщо ви пам'ятаєте з минулого тижня, Програма століття, що Давид ввів 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 внутр я дорівнює 0, я менше п, я плюс 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 >> Так що пам'ятайте, що, коли ми заявляємо, масив розміру п, індекси в тому, що 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 Тут ми називаємо їх внутр агдс і струнні 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 Так агдс, що відбувається, щоб вказати, скільки аргументів ми в 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 >> ОК. 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 Так от, агдс буде три. 90 00:05:03,350 --> 00:05:07,720 Це кількість аргументів в командному рядку. 91 00:05:07,720 --> 00:05:12,840 ARGC завжди принаймні 1, так як точка скоротити вік, себе, вважається одним з 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 Так рядок агду, ми збираємося, щоб побачити, містить рядки, точка слеш 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 >> [Відеовідтворення] 101 00:05:43,890 --> 00:05:46,240 >> НЕ-До цих пір в програмах ми написано, ми заявляємо 102 00:05:46,240 --> 00:05:48,500 Основним як тап_п недійсними. 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 І тепер, замість того, порожнеча, я збираюся вказати Int назвою агдс і 115 00:06:26,330 --> 00:06:28,780 масив рядків званих агду. 116 00:06:28,780 --> 00:06:31,820 Тепер, агдс і агду є просто конвенцій. 117 00:06:31,820 --> 00:06:34,000 >> Ми могли б назвати ці аргументи Найбільш все, що ми хочемо. 118 00:06:34,000 --> 00:06:37,630 Але важливо те, що агдс є внутр тому, за визначенням, це 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 агду, тим часом, аргумент вектор, є збирається бути насправді масив зберігання 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 Відкрити кронштейн. 128 00:07:04,730 --> 00:07:06,240 Закрити кронштейн. 129 00:07:06,240 --> 00:07:10,510 Printf відсотків із зворотного косою і кома. 130 00:07:10,510 --> 00:07:14,550 А тепер я повинен сказати Printf яке значення для підключення до цієї заповнювача. 131 00:07:14,550 --> 00:07:18,600 Я хочу перше слово, яке користувач повинен набрали після імені програми, 132 00:07:18,600 --> 00:07:23,130 і тому я збираюся вказати агду кронштейн 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 >> [КІНЕЦЬ відеовідтворення] 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 показати, якщо ми друкуємо агду 0, зробити, тепер що це таке, агду 0, точка слеш агду 0. 150 00:08:24,710 --> 00:08:30,440 Так що, як очікується, це виведення на друк Назва програми, так як агду 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 >> Так в основному, ми начебто повторної реалізації 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 >> Так ще одна поширена картина, то ви побачите, буде щось на зразок, якщо агдс менше 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 А потім повернути 1. 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 >> Так от, ми перенастроювання 1, щоб вказати що це не успіх. 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 Тут ми ітерації від десяткового я рівних 0, я менше агдс, я плюс 203 00:11:51,210 --> 00:11:55,280 плюс, і друк агду, індекс р. 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 >> ОК. 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 Тому пам'ятайте, що агду є масив рядків. 217 00:12:46,700 --> 00:12:50,960 Так що це рядок, але масив символів? 218 00:12:50,960 --> 00:12:57,140 Так це значить, що агду дійсно Масив масив символів. 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 >> Так що якщо ми хочемо принести кожен символ агду 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 з одно агду 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 з с кожного разу ми йдемо 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 >> ОК. 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 Тоді S 0 буде H, 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 І зазвичай, перший лічильник Я, на наступний буде J, п 244 00:14:47,480 --> 00:14:54,450 буде STRLEN з ARGV г, г менше п, я плюс плюс. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 І тепер замість печатки агду I, так агду кронштейн я збирається індексу - 247 00:15:06,870 --> 00:15:14,280 що буде г-я командного рядка Аргумент, агду I, J збирається 248 00:15:14,280 --> 00:15:16,925 бути JTH характер г-я аргумент. 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 Так еквівалентно рівних струни з агду я, а потім з кронштейн J. 252 00:15:33,900 --> 00:15:36,980 >> Ну, ми не повинні оголосити ця змінна с. 253 00:15:36,980 --> 00:15:44,530 Замість цього, ми просто поєднати ці два в те, що у нас було, агду I, J. 254 00:15:44,530 --> 00:15:45,780 >> Виступаючий 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 цикл у, ітератор. 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 >> ОК. 265 00:16:13,120 --> 00:16:15,240 Так що давайте запустити цю програму. 266 00:16:15,240 --> 00:16:21,200 І давайте насправді додати окремий Printf прямо тут, що буде просто роздрукувати 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 ООП. 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 >> Так повертаючись в нашу програму, я забув хеш включають 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 Добре, він компілює. 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 ОК. 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 ОК. 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 Так що якщо з це рядок, привіт, а потім, Н-Е-Л-Л-О, в пам'яті, що відбувається, щоб 298 00:18:29,870 --> 00:18:35,610 бути, і то це зворотна коса риска 0 характер. 299 00:18:35,610 --> 00:18:39,170 >> Так як же нам отримати довжину з? 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 Перебір до наступного символу, 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 O, 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 >> Виступаючий 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 Бум. 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 >> ОК. 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 Чи в тому, що 1? 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 Так що це агду 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 ОК. 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 ОК. 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 Так ітерації в той час як агду 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 Так що тепер, нехай це буде наша агду. 369 00:22:49,140 --> 00:22:55,290 Тому, коли я просто побіг цю програму раніше, агду є масив рядків. 370 00:22:55,290 --> 00:23:03,100 Так от, якщо я запускаю його з точковою слеш ARGV 2, привіт світ, то агду 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 -R-V тире, потрібно більше місця. 377 00:23:30,110 --> 00:23:32,570 Давайте нарізати цьому масиві. 378 00:23:32,570 --> 00:23:38,230 -R-V тире 0, а потім зворотний слеш 0. 379 00:23:38,230 --> 00:23:43,160 А потім безладно буде привіт. 380 00:23:43,160 --> 00:23:45,910 Скажімо, Н-Е зворотну косу риску 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 робити є, ми спочатку повинні протистояти I, а потім J. 384 00:24:07,321 --> 00:24:15,206 Це було б простіше з кодом на екран, Давайте повернемося до цього. 385 00:24:15,206 --> 00:24:17,476 ОК. 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 Так що ж це внутрішній Е робить Тобто, ми Printf агду 0 0, Е 391 00:24:46,755 --> 00:24:58,680 агду 0 1, Е агду 0 2 0 3, 0 4, 0 5, 0 6, але тепер, агду 0 7 збирається 392 00:24:58,680 --> 00:25:00,670 дорівнює зворотний слеш 0. 393 00:25:00,670 --> 00:25:05,730 >> Отже, ми вийти, що для циклу, і тепер я ітерація 1. 394 00:25:05,730 --> 00:25:10,910 І тепер ми збираємося друку агду 1 0, агду 1 січня - 395 00:25:10,910 --> 00:25:17,040 добре, тепер, так як я вирізав привіт Коротше кажучи, агду 2 січень знову буде 396 00:25:17,040 --> 00:25:18,170 зворотний слеш 0. 397 00:25:18,170 --> 00:25:25,050 І так, збільште I і продовжити, і так далі, поки ми не роздрукувати всі 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 ОК. 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 збирається зменшувати I на 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 >> Так от я хочу Printf межами першу чергу, а петля. 434 00:27:49,200 --> 00:27:53,155 І тут я хочу Printf, і я просто роздрукувати I. 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 ОК. 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 Зверніть увагу, що це Clang команда, яка є компіляції все передається 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, от як Clang використовує їх. 467 00:29:51,500 --> 00:30:00,070 >> Так зауважити, що це перший прапор, тире ggdb3, що це говорить є, Clang, 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 відладчик. 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 О. 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 звикнути до того, Перерва. 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 Так команда Наступна буде, як ми йдемо в наступному рядку коду. 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 Наступна. 512 00:32:30,450 --> 00:32:34,290 І якщо ви просто натисніть Enter знову, воно буде повторити останнє, що ви зробили. 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 І ми бачимо, що ми збираємося зменшити I. 517 00:32:48,685 --> 00:32:50,210 Так що ми збираємося для зменшення я знову. 518 00:32:50,210 --> 00:32:53,620 >> Так що тепер, ще один корисний команда друку. 519 00:32:53,620 --> 00:32:55,750 Так Роздрукувати збирається роздрукувати Значення змінної. 520 00:32:55,750 --> 00:32:57,825 Давайте виявити значення змінної I. 521 00:32:57,825 --> 00:32:58,705 Давайте друкувати I. 522 00:32:58,705 --> 00:33:00,910 Це буде сказати, що я на 11. 523 00:33:00,910 --> 00:33:03,330 Тепер ми ще раз Далі, в той час як я більше 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 І інша команда, Список, просто буде для відображення попереднього і наступного 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 І, далі, я дорівнює I мінус 3, і ми будемо Відзначимо, це буде просто продовжувати йти. 538 00:33:46,570 --> 00:33:48,270 І ми можемо надрукувати I. 539 00:33:48,270 --> 00:33:49,990 >> Кожна команда роду має ярлики. 540 00:33:49,990 --> 00:33:51,720 Так р короткий для друку. 541 00:33:51,720 --> 00:33:53,400 Таким чином, ми можемо P I. 542 00:33:53,400 --> 00:33:57,550 Просто утримуйте п, або продовжувати робити Далі. 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, який був просто в друк I. 558 00:34:46,210 --> 00:34:51,880 Але тепер ми називаємо Фу, який є збирається зменшувати I, поки це не 0, а 559 00:34:51,880 --> 00:34:54,548 потім роздрукувати цю змінну. 560 00:34:54,548 --> 00:34:55,469 ОК. 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 ОК. 565 00:35:04,090 --> 00:35:10,580 >> Так що, якщо я просто запустити то я не збираюся бути в змозі фактично покроково мій 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, ну, я подзвонив Фу, і 577 00:36:01,340 --> 00:36:04,030 не те я вже не мав контролю над GDB. 578 00:36:04,030 --> 00:36:10,230 Тому, як тільки я вдарив Далі в цій лінії, речі продовжували, поки це не сталося, 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 Я хочу піти в функцію, Фу, а потім ще й покроково 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 Е-е, 1, поруч, поруч, 13, поруч, Далі, наступний, обережно, 595 00:37:06,370 --> 00:37:09,820 перш ніж ми потрапили рядки Foo. 596 00:37:09,820 --> 00:37:10,520 ОК. 597 00:37:10,520 --> 00:37:13,700 >> Так що тепер, ми в рядку 21, де ми називаємо Foo. 598 00:37:13,700 --> 00:37:17,100 Ми не хочемо, щоб ввести наступний, так що просто викликати функцію Фу, і 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 Так що є різниця між кроці А поруч, де Крок кроки в 602 00:37:25,690 --> 00:37:28,190 функціонувати, і Наступна йде на себе функцію. 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 ідентичний Далі. 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 І стилістично, щоб відповідати стилю 50, я повинен був зробити це. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 ОК. 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 Тому замість того, ламаючи при основній, якщо я знати функцію 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 Так це значить, що я просто пішов сюди і змінив їх у відповідність із стилі 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 ОК. 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 Тепер, замість того, щоб робити наступний, наступний, наступний, наступний, наступний, поки я не потрапив Фу, я 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 функція харчової. 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 не збирається зламати в харчовій. 650 00:40:11,380 --> 00:40:16,318 Це просто буде до нескінченності цикл, поки що. 651 00:40:16,318 --> 00:40:17,568 ОК. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Так от Введення в 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 ОК. 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 І в задачі встановити 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 >> [Відеовідтворення] 680 00:42:00,970 --> 00:42:02,100 >> -Шолом, ви злодій. 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 >> -Ніс робота? 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 >> -Ні. 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 >> -Ні. 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 >> [ІНСТРУМЕНТИ точать] 711 00:43:00,690 --> 00:43:01,910 >> -Ні. 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 >> -Один. 721 00:43:17,406 --> 00:43:18,382 >> -Один. 722 00:43:18,382 --> 00:43:19,358 >> -Два. 723 00:43:19,358 --> 00:43:19,846 >> -Два. 724 00:43:19,846 --> 00:43:20,822 >> -Два. 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 >> -Чотири. 729 00:43:23,262 --> 00:43:23,750 >> -Чотири. 730 00:43:23,750 --> 00:43:26,150 >> -Чотири. 731 00:43:26,150 --> 00:43:27,010 >> -П'ять. 732 00:43:27,010 --> 00:43:27,670 >> -П'ять. 733 00:43:27,670 --> 00:43:29,010 >> -П'ять. 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 >> [КІНЕЦЬ відеовідтворення] 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 Так виходить за рамки PRISM, ми не збираємося щоб говорити про те, що, в даний час 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 Девід є дивним або щось - 771 00:45:25,550 --> 00:45:27,190 то нехай їх сюди 772 00:45:27,190 --> 00:45:33,760 Так шкідливий програміст може мати доступ до всіх ваших Mac, або 773 00:45:33,760 --> 00:45:36,150 Вікна, або що-небудь. 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 Девід є дивним, Логін, то хтось буде, як, почекайте. 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 Щось на зразок Clang. 790 00:46:34,180 --> 00:46:38,460 Так що якщо людина, яка, виявилося, написати Clang спеціальне упакованим в Clang 791 00:46:38,460 --> 00:46:44,310 щось на зразок, якщо я компіляції увійдіть програму, а потім введіть цей код 792 00:46:44,310 --> 00:46:49,720 в програму авторизації, яка каже, якщо х дорівнює дорівнює Девід є дивним? 793 00:46:49,720 --> 00:46:59,890 Так що не зовсім ще, але у нас є те ж саме видавати тут, де Clang, ну, 794 00:46:59,890 --> 00:47:03,790 тисячі, якщо не десятки тисяч люди, дивилися на Clang, є 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 >> Але те, що брязкотом себе, начебто, що, якщо я компіляції Clang? 798 00:47:15,780 --> 00:47:20,900 Що робити, якщо у мене є компілятор, який компілює Clang, який вставляє в Clang 799 00:47:20,900 --> 00:47:25,610 цей спеціальний хак, який говорить, все гаразд, коли я компіляції Clang, то 800 00:47:25,610 --> 00:47:31,290 виконуваний я отримую повинні спеціально шукати всередині програми входу в систему і вставки 801 00:47:31,290 --> 00:47:34,230 цей пароль, дорівнює рівних Дейв є дивним? 802 00:47:34,230 --> 00:47:37,990 Тому пам'ятайте, що ваш компілятор сам повинен бути скомпільований в якийсь момент. 803 00:47:37,990 --> 00:47:42,810 Так що, якщо те, що ви обираєте для компіляції Clang с, саме по собі є шкідливим, то ви 804 00:47:42,810 --> 00:47:45,580 може бути п'яним всю шлях вниз лінії. 805 00:47:45,580 --> 00:47:49,630 >> Так от, у нас є Кен Томпсон і Денніс Рітчі. 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 в значній мірі писав С. Таким чином, ви можете подякувати йому за цього класу. 810 00:48:03,640 --> 00:48:04,840 Кен Томсон знаходиться на лівій стороні. 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 Довіра, яку ми пов'язані Щоб на сайті курсу. 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 Вікна не так багато, але багато ідей були взяті з 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 Так як я поклав один з них спеціальним, якщо х дорівнює дорівнює Кен Томсон є дивним, 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 так що програма Ввійти тепер доведеться що х одно одно Кен Томпсон 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 Для всіх ви знаєте, Clang є шкідливою програма, яка саботує кожен 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 >> [Оплески] 864 00:51:10,030 --> 00:51:12,935 >> СПІКЕР 2: На наступному CS50. 865 00:51:12,935 --> 00:51:14,580 >> СПІКЕР 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 >> [Музика грає]