1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUZYKA GRA] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: W porządku. 4 00:00:12,100 --> 00:00:15,620 Więc, po pierwsze pierwszą rzeczą, wideo ze znajomą twarz. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [ODTWARZANIE] 7 00:00:22,560 --> 00:00:23,370 >> -Wszystko w porządku. 8 00:00:23,370 --> 00:00:27,150 Jest CS50, a to Początek trzech tygodni. 9 00:00:27,150 --> 00:00:29,980 Przykro mi, że nie mogłem być tam z wami dzisiaj, ale pozwolić mi przedstawić 10 00:00:29,980 --> 00:00:32,880 CS50 własnej Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [KONIEC ODTWARZANIE WIDEO] 12 00:00:33,872 --> 00:00:39,340 >> [Aplauz i CHEERS] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: filmografia w że film jest fantastyczny. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Dobrze. 16 00:00:47,770 --> 00:00:50,960 Więc po pierwsze, że jest inny obiad. 17 00:00:50,960 --> 00:00:52,330 To jutro o 1:15. 18 00:00:52,330 --> 00:00:54,480 Nie ma lunchu w piątek. 19 00:00:54,480 --> 00:00:55,810 Jest z Quora. 20 00:00:55,810 --> 00:01:00,190 I Tommy jeszcze nie ma, ale jeden z ludzie tam jest były szef, CF 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Więc jest zabawa facet. 23 00:01:02,730 --> 00:01:04,819 Powinieneś przyjść. 24 00:01:04,819 --> 00:01:05,900 >> Dobrze. 25 00:01:05,900 --> 00:01:11,360 Tak więc w zeszłym tygodniu rozpoczęliśmy łamanie oprócz o tym, co naprawdę jest ciąg. 26 00:01:11,360 --> 00:01:14,830 Wiedzieliśmy od początku, że to sekwencja znaków. 27 00:01:14,830 --> 00:01:18,130 Ale w zeszłym tygodniu, że zagłębił się faktem że to, co jest naprawdę sekwencja 28 00:01:18,130 --> 00:01:22,110 znaków, dobrze, teraz mamy tablice znaków. 29 00:01:22,110 --> 00:01:26,450 I wiemy, że ciąg, to tablica znaków, na samym końcu, 30 00:01:26,450 --> 00:01:30,920 mamy ten specjalny bajt null, to backslash 0, który wskazuje koniec 31 00:01:30,920 --> 00:01:32,230 ciąg. 32 00:01:32,230 --> 00:01:36,970 >> A więc ciąg jest tablicą znaków, ale możemy mieć więcej niż 33 00:01:36,970 --> 00:01:39,530 tylko tablica znaków, możemy mieć tablicę dowolnego 34 00:01:39,530 --> 00:01:40,890 typu rzeczy chcemy. 35 00:01:40,890 --> 00:01:51,570 Tak więc, jeśli przypomnieć, z ostatniego tygodnia, Program wprowadzony Dawid wieków 36 00:01:51,570 --> 00:01:53,560 bardzo szybko. 37 00:01:53,560 --> 00:01:57,010 Tak więc pierwszą rzeczą, którą zamierzamy zrobić, to zwrócić się do użytkownika o liczbę całkowitą, 38 00:01:57,010 --> 00:01:58,800 liczba osób w pokoju. 39 00:01:58,800 --> 00:02:01,260 Kiedy już mamy tę liczbę całkowitą, my deklarując tablicę. 40 00:02:01,260 --> 00:02:02,890 Zauważ składni wspornika. 41 00:02:02,890 --> 00:02:04,540 Masz zamiar się do tego przyzwyczaić. 42 00:02:04,540 --> 00:02:09,430 >> Więc my deklarując tablicę liczb całkowitych zwane grupy wiekowe, a są n 43 00:02:09,430 --> 00:02:12,080 liczbami całkowitymi w tej tablicy. 44 00:02:12,080 --> 00:02:16,480 Więc ten wzór tutaj, to 4 int i jest równe 0, i jest mniejsza niż n, i Plus 45 00:02:16,480 --> 00:02:20,580 oraz, który także będzie wzór że można się bardzo przyzwyczajeni. 46 00:02:20,580 --> 00:02:24,000 Bo to jest dość dużo, jak jesteś zawsze będzie iteracyjne nad tablic. 47 00:02:24,000 --> 00:02:26,330 Więc pamiętaj, że n jest długość naszej tablicy. 48 00:02:26,330 --> 00:02:32,120 A więc tutaj jesteśmy wielokrotnie prosząc do wieku osoby, którą w pokoju. 49 00:02:32,120 --> 00:02:36,640 >> Po tym, jedziemy w dół, a na co arbitralne powód, my wtedy 50 00:02:36,640 --> 00:02:40,220 wydrukować, jak stary idą za rok od teraz. 51 00:02:40,220 --> 00:02:49,980 I działa ten program, niech dokonać wieku, dot wieku ukośnymi. 52 00:02:49,980 --> 00:02:53,010 Tak więc liczba osób w pokoju, Można powiedzieć, że są trzy. 53 00:02:53,010 --> 00:02:59,880 I powiedzieć, pierwsza osoba jest 13, następny jest 26, a ostatnio 30. 54 00:02:59,880 --> 00:03:05,080 Tak więc będzie to w ciągu tych trzech iteracji ludzi, wydrukować 14, 27 i 31. 55 00:03:05,080 --> 00:03:16,060 >> Więc pamiętaj, że kiedy deklarujemy Tablica wielkości n, że indeksy w 56 00:03:16,060 --> 00:03:19,950 tablica, tablica ma wartości i indeksy 0, 1, 2, wszystkie sposobem 57 00:03:19,950 --> 00:03:21,680 do n minus 1. 58 00:03:21,680 --> 00:03:26,255 Więc kiedy powiedziała, że ​​były trzy osoby w pokoju, a my tu umieścić 59 00:03:26,255 --> 00:03:29,850 Pierwsza iteracja przez to pętla, i będzie 0. 60 00:03:29,850 --> 00:03:31,650 Tak w indeksie 0. 61 00:03:31,650 --> 00:03:34,540 Jesteśmy przypisywania pierwszy starzejemy użytkownik wprowadzi. 62 00:03:34,540 --> 00:03:38,870 Potem w następnym, wchodzimy Drugi n użytkownik wprowadza, w 63 00:03:38,870 --> 00:03:40,580 obok dwóch, ostatnich n. 64 00:03:40,580 --> 00:03:44,200 >> Więc zauważyć, że tablica rozmiarów trzy nie ma nic 65 00:03:44,200 --> 00:03:46,040 indeksu trzy. 66 00:03:46,040 --> 00:03:49,036 To nie jest ważne. 67 00:03:49,036 --> 00:03:50,250 Dobrze. 68 00:03:50,250 --> 00:03:55,136 Więc, wracając tutaj. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Więc teraz, że mamy do czynienia z tablicami, mamy pewne znajomości. 71 00:04:01,590 --> 00:04:03,780 Teraz mamy zamiar przenieść się do polecenia Argumenty wiersza, które będą 72 00:04:03,780 --> 00:04:05,890 dość istotne dla tego zestawu problemów. 73 00:04:05,890 --> 00:04:09,670 >> Tak aż do teraz, gdy masz ogłosił swoją główną funkcję, mamy 74 00:04:09,670 --> 00:04:11,230 powiedział int main nieważne. 75 00:04:11,230 --> 00:04:14,070 Więc po prostu oznacza, że ​​nieważne nie przechodzą wszelkie 76 00:04:14,070 --> 00:04:16,440 argumenty tej funkcji. 77 00:04:16,440 --> 00:04:19,190 Teraz mamy zamiar zobaczyć, że main może potrwać kilka argumentów. 78 00:04:19,190 --> 00:04:22,470 Tutaj nazywamy je int argc i wsporniki ARGV smyczkowych. 79 00:04:22,470 --> 00:04:26,930 Wsporniki ponownie, wskazując że mamy do czynienia z tablic. 80 00:04:26,930 --> 00:04:31,850 Więc tutaj, wsporniki ciąg ARGV, jesteśmy czynienia z tablicy ciągów. 81 00:04:31,850 --> 00:04:35,360 Tak argc, że będzie wskazywać jak wiele argumentów mamy 82 00:04:35,360 --> 00:04:37,580 przekazywane do tego programu. 83 00:04:37,580 --> 00:04:46,050 I zobaczyć, co to znaczy, Zamknijmy to. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Tak aż do teraz, co mamy uruchomić Program jak dot wieku ukośnymi. 86 00:04:50,790 --> 00:04:55,250 Możemy również, w wierszu polecenia, obok przekazywać argumenty, zatem termin, polecenie 87 00:04:55,250 --> 00:04:56,550 Argumenty wiersza. 88 00:04:56,550 --> 00:04:59,760 Tak więc pierwszy argument, witaj świecie. 89 00:04:59,760 --> 00:05:03,350 Więc tutaj, argc będzie trzy. 90 00:05:03,350 --> 00:05:07,720 Jest to liczba argumentów w wierszu poleceń. 91 00:05:07,720 --> 00:05:12,840 Argc jest zawsze co najmniej 1, ponieważ kropka slash wieku, się, liczy się jako jeden z 92 00:05:12,840 --> 00:05:14,490 Argumenty wiersza poleceń. 93 00:05:14,490 --> 00:05:17,010 >> Następnie komentarzy jest pierwszy. 94 00:05:17,010 --> 00:05:20,460 Jeśli kropki wieku slash jest zerowe, a następnie witam to pierwszy, a świat jest 95 00:05:20,460 --> 00:05:22,830 Drugi argument linii poleceń. 96 00:05:22,830 --> 00:05:29,490 Więc argv ciąg, idziemy zobaczyć, zawiera łańcuchy, dot ukośnik 97 00:05:29,490 --> 00:05:33,830 grupy wiekowe, witam, i świat. 98 00:05:33,830 --> 00:05:38,945 I, na zamówienie Dawida, jedziemy odtworzyć video wprowadzające że. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [ODTWARZANIE] 101 00:05:43,890 --> 00:05:46,240 >> -Do tej pory w programach my ve napisane, jakie deklarują 102 00:05:46,240 --> 00:05:48,500 Głównym jako int main nieważne. 103 00:05:48,500 --> 00:05:51,170 I przez cały ten czas, że nieważne jest po prostu określa, że ​​został 104 00:05:51,170 --> 00:05:54,430 Program nie ponosi Argumenty wiersza poleceń. 105 00:05:54,430 --> 00:05:57,750 Innymi słowy, gdy użytkownik uruchomi Program, może on dostarczyć polecenie 106 00:05:57,750 --> 00:06:01,710 Argumenty wiersza przez pisanie dodatkowe słowa lub frazy po programie jest 107 00:06:01,710 --> 00:06:03,000 nazwy w wierszu. 108 00:06:03,000 --> 00:06:06,550 >> Cóż, jeśli chcesz, by program przyjmują argumenty wiersza polecenia, jedno lub 109 00:06:06,550 --> 00:06:10,540 więcej takie słowa, musimy zastąpić unieważnić z kilkoma argumentami. 110 00:06:10,540 --> 00:06:12,200 Więc zróbmy to. 111 00:06:12,200 --> 00:06:15,750 M.in. CS50.h. 112 00:06:15,750 --> 00:06:19,360 Zawierają standardowe io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 A teraz, zamiast nieważne, mam zamiar określić int zwany argc i 115 00:06:26,330 --> 00:06:28,780 Tablica ciągów znaków zwanych argv. 116 00:06:28,780 --> 00:06:31,820 Teraz argc i argv są po prostu konwencje. 117 00:06:31,820 --> 00:06:34,000 >> Mogliśmy nazywa te argumenty najbardziej cokolwiek chcemy. 118 00:06:34,000 --> 00:06:37,630 Ale ważne jest to, że jest argc int, ponieważ, z definicji, jest to 119 00:06:37,630 --> 00:06:41,360 będzie zawierać liczbę argumentów, liczba słów w sumie, że 120 00:06:41,360 --> 00:06:43,380 Filmaster wpisane w jego lub jej wierszu. 121 00:06:43,380 --> 00:06:47,910 argv tymczasem wektor argumentem, jest będzie faktycznie być tablicą przechowywania 122 00:06:47,910 --> 00:06:52,020 wszystkie słowa, które użytkownik ma wpisane w jego lub jej wierszu. 123 00:06:52,020 --> 00:06:54,500 >> Przejdźmy teraz do czegoś jeden lub więcej z tych 124 00:06:54,500 --> 00:06:55,660 Argumenty wiersza poleceń. 125 00:06:55,660 --> 00:07:00,070 W szczególności, idziemy do przodu i drukuj niezależnie użytkownik wpisze słowo 126 00:07:00,070 --> 00:07:03,960 po nazwie programu w wierszu. 127 00:07:03,960 --> 00:07:04,730 Otwórz uchwyt. 128 00:07:04,730 --> 00:07:06,240 Zamknij uchwyt. 129 00:07:06,240 --> 00:07:10,510 Printf procent s odwrotny ukośnik i przecinek. 130 00:07:10,510 --> 00:07:14,550 A teraz muszę powiedzieć printf co wartość do podłączenia do tego symbolu zastępczego. 131 00:07:14,550 --> 00:07:18,600 Chcę pierwsze słowo, że użytkownik nie Po wpisaniu nazwy programu, 132 00:07:18,600 --> 00:07:23,130 i tak mam zamiar podać argv wspornik 1, w pobliżu 133 00:07:23,130 --> 00:07:24,830 nawias, średnik. 134 00:07:24,830 --> 00:07:27,290 >> Teraz, dlaczego nie wspornik wspornik 1 i 0? 135 00:07:27,290 --> 00:07:30,990 Cóż, okazuje się, automatycznie zapisywane w argv 0 będzie 136 00:07:30,990 --> 00:07:32,620 Rzeczywista nazwa programu. 137 00:07:32,620 --> 00:07:36,180 Tak więc pierwsze słowo, że użytkownik wpisze po nazwa programu jest, by 138 00:07:36,180 --> 00:07:38,990 konwencja, będzie przechowywane w argv 1. 139 00:07:38,990 --> 00:07:42,380 Załóżmy teraz skompilować i uruchomić ten program. 140 00:07:42,380 --> 00:07:47,780 >> Sprawdź, argv 0, kropka slash argv 0. 141 00:07:47,780 --> 00:07:50,520 A teraz słowo jak przywitać. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 I nie mamy go, cześć. 144 00:07:53,520 --> 00:07:55,750 >> [KONIEC ODTWARZANIE WIDEO] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: W porządku. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Zamknij to. 148 00:08:01,230 --> 00:08:16,730 Więc przyjrzeć tego programu właśnie wprowadziła się do nas, dobrze, tylko 149 00:08:16,730 --> 00:08:24,710 aby zobaczyć, czy możemy wydrukować argv 0, sprawiają, teraz co to jest, argv 0, kropka kreska argv 0. 150 00:08:24,710 --> 00:08:30,440 Tak więc, zgodnie z oczekiwaniami, to drukowanie Nazwa programu, ponieważ jest argv 0 151 00:08:30,440 --> 00:08:32,970 Zawsze będzie nazwa programu. 152 00:08:32,970 --> 00:08:35,640 Ale zróbmy coś nieco bardziej interesujące. 153 00:08:35,640 --> 00:08:42,080 >> Tak w zestawie problemów, będziesz wprowadził do tej funkcji atoi. 154 00:08:42,080 --> 00:08:44,440 Więc co my używać atoi na? 155 00:08:44,440 --> 00:08:48,550 Że zamierza przekształcić łańcuch na liczbę całkowitą. 156 00:08:48,550 --> 00:08:53,280 Więc jeśli mogę przekazać ciąg, jeden, dwa, trzy, do atoi, że będzie przekonwertować 157 00:08:53,280 --> 00:08:56,910 do liczby całkowitej, jeden, dwa, trzy. 158 00:08:56,910 --> 00:09:01,480 Więc idziemy do konwersji pierwszy argument linii poleceń do liczby całkowitej, 159 00:09:01,480 --> 00:09:05,690 a potem po prostu wydrukować, że całkowitą. 160 00:09:05,690 --> 00:09:09,680 >> Więc w zasadzie, jesteśmy rodzajem reimplementacji getint, tylko 161 00:09:09,680 --> 00:09:12,350 całkowitą ujęto na polecenie Linia zamiast w programie 162 00:09:12,350 --> 00:09:14,560 interaktywnie. 163 00:09:14,560 --> 00:09:23,170 Tak więc, co argv 0, zróbmy to tutaj, i zamknąć to. 164 00:09:23,170 --> 00:09:27,670 Tak działa argv 0, i niech wprowadź całkowitą, raz dwa trzy cztery raz dwa. 165 00:09:27,670 --> 00:09:30,840 Więc to wydrukować całkowitą, jedną dwa trzy cztery raz dwa. 166 00:09:30,840 --> 00:09:35,500 Istnieją pewne subtelności do atoi, że będzie to przestać troszczyć się o nic 167 00:09:35,500 --> 00:09:39,040 poza ważnego znaku numerycznego, ale to nie ma znaczenia. 168 00:09:39,040 --> 00:09:42,870 >> Więc co się dzieje, myślisz jeśli mogę to zrobić? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentation fault. 171 00:09:47,050 --> 00:09:50,410 Więc dlaczego tak jest? 172 00:09:50,410 --> 00:09:56,060 Jeśli spojrzeć na nasz program, jesteśmy konwersji argv 1, pierwszy argument 173 00:09:56,060 --> 00:09:59,610 po nazwie programu, do liczby całkowitej. 174 00:09:59,610 --> 00:10:03,350 Ale nie ma przekazywane argumentem po nazwie programu. 175 00:10:03,350 --> 00:10:08,060 Więc widzimy, że jest to buggy Program, ponieważ, jeśli staramy się go uruchomić 176 00:10:08,060 --> 00:10:10,530 bez żadnych argumentów, to po prostu błąd. 177 00:10:10,530 --> 00:10:16,950 >> Więc kolejny wspólny wzór zobaczysz jest coś takiego, jeśli argc jest mniej 178 00:10:16,950 --> 00:10:21,100 niż dwa, co wskazuje, że nie było przynajmniej nazwa programu i 179 00:10:21,100 --> 00:10:29,100 Pierwszy argument, to zrobimy coś jak printf, nie wystarczy 180 00:10:29,100 --> 00:10:31,190 Argumenty wiersza poleceń. 181 00:10:31,190 --> 00:10:33,170 To chyba nie jest dobre do drukowania, to chyba coś, jak 182 00:10:33,170 --> 00:10:35,440 należy wprowadzić liczbę całkowitą w wierszu poleceń. 183 00:10:35,440 --> 00:10:37,450 Ja po prostu zakończyć go tam. 184 00:10:37,450 --> 00:10:39,600 A następnie powrót 1. 185 00:10:39,600 --> 00:10:44,740 Więc pamiętaj, że pod koniec naszego Program, jeśli zwróci 0, to rodzaj 186 00:10:44,740 --> 00:10:47,060 wskazuje na sukces. 187 00:10:47,060 --> 00:10:50,940 I główny automatycznie zwraca 0 jeśli nie. 188 00:10:50,940 --> 00:10:55,800 >> Więc tutaj mamy przestrajania 1 do wskazania że to nie jest sukces. 189 00:10:55,800 --> 00:11:01,000 I można powrócić, co chcesz, tak, 0 oznacza sukces, a 190 00:11:01,000 --> 00:11:03,390 coś jeszcze o awarii. 191 00:11:03,390 --> 00:11:04,855 Warto więc uruchomić tę wersję rzeczy. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Więc teraz, jeśli nie wpisz wiersz polecenia Argument, będzie to poprawnie powiedzieć 194 00:11:16,600 --> 00:11:18,290 nas, nie tyle z linii poleceń. 195 00:11:18,290 --> 00:11:20,610 Nie dokończył zdania. 196 00:11:20,610 --> 00:11:24,950 Innego, gdybyśmy rzeczywiście przekazać mu jedną, Można to realizacji programu. 197 00:11:24,950 --> 00:11:27,920 Tak to jest, jak należy użyć argc w Aby sprawdzić poprawność liczby 198 00:11:27,920 --> 00:11:30,630 Argumenty wiersza poleceń, które są faktycznie przekazywane. 199 00:11:30,630 --> 00:11:39,360 >> Więc zróbmy ten program bardziej skomplikowane, i spojrzeć na sekundę 200 00:11:39,360 --> 00:11:42,180 iteracja rzeczy. 201 00:11:42,180 --> 00:11:46,310 Więc teraz, jesteśmy nie tylko drukowanie pierwszy argument linii poleceń. 202 00:11:46,310 --> 00:11:51,210 Tutaj mamy iteracji z int i równych 0, i jest mniejsze niż argc, ja plus 203 00:11:51,210 --> 00:11:55,280 Plus i drukowanie argv, indeks i. 204 00:11:55,280 --> 00:11:59,300 Tak więc ten model znów jest taka sama wzór, z tą różnicą, zamiast 205 00:11:59,300 --> 00:12:02,600 wywołaniu zmienną n, używamy argc. 206 00:12:02,600 --> 00:12:09,520 >> Więc to jest iteracja po wszystkich indeksach w tablicy, i drukowanie każdego 207 00:12:09,520 --> 00:12:11,910 elementem tej tablicy. 208 00:12:11,910 --> 00:12:20,300 I tak, po uruchomieniu tego programu, dobrze, Nie wprowadzać żadnych linii poleceń 209 00:12:20,300 --> 00:12:22,540 argumentów, więc tylko wydruki nazwa programu. 210 00:12:22,540 --> 00:12:26,053 Jeśli wprowadzić kilka rzeczy, to będzie wydrukować jeden, każdy w oddzielnym wierszu. 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 Więc weźmy o krok dalej. 214 00:12:34,770 --> 00:12:38,890 I zamiast drukować każdy argument z własnej linii, niech wydrukować każdy 215 00:12:38,890 --> 00:12:42,590 charakter każdego argumentu w oddzielnym wierszu. 216 00:12:42,590 --> 00:12:46,700 Więc pamiętaj, że argv jest Tablica ciągów znaków. 217 00:12:46,700 --> 00:12:50,960 Więc co jest ciąg, ale Tablica znaków? 218 00:12:50,960 --> 00:12:57,140 Więc to oznacza, że ​​argv jest naprawdę Tablica szereg postaci. 219 00:12:57,140 --> 00:13:04,920 Tak więc korzystając z tego, zignorujmy to teraz. 220 00:13:04,920 --> 00:13:08,190 Miejmy tylko rozważyć argv ciąg 0. 221 00:13:08,190 --> 00:13:14,170 >> Tak więc, jeśli chcemy doprowadzić każdy znak argv 0 w oddzielnym wierszu, a następnie chcę 222 00:13:14,170 --> 00:13:19,500 zrobić wzór jesteśmy przyzwyczajeni, i jest mniej niż długość tablicy 223 00:13:19,500 --> 00:13:23,990 który tu jest, strlen z, to nie to, co chcę zrobić, łańcuch 224 00:13:23,990 --> 00:13:26,450 y jest równa argv 0. 225 00:13:26,450 --> 00:13:30,390 Więc jest mniejsza niż długość naszych Tablica, która w tym przypadku jest tablicą 226 00:13:30,390 --> 00:13:34,410 znaków, i Plus Plus. 227 00:13:34,410 --> 00:13:41,040 I tak, jak widzieliśmy w zeszłym tygodniu, jest to idealny jeśli poruszamy że strlen zewnątrz 228 00:13:41,040 --> 00:13:45,210 z warunkiem, ponieważ brak będzie dodanie strlen S każdym razem idziemy 229 00:13:45,210 --> 00:13:47,720 przez pętlę, i to Nie zamierzam się zmieniać. 230 00:13:47,720 --> 00:13:50,230 Więc będziemy go równą n tu ustawić. 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 Więc teraz mamy iterowanie Każdy indeks w tablicy. 234 00:14:01,320 --> 00:14:05,630 I tak, jeśli chcemy wydrukować każdy postaci tablicy, w tym procent c jest 235 00:14:05,630 --> 00:14:06,880 Zaznacz chcemy użyć dla znaków. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 A teraz uchwyt i będzie łańcuch, znak indeksu i, więc jeśli 238 00:14:19,770 --> 00:14:20,970 Ciąg były komentarzy. 239 00:14:20,970 --> 00:14:27,530 następnie S 0 będzie h, y uchwyt 1 będzie e, i tak dalej. 240 00:14:27,530 --> 00:14:30,800 >> Teraz chcemy połączyć te dwie rzeczy. 241 00:14:30,800 --> 00:14:35,440 Chcemy wydrukować każdy znak każdego argumentu wiersza poleceń. 242 00:14:35,440 --> 00:14:38,950 Więc będziemy mieć zagnieżdżonych pętli. 243 00:14:38,950 --> 00:14:47,480 I zwyczajowo, pierwszy licznik Ja, następna będzie j, n 244 00:14:47,480 --> 00:14:54,450 będzie strlen z argv i, i. jest mniejsze od n, i oraz Plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 A teraz zamiast drukowania argv i, tak argv wspornik i będzie indeksem - 247 00:15:06,870 --> 00:15:14,280 że będzie to wiersz poleceń i-ty Argument, argv i, j będzie 248 00:15:14,280 --> 00:15:16,925 być JTH charakter i-tego argumentu. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Ja pozbyć się tego tutaj teraz ponieważ umieścić go w tej pętli. 251 00:15:24,810 --> 00:15:33,900 Więc jest równoważne String s równych argv i, a następnie s uchwyt j. 252 00:15:33,900 --> 00:15:36,980 >> Cóż, nie musimy zadeklarować zmienna y. 253 00:15:36,980 --> 00:15:44,530 Zamiast tego, po prostu połączyć je dwa do tego, co mieliśmy, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> GŁOŚNIK 1: [niesłyszalne]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: Dobra decyzja. 257 00:15:49,680 --> 00:15:52,936 Więc to jest zepsuty. 258 00:15:52,936 --> 00:15:55,510 Jeśli faktycznie prowadził ją, my by sobie z tego sprawę. 259 00:15:55,510 --> 00:16:01,210 Tak, zależy mi na licznik w tym zwłaszcza do 260 00:16:01,210 --> 00:16:05,410 pętla jest j, iterator. 261 00:16:05,410 --> 00:16:08,560 Więc można biegać w kwestii, prawdopodobnie nieskończonej pętli, jeśli 262 00:16:08,560 --> 00:16:09,540 gdyby nie stała, że. 263 00:16:09,540 --> 00:16:12,220 Dlatego my także mówić o debugowanie dziś. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Warto więc uruchomić ten program. 266 00:16:15,240 --> 00:16:21,200 I niech faktycznie dodać osobny printf tu, że będzie po prostu wydrukować 267 00:16:21,200 --> 00:16:27,480 kolejna linia, ponieważ oznacza to, kiedy uruchomić program, będzie puste 268 00:16:27,480 --> 00:16:31,830 Linia pomiędzy każdym charakterem każda linia argumentów poleceń. 269 00:16:31,830 --> 00:16:33,448 Cóż, zobaczymy, co to oznacza. 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 Masz jakiś problem. 273 00:16:39,870 --> 00:16:42,860 Błąd niejawnie deklarując funkcja biblioteki strlen. 274 00:16:42,860 --> 00:16:51,630 >> Tak więc wracając do naszego programu, to zapomniałem mieszania obejmują . 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Więc będzie plik nagłówka, który deklaruje 277 00:16:57,730 --> 00:16:58,980 Funkcja strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, to kompiluje. 280 00:17:06,060 --> 00:17:09,109 A teraz go uruchomić. 281 00:17:09,109 --> 00:17:10,930 Tak, tylko to. 282 00:17:10,930 --> 00:17:17,790 To będzie wydrukować nasze Nazwa programu, witaj świecie. 283 00:17:17,790 --> 00:17:23,510 To będzie wydrukować każdą rzecz, każdy postaci własnej linii. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Więc rzeczywiście wziąć to jeden krok dalej. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 I zamiast używać , niech zastanowić się, jak chcemy realizować nasze własne 288 00:17:39,700 --> 00:17:41,420 strlen funkcji. 289 00:17:41,420 --> 00:17:45,600 Więc od razu dać podpis funkcji. 290 00:17:45,600 --> 00:17:52,900 Więc nazwijmy w my_strlen, i to zajmie ciąg jako argument, 291 00:17:52,900 --> 00:17:57,220 i spodziewamy się, aby powrócić Długość tego ciągu. 292 00:17:57,220 --> 00:18:03,430 Więc, gdzie jest ten facet? 293 00:18:03,430 --> 00:18:04,990 Tak. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Więc pamiętam z wcześniejszego slajdu był także z ostatniego tygodnia, że 296 00:18:12,900 --> 00:18:18,890 tablica znaków, dobrze, łańcuch, Więc powiedzmy, to jest nasz łańcuch s. 297 00:18:18,890 --> 00:18:29,870 Więc jeśli s jest ciągiem, hello, a następnie, H-E-L-L-O, w pamięci, że będzie 298 00:18:29,870 --> 00:18:35,610 być, i to ten backslash 0 znaków. 299 00:18:35,610 --> 00:18:39,170 >> Jak więc uzyskać długość s? 300 00:18:39,170 --> 00:18:43,190 Cóż, sztuczka ta szuka 0 luzów charakter, twoja wartość null 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Więc algorytm będzie być czymś mało 303 00:18:50,270 --> 00:18:51,510 wystarczającej ilości znaków, które - 304 00:18:51,510 --> 00:18:56,180 zróbmy to ręka stanowią jedne licznik, nazwijmy to int długość. 305 00:18:56,180 --> 00:19:00,060 Tak więc, począwszy od tutaj jesteśmy będzie iteracyjne nad naszego łańcucha. 306 00:19:00,060 --> 00:19:04,100 >> Tak więc pierwszy znak, to H, i to nie jest powrót slash 0, więc 307 00:19:04,100 --> 00:19:05,170 długość 1. 308 00:19:05,170 --> 00:19:08,050 Iteracji do następnego znaku, E, i to nie jest interpretacja odwrotnego ukośnika 0. 309 00:19:08,050 --> 00:19:09,630 Długość 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 P 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 I w końcu docieramy odwrotny ukośnik 0, a więc oznacza to, dobrze, 314 00:19:16,690 --> 00:19:17,780 Ten ciąg jest ponad. 315 00:19:17,780 --> 00:19:20,130 Więc wróćmy 5. 316 00:19:20,130 --> 00:19:33,630 >> Wykonawczych, które tak naprawdę, po pierwsze, moja długość n jest równe 0, moja prawa ręka. 317 00:19:33,630 --> 00:19:36,088 I jedziemy do iteracji - 318 00:19:36,088 --> 00:19:38,000 >> GŁOŚNIK 1: [niesłyszalne] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: Och, strzelać. 320 00:19:38,640 --> 00:19:39,870 Dobre połączenie. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Więc długość n jest równa 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Więc teraz, gdy s długość nie równe, a następnie, odwrotny ukośnik 0. 325 00:19:58,310 --> 00:20:04,660 Więc pamiętaj, to odwrotny ukośnik 0, to rzeczywisty charakter, a to oznacza, 326 00:20:04,660 --> 00:20:05,820 koniec napisu. 327 00:20:05,820 --> 00:20:09,850 Podobnie jak, również, odwrotny ukośnik n jest rzeczywisty charakter. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 będzie wskazywać koniec naszego łańcucha. 329 00:20:14,040 --> 00:20:15,414 Nie chcę postawić, że nie. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 I podczas gdy s indeksowane przez długość nie jest równa zerowej terminatora, to 332 00:20:25,620 --> 00:20:27,130 jesteśmy po prostu się do przyrostu długości. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Tak więc, w celu działania programu, długość jest w końcu będzie 335 00:20:34,880 --> 00:20:37,610 być 5 w tym przypadku. 336 00:20:37,610 --> 00:20:39,210 A my długości po prostu wrócić. 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 Więc teraz tutaj, nie wiem zrobić my_strlen. 340 00:20:48,290 --> 00:20:50,700 Niech go skompilować, aby upewnić wszystko działa płynnie. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Ja robiłem w 2? 343 00:20:58,210 --> 00:21:00,565 Albo to, że 1? 344 00:21:00,565 --> 00:21:01,940 Że należy zrobić. 345 00:21:01,940 --> 00:21:02,690 Dobrze. 346 00:21:02,690 --> 00:21:08,490 Więc to jest argv 2. 347 00:21:08,490 --> 00:21:11,585 Działa zgodnie z oczekiwaniami, choć było to, że jeden zrobiłem to w? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Tak. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Ta wersja nie ma rzeczy printf nowa linia po, ale to 352 00:21:21,820 --> 00:21:22,910 nie ma żadnej różnicy. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Więc pracował zgodnie z oczekiwaniami. 355 00:21:25,780 --> 00:21:34,750 >> Teraz można nawet połączyć ten jeden krok ponadto, w którym informacja o, dobrze, 356 00:21:34,750 --> 00:21:38,920 pierwsze, jesteśmy chwytając strlen z argv i, a następnie mamy iterowanie 357 00:21:38,920 --> 00:21:41,450 Każdy znak w tym ciągu. 358 00:21:41,450 --> 00:21:47,480 Więc zamiast robić to, co jeśli tylko połączyć tę logikę czeka 359 00:21:47,480 --> 00:21:50,740 aż trafiliśmy backslash 0 prawo do tego pętli for? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Tak iteracji podczas argv i, j nie nie równa odwrotny ukośnik 0. 362 00:22:07,490 --> 00:22:10,680 Warto więc uruchomić go pierwszy. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Dobrze. 365 00:22:21,180 --> 00:22:27,655 Więc tutaj, warunek ten jest mówiąc - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 wyjaśnijmy to. 368 00:22:40,060 --> 00:22:49,140 Więc teraz, niech to będzie nasza argv. 369 00:22:49,140 --> 00:22:55,290 Więc kiedy tylko dostał ten program wcześniej, argv jest tablicą łańcuchów. 370 00:22:55,290 --> 00:23:03,100 I tak, jeśli uruchomię go dot slash argv 2, hello world, to argv 371 00:23:03,100 --> 00:23:07,650 Sam jest długość 3, dla argv zero, witam, i świat. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> I wewnątrz każdego z tych wskaźników jest Sama tablica, gdzie to będzie 374 00:23:19,660 --> 00:23:23,780 kropka, to będzie ukośnik, nie wiem czy to właściwy kierunek, ja 375 00:23:23,780 --> 00:23:25,680 nie sądzę, że był. 376 00:23:25,680 --> 00:23:30,110 -R-V kreska, potrzebujesz więcej miejsca. 377 00:23:30,110 --> 00:23:32,570 Skończmy na tej tablicy. 378 00:23:32,570 --> 00:23:38,230 Kreska 0, a następnie lewy ukośnik 0-R-V. 379 00:23:38,230 --> 00:23:43,160 A następnie w nieładzie będzie komentarzy. 380 00:23:43,160 --> 00:23:45,910 Powiedzmy, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 I wreszcie, W-wy backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> Tak więc algorytm, który po prostu napisał, zagnieżdżone pętle, co oni 383 00:23:59,730 --> 00:24:07,321 robi to, musimy najpierw licznika i, a następnie j. 384 00:24:07,321 --> 00:24:15,206 Byłoby łatwiej z kodem na ekran, Wróćmy do tego. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Więc zauważyć, że jest to iterator iterowanie każdego polecenia 387 00:24:24,600 --> 00:24:25,610 argument wiersza. 388 00:24:25,610 --> 00:24:28,870 Oraz j jest powtarzanie iterator na każdego bohatera, który 389 00:24:28,870 --> 00:24:30,410 linia argumentów poleceń. 390 00:24:30,410 --> 00:24:46,755 Więc co to robi najgłębsza printf jest, mamy printf argv 0 0 printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2, 0 3, 0 4, 0 5, 0 6, ale teraz, argv 0 7 będzie 392 00:24:58,680 --> 00:25:00,670 równa odwrotny ukośnik 0. 393 00:25:00,670 --> 00:25:05,730 >> Więc potem wyjść, że na pętli, i teraz ja iteracje do 1. 394 00:25:05,730 --> 00:25:10,910 A teraz idziemy do druku argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 dobrze, teraz, od kiedy wyciąć cześć krótki, argv 1 2 ponownie będzie 396 00:25:17,040 --> 00:25:18,170 odwrotny ukośnik 0. 397 00:25:18,170 --> 00:25:25,050 I tak, ja i nadal zwiększać, a tak dalej, aż wydrukować wszystkie 398 00:25:25,050 --> 00:25:28,580 świat, i to są trzy wiersza poleceń argumenty, a my wyjść z 399 00:25:28,580 --> 00:25:31,670 Najbardziej zewnętrzna pętla i zakończyć nasz program. 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 >> Więc tu wrócić. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Więc można zdobyć znajomości Argumenty wiersza poleceń w tej sprawie 406 00:25:52,370 --> 00:25:54,460 ustawić konkretny problem. 407 00:25:54,460 --> 00:25:56,630 >> Teraz, debugowanie. 408 00:25:56,630 --> 00:26:01,680 Więc prawdopodobnie już miał do czynienia niektóre debugowania poprzednia 409 00:26:01,680 --> 00:26:03,120 ustawić problemem. 410 00:26:03,120 --> 00:26:08,420 I jeden bardzo prosty sposób debugowania, pierwsze, spójrzmy na program buggy. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Cóż, chodzenie w ramach tego programu, będziemy prosić użytkownika o 413 00:26:23,830 --> 00:26:29,350 całkowita, grab, że całkowitą, a następnie arbitralnie, mamy pętli while, że 414 00:26:29,350 --> 00:26:32,280 jest po prostu będzie zmniejszać I dopóki nie jest równa 10. 415 00:26:32,280 --> 00:26:35,820 Po prostu zakładamy, Wchodzę liczbę całkowitą większą niż 10. 416 00:26:35,820 --> 00:26:38,700 Więc zmniejszyć i dopóki nie jest równa 10. 417 00:26:38,700 --> 00:26:42,630 >> A potem mamy kolejny pętli while , że, podczas gdy ja nie równa się 0, jesteśmy 418 00:26:42,630 --> 00:26:44,540 I będzie zmniejszyć o 3. 419 00:26:44,540 --> 00:26:49,790 Więc jeśli widzisz intencji błąd tutaj, to, że będzie mi się to zmniejszyć 420 00:26:49,790 --> 00:26:57,010 być 10, a następnie, gdy będzie to pętla Ubytek i od 10, do 7, do 4 do 1, 421 00:26:57,010 --> 00:27:02,880 ujemną 2, na ujemną 5 i tak dalej, do minus nieskończoności, bo będzie 422 00:27:02,880 --> 00:27:05,920 nigdy nie są równe 0. 423 00:27:05,920 --> 00:27:08,610 A następnie na końcu tego programu mamy funkcję foo, która jest 424 00:27:08,610 --> 00:27:12,130 dzieje się drukiem, że ja. 425 00:27:12,130 --> 00:27:16,520 >> Więc jest to program krótki i trywialne, a błąd jest oczywiste, 426 00:27:16,520 --> 00:27:18,790 zwłaszcza po tym, jak tylko powiedział to, co było błędów. 427 00:27:18,790 --> 00:27:24,840 Ale intencją tutaj jest dobrze, to może faktycznie wygląda jak niektóre z 428 00:27:24,840 --> 00:27:30,040 Rozwiązania z chciwy od ostatniego ustawić problemem, a może masz 429 00:27:30,040 --> 00:27:32,800 niektóre nieskończonej pętli w programie, i nie masz pojęcia, 430 00:27:32,800 --> 00:27:34,100 co to powoduje. 431 00:27:34,100 --> 00:27:38,690 Tak bardzo przydatna technika debugowania jest po prostu dodać printfs 432 00:27:38,690 --> 00:27:40,180 w całym kodzie. 433 00:27:40,180 --> 00:27:49,200 >> Więc chcę printf zewnątrz Pierwsza pętla while. 434 00:27:49,200 --> 00:27:53,155 I tu chcę printf, a ja po prostu wydrukować i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Ja nawet nie pierwsza pętla, ja. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Na zewnątrz, druga pętla. 439 00:28:09,040 --> 00:28:12,170 Po raz kolejny, drukować wewnątrz stąd wartość i.. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 I niech to uruchomić to. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Więc kropka debug ukośnik. 444 00:28:24,800 --> 00:28:25,610 Wpisz liczbę całkowitą. 445 00:28:25,610 --> 00:28:28,150 Zróbmy 13. 446 00:28:28,150 --> 00:28:28,760 I bum. 447 00:28:28,760 --> 00:28:33,300 Widzimy, że są nieskończone zapętlenie wewnątrz drugiej pętli while. 448 00:28:33,300 --> 00:28:36,305 Teraz wiemy, na czym polega błąd. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Ale printf debugowanie jest doskonale doskonałym, ale gdy programy dostać 451 00:28:45,610 --> 00:28:50,560 dłuższe i bardziej skomplikowane, są bardziej zaawansowane rozwiązania 452 00:28:50,560 --> 00:28:51,705 Getting Things pracy. 453 00:28:51,705 --> 00:28:52,955 Warto więc usunąć wszystkie te printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 I niech to upewnij się, że nie złamać niczego. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Więc program jedziemy wprowadzenie nazywa 458 00:29:14,180 --> 00:29:16,715 GDB, na licencji GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Cóż, tak naprawdę, to usunięcie debug dla drugi, i znowu zrobić debug. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Cóż, właściwie pierwsza, dobra lekcja z argumentów wiersza poleceń. 463 00:29:34,440 --> 00:29:37,780 Zauważ, że polecenie to jest Clang kompilacji wszystko jest przekazywane 464 00:29:37,780 --> 00:29:41,300 w linii poleceń, to Argumenty wiersza poleceń. 465 00:29:41,300 --> 00:29:46,250 Tak dokładnie, jak masz zamiar używać Argumenty wiersza poleceń, jak 466 00:29:46,250 --> 00:29:51,500 przedtem, i jak będzie w pset 2, to jak Szczęk ich używa. 467 00:29:51,500 --> 00:30:00,070 >> Więc zauważyć, że ta pierwsza flaga, kreska ggdb3, co to mówi to, Szczęk, 468 00:30:00,070 --> 00:30:03,790 należy skompilować ten plik z zamiarem, że będzie w końcu 469 00:30:03,790 --> 00:30:05,380 trzeba go debugować. 470 00:30:05,380 --> 00:30:13,840 Tak długo, jak masz tę flagę, następnie możemy GDB debug. 471 00:30:13,840 --> 00:30:17,380 I to będzie otwarcie GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Tak więc istnieje wiele poleceń że trzeba się przyzwyczaić. 473 00:30:22,920 --> 00:30:27,100 Pierwszy z nich, że prawdopodobnie będziesz natychmiast trzeba to Run. 474 00:30:27,100 --> 00:30:28,200 Więc co jest Uruchom zrobić? 475 00:30:28,200 --> 00:30:30,910 To się rozpocząć nasz program. 476 00:30:30,910 --> 00:30:36,180 Więc uruchomić, program, począwszy, program wzywa nas do liczby całkowitej, 13. 477 00:30:36,180 --> 00:30:39,170 I to jest to, jak nieskończone zapętlenie Oczekuje, z wyjątkiem usunąłem 478 00:30:39,170 --> 00:30:40,500 printfs, więc nawet nie widzę. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Odszedł normalnie. 481 00:30:44,600 --> 00:30:45,850 Och. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Jest możliwe, że to wszystko zapakowane odwrotnie, z powrotem do - pomijając to. 484 00:30:53,640 --> 00:30:55,170 Zakładam, że nie wyjść normalnie. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Jest skomplikowana odpowiedź. 487 00:31:03,370 --> 00:31:07,890 >> Więc teraz, że nie jest to bardzo przydatne. 488 00:31:07,890 --> 00:31:11,480 Tak właśnie działa nasz program wewnątrz to debugger nie pomaga nam w jakikolwiek 489 00:31:11,480 --> 00:31:15,610 sposób, ponieważ mogliśmy tylko zrobić kropka slash debug spoza GDB. 490 00:31:15,610 --> 00:31:21,250 Więc jedno polecenie, które prawdopodobnie będziesz - 491 00:31:21,250 --> 00:31:22,970 a ja zamknąć to. 492 00:31:22,970 --> 00:31:25,850 Control-d lub zamknąć, zarówno do pracy. 493 00:31:25,850 --> 00:31:29,550 Warto więc otworzyć go ponownie. 494 00:31:29,550 --> 00:31:31,130 >> Inne polecenie, że prawdopodobnie będziesz natychmiast chcą 495 00:31:31,130 --> 00:31:33,600 przyzwyczaić jest przerwa. 496 00:31:33,600 --> 00:31:37,120 Więc łamiemy na głównym teraz, a następnie, że ci wyjaśnię. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Cóż, tutaj widzimy, możemy ustawić punkt przerwania na tej linii w debug.c. 499 00:31:46,370 --> 00:31:50,160 Więc co oznacza, że ​​przerwa, kiedy wpisz Uruchom program będzie 500 00:31:50,160 --> 00:31:53,560 nadal działa, aż I hit punktu przerwania. 501 00:31:53,560 --> 00:31:59,390 Więc kiedy hit run, program uruchamia, a następnie rozkłada Z chwilą 502 00:31:59,390 --> 00:32:01,940 wchodzi do głównej funkcji. 503 00:32:01,940 --> 00:32:06,930 Złamać głównym będzie coś jesteś dość powszechnie zrobić. 504 00:32:06,930 --> 00:32:11,340 >> A teraz, aby wprowadzić Cię do niektórych więcej poleceń. 505 00:32:11,340 --> 00:32:14,330 Zauważcie, że to mówi my wybuchł w linii 11, który jest 506 00:32:14,330 --> 00:32:16,230 printf, wpisz liczbę całkowitą. 507 00:32:16,230 --> 00:32:21,260 Więc polecenie Następny będzie jak możemy przejść do następnej linii kodu. 508 00:32:21,260 --> 00:32:24,810 To będzie pozwalają nam kroku za pośrednictwem naszego programu linia po linii. 509 00:32:24,810 --> 00:32:26,260 Więc następnym. 510 00:32:26,260 --> 00:32:29,820 >> Teraz linia 12, jedziemy aby uzyskać całkowitą. 511 00:32:29,820 --> 00:32:30,450 Następny. 512 00:32:30,450 --> 00:32:34,290 A jeśli po prostu wciskamy Enter ponownie, to będzie powtórzyć ostatnią rzeczą, którą zrobił. 513 00:32:34,290 --> 00:32:36,480 Więc nie trzeba wpisywać następny każdym razem. 514 00:32:36,480 --> 00:32:40,100 Więc wprowadzić liczbę całkowitą, 13. 515 00:32:40,100 --> 00:32:46,940 Więc teraz, linia 14, a ja jest większa niż 10, i będę robić dalej. 516 00:32:46,940 --> 00:32:48,685 I widzimy, będziemy zmniejszać i.. 517 00:32:48,685 --> 00:32:50,210 Więc mamy zamiar zmniejszyć znowu. 518 00:32:50,210 --> 00:32:53,620 >> Więc teraz, kolejna użyteczna Polecenie to jest Drukuj. 519 00:32:53,620 --> 00:32:55,750 Więc Drukuj zamierza wydrukować Wartość zmiennej. 520 00:32:55,750 --> 00:32:57,825 Miejmy wydobyć wartość zmiennej i. 521 00:32:57,825 --> 00:32:58,705 Miejmy wydrukować i.. 522 00:32:58,705 --> 00:33:00,910 To będzie powiedzieć, że jest 11. 523 00:33:00,910 --> 00:33:03,330 Teraz Następnie ponownie, i jest większa niż 10. 524 00:33:03,330 --> 00:33:05,590 Więc jeszcze większe niż 10, ponieważ jest to 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Miejmy drukować znowu. 527 00:33:08,250 --> 00:33:10,950 Zgodnie z oczekiwaniami, to jest 10. 528 00:33:10,950 --> 00:33:12,510 >> Więc teraz, następny. 529 00:33:12,510 --> 00:33:16,250 To będzie powrót do stanu, i jest większa niż 10, ale jest 10 tak, 530 00:33:16,250 --> 00:33:20,040 nie jest większa niż 10, więc oczekiwać to spadek z pętli while. 531 00:33:20,040 --> 00:33:22,220 A teraz jesteśmy poniżej tego wiersza kodu. 532 00:33:22,220 --> 00:33:28,750 I inne polecenie, listy, jest po prostu będzie wyświetlić poprzednie i następne 533 00:33:28,750 --> 00:33:31,240 Kilka linii kodu, w przypadku utraty siebie. 534 00:33:31,240 --> 00:33:35,420 Więc po prostu odszedł ta pętla, a teraz weszliśmy to 535 00:33:35,420 --> 00:33:37,080 pętla, linia 18. 536 00:33:37,080 --> 00:33:39,860 Tak, a ja nie równa 0. 537 00:33:39,860 --> 00:33:46,570 I następny, i jest równe I minus 3, a my zauważyć, to będzie po prostu iść dalej. 538 00:33:46,570 --> 00:33:48,270 I możemy wydrukować i. 539 00:33:48,270 --> 00:33:49,990 >> Każde polecenie sortowania ma skrótów. 540 00:33:49,990 --> 00:33:51,720 Więc p jest krótki do druku. 541 00:33:51,720 --> 00:33:53,400 Więc możemy P i. 542 00:33:53,400 --> 00:33:57,550 Tylko trzymaj n, lub robić Dalej. 543 00:33:57,550 --> 00:33:58,340 Wydrukuj jeszcze raz. 544 00:33:58,340 --> 00:34:00,380 Widzisz teraz jest ujemny 167. 545 00:34:00,380 --> 00:34:06,030 Więc to będzie trwać wiecznie, ale nie naprawdę zawsze, od kiedy tylko zobaczył, że 546 00:34:06,030 --> 00:34:09,330 faktycznie kończy się w pewnym momencie. 547 00:34:09,330 --> 00:34:15,699 >> Tak że zaczyna GDB. 548 00:34:15,699 --> 00:34:19,504 Ale zróbmy jeszcze jedną rzecz w GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, debug. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Tak więc, w tym szczególnym przypadku, nieskończonej pętli stało się wewnątrz 552 00:34:28,534 --> 00:34:30,050 Główną funkcją. 553 00:34:30,050 --> 00:34:35,779 A teraz, po prostu przyjąć, że jestem zamierza przenieść nieskończoną pętlę w 554 00:34:35,779 --> 00:34:37,029 Funkcja foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Tylko pamiętać, że w końcu tego Program, dobrze, to było pierwotnie 557 00:34:43,730 --> 00:34:46,210 wywołanie foo, który był po prostu zamiar wydrukować i. 558 00:34:46,210 --> 00:34:51,880 Ale teraz mamy wywołanie foo, która jest zamierza zmniejszyć I dopóki jest to 0, a 559 00:34:51,880 --> 00:34:54,548 następnie wydrukować tej zmiennej. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Zapisać, że. 562 00:34:57,970 --> 00:35:00,175 Dodać debug. 563 00:35:00,175 --> 00:35:03,310 A teraz, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Więc jeśli po prostu uruchomić to nie zamierzam być w stanie rzeczywiście przejść przez moje 566 00:35:10,580 --> 00:35:11,730 programu linia po linii. 567 00:35:11,730 --> 00:35:19,820 Więc przerwa w głównym, a następnie wpisać słowo. 568 00:35:19,820 --> 00:35:28,160 Tak więc przejść przez to, printf, wprowadź całkowitą, uzyskać całkowitą, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Więc mamy zamiar utrzymać zmniejszanie dopóki nie jest większa niż 10. 571 00:35:37,490 --> 00:35:42,840 Następnie jedziemy do upadku przez pętla, i dostać się do linii - 572 00:35:42,840 --> 00:35:44,364 niech go otworzyć w osobnym oknie. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Więc zmniejszana, aż już nie było większe od 10, a potem 575 00:35:53,300 --> 00:35:55,700 wywołaniu funkcji, bla. 576 00:35:55,700 --> 00:36:01,340 >> Więc co się stało, jak tylko uderzyć Funkcja foo, dobrze, zadzwoniłem foo, a 577 00:36:01,340 --> 00:36:04,030 potem nie ma już kontroli nad GDB. 578 00:36:04,030 --> 00:36:10,230 Tak szybko, jak tylko uderzyć Dalej na tej linii, rzeczy nadal aż stało się to, 579 00:36:10,230 --> 00:36:12,400 gdzie program odszedł, gdy - 580 00:36:12,400 --> 00:36:14,450 Zakładam, że nie istnieje w końcu. 581 00:36:14,450 --> 00:36:16,390 Widziałeś go wstrzymać na chwilę chociaż. 582 00:36:16,390 --> 00:36:22,040 Dlaczego więc stracić kontrolę nad Program w tym momencie? 583 00:36:22,040 --> 00:36:27,540 Cóż, kiedy ja piszę dalej, że idzie do dosłowne następna linia kodu 584 00:36:27,540 --> 00:36:28,850 będą wykonane. 585 00:36:28,850 --> 00:36:35,950 Więc po linii 21, obok linii kodu że wykona to linia 22, 586 00:36:35,950 --> 00:36:38,520 który jest wyjście z głównym. 587 00:36:38,520 --> 00:36:43,810 Więc ja nie chcę pójść do następnej linii kodu. 588 00:36:43,810 --> 00:36:48,170 Chcę iść do funkcji, Foo, a następnie także krok po kroku 589 00:36:48,170 --> 00:36:49,830 te linie kodu. 590 00:36:49,830 --> 00:36:53,726 >> Więc na to, mamy alternatywę. 591 00:36:53,726 --> 00:36:56,770 Miejmy rzucić jeszcze raz. 592 00:36:56,770 --> 00:36:58,020 Złamać główny. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, następny, następny, 13, następny, następny, następny, ostrożnie, 595 00:37:06,370 --> 00:37:09,820 Zanim trafiliśmy linii foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Więc teraz, że jesteśmy na linii 21, gdzie wywołać foo. 598 00:37:13,700 --> 00:37:17,100 Nie chcemy, aby wpisać następny, ponieważ po prostu wywołać funkcję foo, a 599 00:37:17,100 --> 00:37:18,710 przejść do następnej linii kodu. 600 00:37:18,710 --> 00:37:20,840 Co chcemy użyć, jest krok. 601 00:37:20,840 --> 00:37:25,690 Więc jest różnica między kroku i Dalej, gdzie krok kroki do 602 00:37:25,690 --> 00:37:28,190 funkcjonować, a obok przechodzi w stosunku do funkcji. 603 00:37:28,190 --> 00:37:32,830 To po prostu wykonuje całość Funkcja i utrzymuje dzieje. 604 00:37:32,830 --> 00:37:37,210 >> Więc krok przyniesie nam do funkcji, bla. 605 00:37:37,210 --> 00:37:41,160 I widzimy tutaj, teraz, jesteśmy z powrotem w ta pętla to, w teorii, 606 00:37:41,160 --> 00:37:44,190 będzie trwać wiecznie. 607 00:37:44,190 --> 00:37:50,420 A jeśli trafisz kroku, jeśli nie jest jeszcze Funkcja zadzwonić, to jest to 608 00:37:50,420 --> 00:37:51,720 identyczne Dalej. 609 00:37:51,720 --> 00:37:55,320 Więc to jest tylko wtedy, gdy jesteś na linii, która jest wywołanie funkcji, że etap 610 00:37:55,320 --> 00:37:56,970 będzie się różnić od Next. 611 00:37:56,970 --> 00:37:57,930 Więc krok przyniesie nam tutaj. 612 00:37:57,930 --> 00:38:02,100 Krok, krok, krok, krok, krok, krok, i Będziemy po prostu nieskończona pętla zawsze. 613 00:38:02,100 --> 00:38:06,810 >> Więc można się przyzwyczaić, że jak sposób identyfikacji nieskończone pętle, jest 614 00:38:06,810 --> 00:38:08,960 przytrzymanie tego klawisza Enter, aby Zobacz, gdzie utkniesz. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Są lepsze sposoby aby to zrobić, ale teraz, że jest w pełni wystarczające. 617 00:38:14,780 --> 00:38:17,967 I stylistycznie, w celu dostosowania do stylu 50, powinienem zrobić to. 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 >> Więc ostatnia komenda do wprowadzenia. 621 00:38:28,400 --> 00:38:30,810 Cóż, gdb debug w. 622 00:38:30,810 --> 00:38:35,580 Więc zamiast łamania się głównym, jeśli wiem funkcji foo jest również 623 00:38:35,580 --> 00:38:39,230 Problem, to mogę mieć tylko wymieniony, przełamać w foo, zamiast. 624 00:38:39,230 --> 00:38:42,310 Powiedzmy, że przerwa w zarówno główne i bla. 625 00:38:42,310 --> 00:38:45,390 Więc można ustawić jak najwięcej punktów przerwania jak chcesz. 626 00:38:45,390 --> 00:38:49,230 Kiedy wpisać słowo, to będzie zatrzymać się - 627 00:38:49,230 --> 00:38:52,180 Och, niech rekompilacji, od Zmieniłem rzeczy. 628 00:38:52,180 --> 00:38:55,950 Zobaczysz tę linię, ostrzeżenia, źródło plik jest nowszy niż plik wykonywalny. 629 00:38:55,950 --> 00:38:59,680 To znaczy, że po prostu poszedł tutaj i zmienił je w celu dostosowania do stylu 630 00:38:59,680 --> 00:39:03,100 50, ale nie rekompilacji Program. 631 00:39:03,100 --> 00:39:04,870 Więc GDB sprawia mi świadomość. 632 00:39:04,870 --> 00:39:10,130 Ja zamknąć, ponownie zrobić debug, hit gdb debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Teraz, z powrotem do tego, co robię. 635 00:39:12,800 --> 00:39:15,720 Złamać główny, break foo. 636 00:39:15,720 --> 00:39:20,680 Teraz, jeśli uruchomić program, więc jest to będzie kontynuowane aż do trafienia 637 00:39:20,680 --> 00:39:21,320 przerwania. 638 00:39:21,320 --> 00:39:24,680 Zdarza się, że punkt przerwania być pierwszy w głównym. 639 00:39:24,680 --> 00:39:28,630 Teraz, zamiast robić następny, następny, następny, następny, następny, dopóki nie uderzył foo, ja 640 00:39:28,630 --> 00:39:35,230 może wpisać kontynuować, który będzie aż trafisz do następnego przerwania. 641 00:39:35,230 --> 00:39:37,200 Mam pierwszy wprowadzić całkowitą. 642 00:39:37,200 --> 00:39:40,570 Nadal będzie nadal, dopóki nie uderzył następny punkt przerwania, które jest 643 00:39:40,570 --> 00:39:43,320 Funkcja foo. 644 00:39:43,320 --> 00:39:50,130 >> Więc Run będzie działać aż trafisz przerwania, ale tylko wpisać słowo, gdy 645 00:39:50,130 --> 00:39:54,060 zaczynasz program, a następnie, od tej pory, to w dalszym ciągu. 646 00:39:54,060 --> 00:40:01,950 Jeśli tylko nie złamać główny i pobiegł, to będzie przerwa w 647 00:40:01,950 --> 00:40:03,670 Głównym, a następnie kontynuować. 648 00:40:03,670 --> 00:40:10,050 Ponieważ nie mam punkt załamania w foo, wprowadzić liczbę całkowitą, to teraz jestem 649 00:40:10,050 --> 00:40:11,380 nie złamie w foo. 650 00:40:11,380 --> 00:40:16,318 To po prostu się do nieskończoności Pętla dopóki. 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 >> Więc to jest Wstęp do GDB. 654 00:40:24,420 --> 00:40:27,790 Należy rozpocząć korzystanie z niego w tabelach problemowych. 655 00:40:27,790 --> 00:40:30,550 To może być bardzo pomocne zidentyfikować błędy. 656 00:40:30,550 --> 00:40:35,280 Jeśli faktycznie tak, linia po linii, przejdź przez kod, i porównać to, co jest 657 00:40:35,280 --> 00:40:39,740 z tym, co faktycznie dzieje się spodziewać się stało, to jest całkiem 658 00:40:39,740 --> 00:40:41,060 trudno nie swoje błędy. 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 >> Tak więc w zeszłym tygodniu w tym David wychowany Kryptografia klucza tajne rzeczy dla 663 00:40:54,040 --> 00:40:59,350 pierwszy raz, gdzie nie chcemy Hasła prostu być przechowywane na naszych 664 00:40:59,350 --> 00:41:03,210 Komputer w jakimś zwykłym pliku tekstowym, w którym ktoś może przyjść i po prostu 665 00:41:03,210 --> 00:41:04,660 otworzyć ją i przeczytać je. 666 00:41:04,660 --> 00:41:07,530 Idealnie, zostaną zaszyfrowane w jakiś sposób. 667 00:41:07,530 --> 00:41:13,340 W Problem zestaw 2, będziesz mieć do czynienia z jednym ze sposobów szyfrowania 668 00:41:13,340 --> 00:41:16,520 lub, oraz, dwie metody, ale oni nie są tak wielkie. 669 00:41:16,520 --> 00:41:20,050 Jeśli zrobisz edycję hakerów, jesteś również będzie mieć do czynienia z 670 00:41:20,050 --> 00:41:22,150 deszyfrowania pewnych rzeczy. 671 00:41:22,150 --> 00:41:29,770 >> Więc problem jest teraz, cóż, nawet jeśli mamy najsilniejsze szyfrowanie 672 00:41:29,770 --> 00:41:34,830 Algorytm na świecie, jeśli zdecydujesz zwłaszcza ubogich hasło, to 673 00:41:34,830 --> 00:41:37,720 Nie pomoże ci bardzo, ponieważ ludzie nadal będzie w stanie zrozumieć. 674 00:41:37,720 --> 00:41:41,530 Nawet jeśli widząc zaszyfrowany ciąg znaków i wygląda jak bałagan śmieci 675 00:41:41,530 --> 00:41:44,760 oznacza nic do nich, o ile jeszcze tylko trzeba spróbować kilka haseł 676 00:41:44,760 --> 00:41:50,560 zrozumieć to, to nie są bardzo bezpieczne. 677 00:41:50,560 --> 00:41:55,890 Tak więc oglądając film, który sprawia, że ​​punkt. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [ODTWARZANIE] 680 00:42:00,970 --> 00:42:02,100 >> -Helmet, jesteś szatanem. 681 00:42:02,100 --> 00:42:03,370 Co się dzieje? 682 00:42:03,370 --> 00:42:05,170 Co robisz z moją córką? 683 00:42:05,170 --> 00:42:09,910 >> -Pozwól mi przedstawić genialny Młody chirurg plastyczny, dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, największy nos Człowiek pracy w całej 685 00:42:13,730 --> 00:42:16,080 wszechświat, i Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Wasza Wysokość. 687 00:42:17,210 --> 00:42:18,070 >> -Nosa? 688 00:42:18,070 --> 00:42:18,670 Nie rozumiem. 689 00:42:18,670 --> 00:42:20,090 Ona już miała nosa. 690 00:42:20,090 --> 00:42:21,910 To było słodkie szesnaście obecny. 691 00:42:21,910 --> 00:42:22,140 >> -Nie. 692 00:42:22,140 --> 00:42:23,690 To nie to, co myślisz. 693 00:42:23,690 --> 00:42:25,420 To dużo, dużo gorzej. 694 00:42:25,420 --> 00:42:30,300 Jeśli nie daje mi połączenie do tarcza powietrza, dr Schlotkin będzie 695 00:42:30,300 --> 00:42:34,226 dać córkę jej stary nos. 696 00:42:34,226 --> 00:42:35,476 >> -Nie. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Skąd to masz? 699 00:42:40,516 --> 00:42:41,440 >> -Wszystko w porządku. 700 00:42:41,440 --> 00:42:42,180 Powiem. 701 00:42:42,180 --> 00:42:43,381 Powiem. 702 00:42:43,381 --> 00:42:44,263 Nie, tato. 703 00:42:44,263 --> 00:42:45,590 Nie, nie musi. 704 00:42:45,590 --> 00:42:46,860 >> -Masz rację, mój drogi. 705 00:42:46,860 --> 00:42:48,450 Będę tęsknił nowy nos. 706 00:42:48,450 --> 00:42:52,090 Ale nie powiem mu połączenie, nie wiem co. 707 00:42:52,090 --> 00:42:53,680 >> -Bardzo dobrze. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, nie najgorsza. 709 00:42:55,685 --> 00:42:56,914 >> -Z przyjemnością. 710 00:42:56,914 --> 00:43:00,690 >> [Oprzyrządowania zaostrzony] 711 00:43:00,690 --> 00:43:01,910 >> -Nie. 712 00:43:01,910 --> 00:43:02,520 Czekać. 713 00:43:02,520 --> 00:43:03,836 Czekać. 714 00:43:03,836 --> 00:43:05,300 Powiem. 715 00:43:05,300 --> 00:43:06,880 Powiem. 716 00:43:06,880 --> 00:43:09,130 >> -Wiedziałem, że to działa. 717 00:43:09,130 --> 00:43:09,900 Dobrze. 718 00:43:09,900 --> 00:43:12,850 Daj mi to. 719 00:43:12,850 --> 00:43:16,918 >> -Połączenie jest jeden. 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 >> -Dwa. 723 00:43:19,358 --> 00:43:19,846 >> -Dwa. 724 00:43:19,846 --> 00:43:20,822 >> -Dwa. 725 00:43:20,822 --> 00:43:21,310 >> -Trzy. 726 00:43:21,310 --> 00:43:21,798 >> -Trzy. 727 00:43:21,798 --> 00:43:22,774 >> -Trzy. 728 00:43:22,774 --> 00:43:23,262 >> -Cztery. 729 00:43:23,262 --> 00:43:23,750 >> -Cztery. 730 00:43:23,750 --> 00:43:26,150 >> -Cztery. 731 00:43:26,150 --> 00:43:27,010 >> -Pięć. 732 00:43:27,010 --> 00:43:27,670 >> -Pięć. 733 00:43:27,670 --> 00:43:29,010 >> -Pięć. 734 00:43:29,010 --> 00:43:34,770 >> Tak więc, kombinacja jest, dwa, trzy, cztery, pięć. 735 00:43:34,770 --> 00:43:37,460 To najgłupsza połączenie Jakie kiedykolwiek słyszałem w moim życiu. 736 00:43:37,460 --> 00:43:39,710 To rodzaj rzeczy idiota miałoby na jego bagażu. 737 00:43:39,710 --> 00:43:42,000 >> -Dziękuję, Wasza Wysokość. 738 00:43:42,000 --> 00:43:43,530 >> -Co ty zrobiłeś? 739 00:43:43,530 --> 00:43:44,490 >> -Odwróciłam się od ściany. 740 00:43:44,490 --> 00:43:45,420 >> -Nie, nie. 741 00:43:45,420 --> 00:43:45,840 Został wyłączony cały film. 742 00:43:45,840 --> 00:43:46,930 >> -Musiałem naciśnięty niewłaściwy przycisk. 743 00:43:46,930 --> 00:43:48,265 >> -Cóż, umieścić go z powrotem. 744 00:43:48,265 --> 00:43:49,110 Wrzuć film z powrotem. 745 00:43:49,110 --> 00:43:49,510 >> -Tak jest, sir. 746 00:43:49,510 --> 00:43:49,917 Tak, proszę pana. 747 00:43:49,917 --> 00:43:50,324 >> -Chodźmy, Arnold. 748 00:43:50,324 --> 00:43:51,140 Przyjdź, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Oczywiście wiesz, że nadal będę musieli obciążyć cię za to. 750 00:43:53,060 --> 00:43:53,440 >> [KONIEC ODTWARZANIE WIDEO] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: W porządku. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Więc teraz, że mamy już mówić o Bezpieczeństwo w pewnym sensie, ładny 754 00:44:08,430 --> 00:44:16,050 mały plakat filmowy, więc w ostatnich dni, te problemy z NSA 755 00:44:16,050 --> 00:44:17,300 monitorowanie wszystkiego. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 To może być trudne, aby poczuć się jak mieć jakiś prywatności w 758 00:44:26,930 --> 00:44:34,540 Świat Internetu, choć nie mogę powiedzieć Ci większość szczegółów PRISM. 759 00:44:34,540 --> 00:44:42,130 Więc wyjście poza PRISM, nie będziemy się mówić o tym, teraz 760 00:44:42,130 --> 00:44:44,030 myśleć o swoim laptopie. 761 00:44:44,030 --> 00:44:48,360 Więc tutaj, chcę, aby przełączyć do mojego aktualnego rachunku, 762 00:44:48,360 --> 00:44:50,370 z mojego małego pingwina. 763 00:44:50,370 --> 00:44:57,310 Więc mam ustawionego hasła, a Hasło to, co chcę, żeby było. 764 00:44:57,310 --> 00:45:02,430 >> Ale pamiętaj, że to, co mam zalogowaniu w z, więc logowanie 765 00:45:02,430 --> 00:45:04,850 szybka, jest jakiś program. 766 00:45:04,850 --> 00:45:07,910 To jakiś program, który był napisany przez jakąś osobę. 767 00:45:07,910 --> 00:45:13,250 Tak więc, osoba, jeżeli są one szczególnie szkodliwy, mogli 768 00:45:13,250 --> 00:45:17,780 powiedziałem, wszystko w porządku, więc jeśli hasło że wejść jest równa mojej 769 00:45:17,780 --> 00:45:22,800 rzeczywisty hasło, to jest równe lub do jakiegoś specjalnego hasła - 770 00:45:22,800 --> 00:45:25,550 David jest super lub coś - 771 00:45:25,550 --> 00:45:27,190 następnie ich wpuścić 772 00:45:27,190 --> 00:45:33,760 Tak programista może mieć szkodliwy Dostęp do wszystkich komputerów Mac, lub 773 00:45:33,760 --> 00:45:36,150 Szyby, lub cokolwiek. 774 00:45:36,150 --> 00:45:41,980 >> Więc to nie jest wiele obaw, ponieważ, To znaczy, jest to program do logowania 775 00:45:41,980 --> 00:45:48,720 , który jest dostarczany z OS X, setki lub tysiące ludzi 776 00:45:48,720 --> 00:45:50,020 recenzja tego kodu. 777 00:45:50,020 --> 00:45:55,330 I tak, jeśli w kodzie gdzieś, ty powiedzieć, czy ten ciąg jest równy równych 778 00:45:55,330 --> 00:45:58,860 David jest niesamowity, zaloguj się, a następnie ktoś będzie, jak, czekaj. 779 00:45:58,860 --> 00:45:59,800 To nie jest prawda. 780 00:45:59,800 --> 00:46:01,790 To nie powinno być tutaj. 781 00:46:01,790 --> 00:46:06,650 Więc to jest jeden sposób możemy dostać rzeczy być rodzaj bezpieczne. 782 00:46:06,650 --> 00:46:10,300 >> Ale nawet myśleć o programach że piszesz. 783 00:46:10,300 --> 00:46:13,000 Powiedzmy, że napisałem program login. 784 00:46:13,000 --> 00:46:20,440 Więc ten program logowania, który napisał, tak, oczywiście, że jesteś dobrym 785 00:46:20,440 --> 00:46:21,210 programista. 786 00:46:21,210 --> 00:46:25,610 Nie zamierzamy umieścić dowolny złośliwy jeśli x jest równa równa David jest niesamowity 787 00:46:25,610 --> 00:46:27,860 w kodzie. 788 00:46:27,860 --> 00:46:31,930 Ale ten program, co prawda używać skompilować ten program? 789 00:46:31,930 --> 00:46:34,180 Coś jak Clang. 790 00:46:34,180 --> 00:46:38,460 Więc co, jeśli osoba, która się do Napisać dzyń specjalne Clang powlekanego 791 00:46:38,460 --> 00:46:44,310 coś, jeśli jestem kompilacji programu logowania, a następnie wprowadź kod 792 00:46:44,310 --> 00:46:49,720 do programu logowania, który mówi, jeśli x równa równa David jest niesamowite? 793 00:46:49,720 --> 00:46:59,890 Więc nie do końca jeszcze, ale mamy takie same Chodzi tu, gdzie Szczęk, dobrze, 794 00:46:59,890 --> 00:47:03,790 tysiące, jeśli nie dziesiątki tysięcy ludzie patrzeli Clang, mają 795 00:47:03,790 --> 00:47:07,160 Spojrzałem na jego linii kodu i powiedział, Wszystko w porządku, nie ma nic złego tutaj. 796 00:47:07,160 --> 00:47:10,680 Oczywiście, nikt nie robi cokolwiek to złośliwy. 797 00:47:10,680 --> 00:47:15,780 >> Ale to, co jest brzękiem się, jak, co, jeśli mogę skompilować brzęk? 798 00:47:15,780 --> 00:47:20,900 Co zrobić, jeśli mam jakiś kompilator, że kompiluje dzyń, która wstawia do Clang 799 00:47:20,900 --> 00:47:25,610 Ten specjalny kilof, który mówi, wszystko w porządku, kiedy mogę skompilować brzękiem, a następnie 800 00:47:25,610 --> 00:47:31,290 wykonywalny zostanę powinny specjalnie szukać wewnątrz programu login i wkładki 801 00:47:31,290 --> 00:47:34,230 to hasło, równa równych Dave jest niesamowite? 802 00:47:34,230 --> 00:47:37,990 Więc pamiętaj, że sam kompilator musi być skompilowany w pewnym momencie. 803 00:47:37,990 --> 00:47:42,810 Więc jeśli to, co wybrać, aby skompilować dzyń się, sam w sobie jest szkodliwy, to 804 00:47:42,810 --> 00:47:45,580 może być przykręcony całość droga w dół. 805 00:47:45,580 --> 00:47:49,630 >> Więc tutaj mamy Ken Thompson i Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Więc to jest charakterystycznym zdjęcia. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie jest po prawej stronie. 808 00:47:55,470 --> 00:47:58,740 On jest głównym - 809 00:47:58,740 --> 00:48:03,640 dość dużo pisał C. Tak więc można Dziękuję mu za tej klasy. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson jest po lewej stronie. 811 00:48:04,840 --> 00:48:07,780 Dwa z nich w zasadzie napisał UNIX. 812 00:48:07,780 --> 00:48:10,140 Cóż, były to główne czynniki w systemie UNIX. 813 00:48:10,140 --> 00:48:11,310 Było kilka innych. 814 00:48:11,310 --> 00:48:16,240 Więc Ken Thompson, w pewnym momencie, wygrywa nagrodę Turinga. 815 00:48:16,240 --> 00:48:20,860 I Nagroda Turinga, zawsze słyszałem jest określany w ten sposób, to 816 00:48:20,860 --> 00:48:23,100 Nagroda Nobla w dziedzinie informatyki. 817 00:48:23,100 --> 00:48:27,500 >> Więc na nagrody Turinga, musi dać swoim przemówieniu. 818 00:48:27,500 --> 00:48:31,790 I daje temu bardzo słynnym przemówieniu teraz nazywa Refleksje Zaufanie 819 00:48:31,790 --> 00:48:35,620 Zaufanie, które łączyli Aby na stronie przedmiotu. 820 00:48:35,620 --> 00:48:41,670 I w tej wypowiedzi, jak mówi, wszystko w porządku, więc napisałem UNIX, a teraz wszystkie 821 00:48:41,670 --> 00:48:43,320 Ci ludzie są przy użyciu systemu UNIX. 822 00:48:43,320 --> 00:48:46,960 Teraz, pamiętaj, że Linux jest dziś bezpośrednim potomkiem systemu UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X bezpośrednio wykorzystuje UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows nie tak dużo, ale dużo pomysły zostały zaczerpnięte z systemu UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Więc idzie się na scenę i mówi, Wszystko w porządku, pisałem UNIX. 826 00:48:59,220 --> 00:49:03,940 I tak wiecie, jestem w stanie zalogować się do każdego 827 00:49:03,940 --> 00:49:05,590 Pojedynczy jeden z komputerów. 828 00:49:05,590 --> 00:49:14,280 Od umieścić jeden z tych specjalnych, jeśli x równa jest równa Ken Thomson jest niesamowite, 829 00:49:14,280 --> 00:49:16,350 następnie wolno mi się zalogować. 830 00:49:16,350 --> 00:49:18,370 Tak więc ludzie są jak, dobrze, Jak to zrobić? 831 00:49:18,370 --> 00:49:21,090 Patrzyliśmy na program login i nic nie ma. 832 00:49:21,090 --> 00:49:24,700 On jest jak, dobrze, zmodyfikowany kompilator do logowania w programie logowania 833 00:49:24,700 --> 00:49:30,490 tak, że program będzie miał teraz logowanie że x równa równa Ken Thompson 834 00:49:30,490 --> 00:49:31,700 jest super. 835 00:49:31,700 --> 00:49:33,120 >> A mówią, że dobrze, że to nie prawda. 836 00:49:33,120 --> 00:49:35,740 Patrzymy na kompilator, i kompilator nie ma żadnych linii 837 00:49:35,740 --> 00:49:36,400 Kod taki. 838 00:49:36,400 --> 00:49:40,540 On na to: OK, ale co ty kompilacji kompilator z? 839 00:49:40,540 --> 00:49:44,810 I myślą, a on, jak dobrze, Jestem tym, który dał ci kompilator 840 00:49:44,810 --> 00:49:50,580 używasz do kompilacji kompilator, więc kompilowania kompilator, że 841 00:49:50,580 --> 00:49:56,390 sam w sobie jest szkodliwy, i będzie złamać program login. 842 00:49:56,390 --> 00:49:59,360 Więc w zasadzie, w tym momencie, nie ma żaden sposób nie można patrzeć na źródła 843 00:49:59,360 --> 00:50:02,450 Kod programu logowania aby zobaczyć, co jest nie tak. 844 00:50:02,450 --> 00:50:04,220 Nie można nawet patrzeć w Kod źródłowy kompilatora 845 00:50:04,220 --> 00:50:06,790 aby zobaczyć, co jest nie tak. 846 00:50:06,790 --> 00:50:11,940 >> Trzeba by spojrzeć na maszynie kod rzeczywisty binarny 847 00:50:11,940 --> 00:50:16,760 skompilowany kompilatorem, aby zobaczyć, czekaj, to linii kodu nie powinno tu być. 848 00:50:16,760 --> 00:50:22,130 Ale Ken Thompson wziął jeden krok dalej i powiedział: dobrze, są 849 00:50:22,130 --> 00:50:25,980 Te specjalne programy, które faktycznie pomóc odczytać plik binarny programów, 850 00:50:25,980 --> 00:50:29,340 a więc jeśli ktoś użył tego programu do odczytać plik binarny, nie widzą tych 851 00:50:29,340 --> 00:50:30,490 linii kodu. 852 00:50:30,490 --> 00:50:34,020 Że modyfikacja tych programów do powiedzenia, wszystko Dobrze, jeśli szukasz na 853 00:50:34,020 --> 00:50:38,460 kompilator, nie pokazuj tego szczególności zestaw dwójkowy. 854 00:50:38,460 --> 00:50:42,830 >> Więc trzeba wziąć, że etap dalej, w zasadzie, które mogłyby mieć 855 00:50:42,830 --> 00:50:46,210 podjęte wiele poziomów zadnie, i w pewnym momencie, nikt nie jest w rzeczywistości 856 00:50:46,210 --> 00:50:47,990 będzie sprawdzenie. 857 00:50:47,990 --> 00:50:52,590 Więc morał z tej historii jest, że jesteś Nie zamierzam pisać 858 00:50:52,590 --> 00:50:54,340 Brzękiem w tej klasie. 859 00:50:54,340 --> 00:50:57,020 Masz zamiar używać wspinaczki Dzyń dużo w tej klasie. 860 00:50:57,020 --> 00:51:00,490 Dla wszystkich wiesz, Szczęk jest szkodliwy Program, który sabotuje każdy 861 00:51:00,490 --> 00:51:03,520 jeden program, jaki kiedykolwiek opracowano. 862 00:51:03,520 --> 00:51:08,206 I zostawić cię na tym bardzo złowieszczy Uwaga, do zobaczenia w środę. 863 00:51:08,206 --> 00:51:10,030 >> [Aplauz] 864 00:51:10,030 --> 00:51:12,935 >> Głośnik 2: Na następnym CS50. 865 00:51:12,935 --> 00:51:14,580 >> GŁOŚNIK 3: Nie waż się powiedzieć. 866 00:51:14,580 --> 00:51:15,930 Można to zrobić. 867 00:51:15,930 --> 00:51:19,440 Zrobiłeś tego wcześniej, można to zrobić dzisiaj, jutro możesz to zrobić. 868 00:51:19,440 --> 00:51:20,930 Już robi to od lat. 869 00:51:20,930 --> 00:51:22,790 Po prostu idź tam i to zrobić. 870 00:51:22,790 --> 00:51:24,310 Można to zrobić. 871 00:51:24,310 --> 00:51:26,102 >> [MUZYKA GRA]