1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [REPRODUCCI횙 DE M횣SICA] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Molt b챕. 4 00:00:12,100 --> 00:00:15,620 Aix챠 que, primer el primer, de v챠deo a partir d'una cara coneguda. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [REPRODUCCI횙 DE V횒DEO] 7 00:00:22,560 --> 00:00:23,370 >> -Molt b챕. 8 00:00:23,370 --> 00:00:27,150 Aquest 챕s CS50, i aix챵 챕s l'inici de la tercera setmana. 9 00:00:27,150 --> 00:00:29,980 Ho sento jo no podia ser-hi amb vosaltres avui, per챵 permeteu-me presentar- 10 00:00:29,980 --> 00:00:32,880 Propi Boden Rob CS50. 11 00:00:32,880 --> 00:00:33,872 >> [VIDEO PLAYBACK FI] 12 00:00:33,872 --> 00:00:39,340 >> [Aplaudiments i crits] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: La filmografia de que el v챠deo 챕s fant횪stic. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Est횪 b챕. 16 00:00:47,770 --> 00:00:50,960 Aix챠 que primer, hi ha un altre dinar. 17 00:00:50,960 --> 00:00:52,330 횋s dem횪 a les 01:15. 18 00:00:52,330 --> 00:00:54,480 No hi ha dinar aquest divendres. 19 00:00:54,480 --> 00:00:55,810 횋s amb Quora. 20 00:00:55,810 --> 00:01:00,190 I Tommy encara no 챕s aqu챠, per챵 un la gent d'all횪 챕s excap CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Aix챠 que ell 챕s un tipus divertit. 23 00:01:02,730 --> 00:01:04,819 Vost챔 ha de venir. 24 00:01:04,819 --> 00:01:05,900 >> Est횪 b챕. 25 00:01:05,900 --> 00:01:11,360 Aix챠 que la setmana passada, vam comen챌ar trencar sobre el que una cadena 챕s en realitat. 26 00:01:11,360 --> 00:01:14,830 Hem sabut des del principi que que 챕s una seq체챔ncia de car횪cters. 27 00:01:14,830 --> 00:01:18,130 Per챵 la setmana passada, hem aprofundit en el fet que el que 챕s en realitat una seq체챔ncia de 28 00:01:18,130 --> 00:01:22,110 personatges, b챕, ara tenim arranjaments de car횪cters. 29 00:01:22,110 --> 00:01:26,450 I sabem que una cadena, que 챕s una matriu de personatges, al final, 30 00:01:26,450 --> 00:01:30,920 tenim aquest byte nul especial, aquest barra invertida 0, que indica el final de 31 00:01:30,920 --> 00:01:32,230 la cadena. 32 00:01:32,230 --> 00:01:36,970 >> I aix챠, una cadena 챕s un arranjament de personatges, per챵 podem tenir m챕s de 33 00:01:36,970 --> 00:01:39,530 nom챕s un conjunt de car횪cters, podem tenir una matriu de qualsevol 34 00:01:39,530 --> 00:01:40,890 tipus de coses que volem. 35 00:01:40,890 --> 00:01:51,570 Per tant, si vost챔 recorda de la setmana passada, el Programa d'Edat que David va introduir 36 00:01:51,570 --> 00:01:53,560 molt r횪pid. 37 00:01:53,560 --> 00:01:57,010 Aix챠 que el primer que farem 챕s demanar a l'usuari un nombre sencer, el 38 00:01:57,010 --> 00:01:58,800 nombre de persones a l'habitaci처. 39 00:01:58,800 --> 00:02:01,260 Un cop tinguem aquest sencer, estem declarant una matriu. 40 00:02:01,260 --> 00:02:02,890 Observi aquesta sintaxi suport. 41 00:02:02,890 --> 00:02:04,540 Vost챔 va a acostumar-se a aix챵. 42 00:02:04,540 --> 00:02:09,430 >> Aix챠 que estem declarant una matriu d'enters diuen les edats, i hi ha n 43 00:02:09,430 --> 00:02:12,080 sencers en aquesta matriu. 44 00:02:12,080 --> 00:02:16,480 Aix챠 que aquest patr처 aqu챠, aquest abril int i 챕s igual a 0, i 챕s menor que n, i m챕s 45 00:02:16,480 --> 00:02:20,580 a m챕s, que tamb챕 ser횪 un patr처 que vost챔 aconsegueix molt acostumat. 46 00:02:20,580 --> 00:02:24,000 Perqu챔 aix챵 챕s m챕s o menys com ets sempre va a iterar sobre arrays. 47 00:02:24,000 --> 00:02:26,330 Aix챠 que recorda que n 챕s el longitud de la nostra matriu. 48 00:02:26,330 --> 00:02:32,120 Aix챠 que aqu챠, estem demanant repetidament per l'edat de la persona i a l'habitaci처. 49 00:02:32,120 --> 00:02:36,640 >> Despr챕s d'aix챵, anem cap avall, i per qualsevol ra처 arbitr횪ria, llavors 50 00:02:36,640 --> 00:02:40,220 imprimir l'edat que van a ser un any a partir d'ara. 51 00:02:40,220 --> 00:02:49,980 I executar aquest programa, anem a fer edats, punt edats slash. 52 00:02:49,980 --> 00:02:53,010 Aix챠 que el nombre de persones a l'habitaci처, diguem que hi ha tres. 53 00:02:53,010 --> 00:02:59,880 I dir, la primera persona 챕s de 13, seg체ent 챕s 26, i l'첬ltim 챕s 30. 54 00:02:59,880 --> 00:03:05,080 Aix챠 llavors va a iterar sobre els tres gent, imprimeixen 14, 27 i 31. 55 00:03:05,080 --> 00:03:16,060 >> Aix챠 que recordi que quan declarem 1 matriu de grand횪ria n, els 챠ndexs en qu챔 56 00:03:16,060 --> 00:03:19,950 matriu, la matriu t챕 valors i 챠ndexs 0, 1, 2, tot el cam챠 57 00:03:19,950 --> 00:03:21,680 fins an almenys 1. 58 00:03:21,680 --> 00:03:26,255 Aix챠 que quan ens va dir que hi havia tres persones en el quart, i el posem aqu챠 59 00:03:26,255 --> 00:03:29,850 la primera iteraci처 a trav챕s d'aquest bucle, i ser횪 0. 60 00:03:29,850 --> 00:03:31,650 Aix챠 que en l'챠ndex 0. 61 00:03:31,650 --> 00:03:34,540 Estem assignant la primera Edat L'usuari introdueix. 62 00:03:34,540 --> 00:03:38,870 Despr챕s, en el seg체ent, estem entrant en el segon n l'usuari entra, i en 63 00:03:38,870 --> 00:03:40,580 al costat de dos, l'첬ltim n. 64 00:03:40,580 --> 00:03:44,200 >> Aix챠 adonar que una matriu de mida tres no t챕 res 65 00:03:44,200 --> 00:03:46,040 en l'챠ndex de tres. 66 00:03:46,040 --> 00:03:49,036 Aix챵 no 챕s v횪lida. 67 00:03:49,036 --> 00:03:50,250 Est횪 b챕. 68 00:03:50,250 --> 00:03:55,136 Aix챠 que, tornant aqu챠. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Aix챠 que ara que hem tractat amb matrius, tenim certa familiaritat. 71 00:04:01,590 --> 00:04:03,780 Ara anem a passar a comandaments arguments de la l챠nia, que seran 72 00:04:03,780 --> 00:04:05,890 molt rellevants per a aquest conjunt de problemes. 73 00:04:05,890 --> 00:04:09,670 >> Aix챠 que, fins ara, cada vegada que vost챔 t챕 declarar que la seva funci처 principal, que hem 74 00:04:09,670 --> 00:04:11,230 va dir void main int. 75 00:04:11,230 --> 00:04:14,070 Aix챠 buit nom챕s significa que no estem passant qualsevol 76 00:04:14,070 --> 00:04:16,440 arguments d'aquesta funci처. 77 00:04:16,440 --> 00:04:19,190 Ara anem a veure que la principal pot prendre alguns arguments. 78 00:04:19,190 --> 00:04:22,470 Aqu챠 els anomenem int argc i els suports argv cadena. 79 00:04:22,470 --> 00:04:26,930 Els suports, un cop m챕s, el que indica que estem tractant amb matrius. 80 00:04:26,930 --> 00:04:31,850 Aix챠 que aqu챠, entre par챔ntesis argv cadena, estem es tracta d'una matriu de cadenes. 81 00:04:31,850 --> 00:04:35,360 Aix챠 argc, aix챵 va a indicar quants arguments que hem 82 00:04:35,360 --> 00:04:37,580 passat a aquest programa. 83 00:04:37,580 --> 00:04:46,050 I per veure el que aix챵 significa, anem a tancar aix챵. 84 00:04:46,050 --> 00:04:46,490 >> D'acord. 85 00:04:46,490 --> 00:04:50,790 Aix챠 que, fins ara, ens hem quedat tots programa com les edats de la ratlla vertical de punts. 86 00:04:50,790 --> 00:04:55,250 Podem tamb챕, en la l챠nia d'ordres, m챕s enll횪 passar arguments, d'aqu챠 el terme, la comanda 87 00:04:55,250 --> 00:04:56,550 arguments de la l챠nia. 88 00:04:56,550 --> 00:04:59,760 Aix챠 que el primer argument, hola m처n. 89 00:04:59,760 --> 00:05:03,350 Aix챠 que aqu챠, argc seria 3. 90 00:05:03,350 --> 00:05:07,720 횋s el recompte dels arguments en la l챠nia d'ordres. 91 00:05:07,720 --> 00:05:12,840 Argc 챕s sempre almenys 1, des del punt retallar les edats, en si, que compta com un 92 00:05:12,840 --> 00:05:14,490 els arguments de la l챠nia d'ordres. 93 00:05:14,490 --> 00:05:17,010 >> Despr챕s hola 챕s la primera. 94 00:05:17,010 --> 00:05:20,460 Si edats slash dot 챕s el zero, aleshores hola 챕s la primera, i el m처n 챕s la 95 00:05:20,460 --> 00:05:22,830 segon argument de la l챠nia d'ordres. 96 00:05:22,830 --> 00:05:29,490 Aix챠 que la cadena argv, anem a veure, cont챕 les cadenes, slash dot 97 00:05:29,490 --> 00:05:33,830 edats, hola, i al m처n. 98 00:05:33,830 --> 00:05:38,945 I, per la petici처 de David, anem per reproduir un v챠deo d'introduir. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [REPRODUCCI횙 DE V횒DEO] 101 00:05:43,890 --> 00:05:46,240 >> -Fins ara, en els programes que hem per escrit, hem declarem 102 00:05:46,240 --> 00:05:48,500 principal void main com int. 103 00:05:48,500 --> 00:05:51,170 I tot aquest temps, aquest buit t챕 simplement s'especifica que el 104 00:05:51,170 --> 00:05:54,430 programa no pren cap arguments de la l챠nia d'ordres. 105 00:05:54,430 --> 00:05:57,750 En altres paraules, quan un usuari executa una programa, ell o ella pot proporcionar comanda 106 00:05:57,750 --> 00:06:01,710 arguments de la l챠nia de l'escriptura addicional paraules o frases despr챕s del programa 107 00:06:01,710 --> 00:06:03,000 nom en l'indicador. 108 00:06:03,000 --> 00:06:06,550 >> B챕, si vost챔 no desitja que el seu programa per prendre arguments de l챠nia d'ordres, un o 109 00:06:06,550 --> 00:06:10,540 m챕s d'aquestes paraules, hem de reempla챌ar anul 쨌 lar amb un parell d'arguments. 110 00:06:10,540 --> 00:06:12,200 Aix챠 que anem a fer aix챵. 111 00:06:12,200 --> 00:06:15,750 Inclogui CS50.h. 112 00:06:15,750 --> 00:06:19,360 Inclogui io.h. est횪ndard 113 00:06:19,360 --> 00:06:20,760 Int principal. 114 00:06:20,760 --> 00:06:26,330 I ara, en lloc de buit, em vaig a especifiqueu un sencer anomenat argc i una 115 00:06:26,330 --> 00:06:28,780 matriu de cadenes denominades argv. 116 00:06:28,780 --> 00:06:31,820 Ara, argc i argv s처n simplement convencions. 117 00:06:31,820 --> 00:06:34,000 >> Podr챠em haver cridat a aquests arguments m챕s el que vulguem. 118 00:06:34,000 --> 00:06:37,630 Per챵 l'important 챕s que argc 챕s 01:00 int perqu챔, per definici처, 챕s 119 00:06:37,630 --> 00:06:41,360 contindr횪 el nombre de l'argument, la nombre de paraules en total que l' 120 00:06:41,360 --> 00:06:43,380 usuari ha escrit al seu sol 쨌 licitud. 121 00:06:43,380 --> 00:06:47,910 argv, per la seva banda, l'argument de vectors, 챕s ser횪 en realitat una matriu d'emmagatzematge 122 00:06:47,910 --> 00:06:52,020 totes les paraules que l'usuari t챕 escrit en la sol 쨌 licitud. 123 00:06:52,020 --> 00:06:54,500 >> Anem a procedir a fer alguna cosa ara amb un o m챕s d'aquests 124 00:06:54,500 --> 00:06:55,660 arguments de la l챠nia d'ordres. 125 00:06:55,660 --> 00:07:00,070 En particular, seguirem endavant i imprimir qualsevol paraula que l'usuari 126 00:07:00,070 --> 00:07:03,960 despr챕s del nom del programa en l'indicador. 127 00:07:03,960 --> 00:07:04,730 Suport Obre. 128 00:07:04,730 --> 00:07:06,240 Tancar suport. 129 00:07:06,240 --> 00:07:10,510 Cent Printf s barra invertida i coma. 130 00:07:10,510 --> 00:07:14,550 I ara he de dir-te printf quin valor per connectar a aquest marcador de posici처. 131 00:07:14,550 --> 00:07:18,600 Vull que la primera paraula que l'usuari t챕 escrit despr챕s del nom del programa, 132 00:07:18,600 --> 00:07:23,130 i per aix챵 em vaig a especificar argv suport 1, prop 133 00:07:23,130 --> 00:07:24,830 par챔ntesi, punt i coma. 134 00:07:24,830 --> 00:07:27,290 >> Ara, per qu챔 el suport 1 i que no suporti 0? 135 00:07:27,290 --> 00:07:30,990 B챕, resulta que, emmagatzemada autom횪ticament en argv 0 ser횪 el 136 00:07:30,990 --> 00:07:32,620 nom real del programa. 137 00:07:32,620 --> 00:07:36,180 Aix챠 que la primera paraula que l'usuari despr챕s del nom del programa 챕s, per 138 00:07:36,180 --> 00:07:38,990 convenci처, ser횪 emmagatzemat en argv 1. 139 00:07:38,990 --> 00:07:42,380 Ara anem a compilar i executar aquest programa. 140 00:07:42,380 --> 00:07:47,780 >> Fer argv 0, slash argv punt 0. 141 00:07:47,780 --> 00:07:50,520 I ara una paraula com hola. 142 00:07:50,520 --> 00:07:51,670 Intro. 143 00:07:51,670 --> 00:07:53,520 I aqu챠 el tenim, hola. 144 00:07:53,520 --> 00:07:55,750 >> [VIDEO PLAYBACK FI] 145 00:07:55,750 --> 00:07:57,000 >> ROB BODEN: Molt b챕. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Tanca aquesta. 148 00:08:01,230 --> 00:08:16,730 Aix챠 que fer una ullada a aquest programa que hem introdu챦t per a nosaltres, b챕, 149 00:08:16,730 --> 00:08:24,710 per mostrar, si imprimim argv 0, marca, ara Qu챔 챕s, argv 0, slash argv punt 0. 150 00:08:24,710 --> 00:08:30,440 Aix챠 que, com s'esperava, s'imprimeixi la el nom del programa, ja que 챕s argv 0 151 00:08:30,440 --> 00:08:32,970 sempre ser횪 el el nom del programa. 152 00:08:32,970 --> 00:08:35,640 Per챵 farem alguna cosa una poc m챕s interessant. 153 00:08:35,640 --> 00:08:42,080 >> Aix챠, en el conjunt de problemes, vost챔 ser횪 introdu챦t a aquesta funci처, atoi. 154 00:08:42,080 --> 00:08:44,440 Llavors, qu챔 챕s el que utilitzem per atoi? 155 00:08:44,440 --> 00:08:48,550 Aix챵 va a convertir una cadena a un enter. 156 00:08:48,550 --> 00:08:53,280 Aix챠 que si pas la cadena, un, dos, tres, a atoi, que ha de convertir en qu챔 157 00:08:53,280 --> 00:08:56,910 al sencer, un, dos, tres. 158 00:08:56,910 --> 00:09:01,480 Aix챠 que anem a convertir la primera l챠nia d'ordres argument en un enter, 159 00:09:01,480 --> 00:09:05,690 i despr챕s simplement imprimir aquest sencer. 160 00:09:05,690 --> 00:09:09,680 >> Aix챠 que, b횪sicament, estem una mica reimplementar getint, nom챕s el 161 00:09:09,680 --> 00:09:12,350 sencer s'introdueix en la comanda l챠nia en lloc de en el programa 162 00:09:12,350 --> 00:09:14,560 interactiva. 163 00:09:14,560 --> 00:09:23,170 Aix챠 doncs, fent argv 0, farem que aqu챠, i tancar aquesta. 164 00:09:23,170 --> 00:09:27,670 Llavors, executar argv 0, i entrarem en el nombre enter, un dos tres, quatre un dos. 165 00:09:27,670 --> 00:09:30,840 Aix챠 que va a imprimir el nombre enter, un dos tres quatre un dos. 166 00:09:30,840 --> 00:09:35,500 Hi ha algunes subtileses que atoi que que deixar횪 de preocupar de res 167 00:09:35,500 --> 00:09:39,040 m챕s enll횪 d'un car횪cter num챔ric v횪lid, per챵 aix챵 no importa. 168 00:09:39,040 --> 00:09:42,870 >> Llavors, qu챔 creus que passa si faig aix챵? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Decisi처 de segmentaci처. 171 00:09:47,050 --> 00:09:50,410 Llavors per qu챔 챕s aix챵? 172 00:09:50,410 --> 00:09:56,060 Si un mira cap enrere en el nostre programa, estem convertir argv 1, el primer argument 173 00:09:56,060 --> 00:09:59,610 despr챕s que el nom del programa, a un enter. 174 00:09:59,610 --> 00:10:03,350 Per챵 no hi ha un argument que es passa despr챕s que el nom del programa. 175 00:10:03,350 --> 00:10:08,060 Aix챠 que aqu챠, veiem que es tracta d'un buggy programa, ja que, si tractem d'executar 176 00:10:08,060 --> 00:10:10,530 sense cap argument, simplement es penjar횪. 177 00:10:10,530 --> 00:10:16,950 >> Aix챠 que un altre patr처 com첬 veur횪s 챕s com, si argc 챕s menys 178 00:10:16,950 --> 00:10:21,100 de dos, el que indica que no hi havia almenys el nom del programa i una 179 00:10:21,100 --> 00:10:29,100 primer argument, llavors farem alguna cosa com printf, no n'hi ha prou 180 00:10:29,100 --> 00:10:31,190 arguments de la l챠nia d'ordres. 181 00:10:31,190 --> 00:10:33,170 Aix챵 probablement no 챕s una bona per imprimir, 챕s probable que sigui alguna cosa, com 182 00:10:33,170 --> 00:10:35,440 haur횪 d'ingressar un nombre enter en la l챠nia d'ordres. 183 00:10:35,440 --> 00:10:37,450 Vaig a acabar all횪. 184 00:10:37,450 --> 00:10:39,600 I despr챕s tornar 1. 185 00:10:39,600 --> 00:10:44,740 Aix챠 que recordi que al final de la nostra programa, si tornem 0, aquest tipus de 186 00:10:44,740 --> 00:10:47,060 indica l'챔xit. 187 00:10:47,060 --> 00:10:50,940 I principal tamb챕 autom횪ticament retorna 0 si no ho fa. 188 00:10:50,940 --> 00:10:55,800 >> Aix챠 que aqu챠, estem resintonitzar 1 per a indicar que aquest no 챕s l'챔xit. 189 00:10:55,800 --> 00:11:01,000 I vost챔 pot tornar el que vulguis, simplement, 0 indica l'챔xit, i 190 00:11:01,000 --> 00:11:03,390 res indica frac횪s. 191 00:11:03,390 --> 00:11:04,855 Aix챠 que anem a executar aquesta versi처 de les coses. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Aix챠 que ara, si no entrem en una l챠nia d'ordres argument, et dir횪 correctament 194 00:11:16,600 --> 00:11:18,290 nosaltres, no la l챠nia d'ordres suficient. 195 00:11:18,290 --> 00:11:20,610 No va acabar la frase. 196 00:11:20,610 --> 00:11:24,950 Si no, si realment vam passar una, pot completar el programa. 197 00:11:24,950 --> 00:11:27,920 Aix챠 que aix챵 챕s com es pot utilitzar argc en tal de validar el nombre de 198 00:11:27,920 --> 00:11:30,630 Arguments de l챠nia de comandes que repercussi처 efectiva. 199 00:11:30,630 --> 00:11:39,360 >> Aix챠 que farem d'aquest programa una mica m챕s complicat, i mirar a la segona 200 00:11:39,360 --> 00:11:42,180 iteraci처 de les coses. 201 00:11:42,180 --> 00:11:46,310 Aix챠 mateix, estem no nom챕s imprimir el primer argument de la l챠nia d'ordres. 202 00:11:46,310 --> 00:11:51,210 Aqu챠, estem iterant d'iguals i int 0, i 챕s menor que argc, i m챕s 203 00:11:51,210 --> 00:11:55,280 m챕s, i argv impressi처, l'챠ndex i. 204 00:11:55,280 --> 00:11:59,300 Aix챠 que aquest patr처, de nou, aquesta 챕s la mateixa patr처 com abans, excepte que en lloc 205 00:11:59,300 --> 00:12:02,600 de cridar a la variable n, estem usant argc. 206 00:12:02,600 --> 00:12:09,520 >> Aix챠 que aquesta 챕s la iteraci처 a cada 챠ndex en la matriu, i la impressi처 de cada 207 00:12:09,520 --> 00:12:11,910 element de la matriu. 208 00:12:11,910 --> 00:12:20,300 I per aix챵, quan ens trobem aquest programa, b챕, No vaig entrar a qualsevol l챠nia d'ordres 209 00:12:20,300 --> 00:12:22,540 arguments, de manera que nom챕s imprimeix el nom del programa. 210 00:12:22,540 --> 00:12:26,053 Si entro en un munt de coses, que va a imprimir un, cadascun en la seva pr챵pia l챠nia. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> D'acord. 213 00:12:32,210 --> 00:12:34,770 Aix챠 que anem a fer un pas m챕s enll횪. 214 00:12:34,770 --> 00:12:38,890 I en lloc d'imprimir cada argument en la seva pr챵pia l챠nia, anem a imprimir cada 215 00:12:38,890 --> 00:12:42,590 car횪cter de cada argument en la seva pr챵pia l챠nia. 216 00:12:42,590 --> 00:12:46,700 Aix챠 que recordi que argv 챕s una matriu de cadenes. 217 00:12:46,700 --> 00:12:50,960 Llavors, qu챔 챕s una cadena, per챵 una matriu de car횪cters? 218 00:12:50,960 --> 00:12:57,140 Aix챠 que aix챵 significa que argv 챕s realment una conjunt d'una matriu de car횪cters. 219 00:12:57,140 --> 00:13:04,920 Aix챠 que aprofitant que, anem a ignorar aix챵 per ara. 220 00:13:04,920 --> 00:13:08,190 Anem a considerar la cadena argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Aix챠 que si volem portar a cada car횪cter de argv 0 en la seva pr챵pia l챠nia, llavors vull 222 00:13:14,170 --> 00:13:19,500 per fer el patr처 del que estem acostumats, i 챕s menys de la longitud de la matriu, 223 00:13:19,500 --> 00:13:23,990 que en aquest cas, 챕s de strlen, aix챵 챕s no el que jo vull fer, cadena 224 00:13:23,990 --> 00:13:26,450 s 챕s igual a argv 0. 225 00:13:26,450 --> 00:13:30,390 Aix챠 que i 챕s menor que la longitud del nostre matriu, que en aquest cas 챕s una matriu 226 00:13:30,390 --> 00:13:34,410 de personatges, i m챕s plus. 227 00:13:34,410 --> 00:13:41,040 I aix챠, com vam veure la setmana passada, 챕s ideal si ens movem que strlen fora 228 00:13:41,040 --> 00:13:45,210 de la condici처, ja que n ser횪 l'addici처 de el strlen de s cada vegada que anem 229 00:13:45,210 --> 00:13:47,720 a trav챕s del bucle, i 챕s No estar횪 canviant. 230 00:13:47,720 --> 00:13:50,230 Aix챠 que anem a establir 챕s igual a n per aqu챠. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> D'acord. 233 00:13:55,170 --> 00:14:01,320 Aix챠 mateix, estem interactuant sobre cada 챠ndex de la matriu. 234 00:14:01,320 --> 00:14:05,630 I per aix챵, si volem imprimir cada car횪cter en aquesta matriu, per cent c 챕s 235 00:14:05,630 --> 00:14:06,880 la bandera que volem utilitzar per als car횪cters. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 I ara una i suport ser횪 el cadena, car횪cter d'챠ndex i, pel que si el 238 00:14:19,770 --> 00:14:20,970 cordes eren hola. 239 00:14:20,970 --> 00:14:27,530 Llavors S 0 ser횪 H, S suport 1 haur횪 de correu, i aix챠 successivament. 240 00:14:27,530 --> 00:14:30,800 >> Aix챠 que ara volem combinar aquestes dues coses. 241 00:14:30,800 --> 00:14:35,440 Volem imprimir cada car횪cter de cada argument de la l챠nia d'ordres. 242 00:14:35,440 --> 00:14:38,950 Aix챠 que tindrem un bucle For niat. 243 00:14:38,950 --> 00:14:47,480 I convencionalment, el primer comptador S처c jo, el proper ser횪 j, n 244 00:14:47,480 --> 00:14:54,450 ser횪 el strlen de argv i, i 챕s menor que n, i m챕s plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 I ara en lloc d'imprimir argv i, pel que argv suport i va a la llista - 247 00:15:06,870 --> 00:15:14,280 que ser횪 la l챠nia d'ordres-i th argument argv i, j es va a 248 00:15:14,280 --> 00:15:16,925 ser el car횪cter j-챔sim de l'argument-i. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Em desfar챕 d'aix챵 aqu챠 i ara ja que ens posem en aquest bucle. 251 00:15:24,810 --> 00:15:33,900 Aix챠 que 챕s equivalent als iguals de corda s argv i, i despr챕s s suport de j. 252 00:15:33,900 --> 00:15:36,980 >> B챕, nosaltres no hem de declarar aquest s variable. 253 00:15:36,980 --> 00:15:44,530 En lloc d'aix챵, nom챕s haurem de combinar aquests 2 en el que ten챠em, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> ALTAVEU 1: [inaudible]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB BODEN: B챕 dit. 257 00:15:49,680 --> 00:15:52,936 Aix챠 que aix챵 est횪 trencat. 258 00:15:52,936 --> 00:15:55,510 Si jo en realitat va c처rrer, ho far챠em s'han adonat d'aix챵. 259 00:15:55,510 --> 00:16:01,210 Aix챠 que el comptador que m'importa en aquest particular per 260 00:16:01,210 --> 00:16:05,410 bucle 챕s j, l'iterador. 261 00:16:05,410 --> 00:16:08,560 Aix챠 que caldria tingui problemes, probablement un bucle infinit, si ens 262 00:16:08,560 --> 00:16:09,540 no havia fixat que. 263 00:16:09,540 --> 00:16:12,220 횋s per aix챵 que tamb챕 estem parlant sobre la depuraci처 d'avui. 264 00:16:12,220 --> 00:16:13,120 >> D'acord. 265 00:16:13,120 --> 00:16:15,240 Aix챠 que anem a executar aquest programa. 266 00:16:15,240 --> 00:16:21,200 I siguem realment afegir un printf separada aqu챠 que s'acaba d'imprimir 267 00:16:21,200 --> 00:16:27,480 altra l챠nia, ja que aix챵 significa quan executar el programa, hi haur횪 un espai en blanc 268 00:16:27,480 --> 00:16:31,830 l챠nia entre cada car횪cter de cada argument de la l챠nia d'ordres. 269 00:16:31,830 --> 00:16:33,448 B챕, anem a veure el que aix챵 significa. 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 Tens algun error. 273 00:16:39,870 --> 00:16:42,860 Error impl챠citament declarant funci처 de biblioteca strlen. 274 00:16:42,860 --> 00:16:51,630 >> Tornant al nostre programa, que es va oblidar d'incloure el hash string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Aix챠 string.h ser횪 el arxiu de cap챌alera que declara 277 00:16:57,730 --> 00:16:58,980 la funci처 strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 B챕, que compila. 280 00:17:06,060 --> 00:17:09,109 Ara, anem a executar-lo. 281 00:17:09,109 --> 00:17:10,930 Aix챠 que aix챵. 282 00:17:10,930 --> 00:17:17,790 Es va a imprimir el nostre nom del programa, hola m처n. 283 00:17:17,790 --> 00:17:23,510 Es va a imprimir cada cosa, cada car횪cter, en la seva pr챵pia l챠nia. 284 00:17:23,510 --> 00:17:24,540 D'acord. 285 00:17:24,540 --> 00:17:30,625 >> Aix챠 que aprofitarem aquesta realitat un pas m챕s enll횪. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 I en lloc d'utilitzar string.h, anem a pensar en com ens agradaria implementar la nostra pr챵pia 288 00:17:39,700 --> 00:17:41,420 funci처 strlen. 289 00:17:41,420 --> 00:17:45,600 Aix챠 que em vaig a donar immediatament una firma de funci처. 290 00:17:45,600 --> 00:17:52,900 Aix챠 que anem a trucar en my_strlen, i 챕s Va a prendre una cadena com a argument, 291 00:17:52,900 --> 00:17:57,220 i esperem tornar l' longitud d'aquesta cadena. 292 00:17:57,220 --> 00:18:03,430 Aix챠 que, on 챕s aquest tipus? 293 00:18:03,430 --> 00:18:04,990 S챠 294 00:18:04,990 --> 00:18:06,740 D'acord. 295 00:18:06,740 --> 00:18:12,900 Aix챠 que recordi de la diapositiva anterior que Tamb챕 va ser de la setmana passada, que un 296 00:18:12,900 --> 00:18:18,890 arranjament de car횪cters, aix챠, una cadena, aix챠 que diguem que aquesta 챕s la nostra cadena s. 297 00:18:18,890 --> 00:18:29,870 Aix챠 que si s 챕s la cadena, hola, a continuaci처, H-I-L-L-O, a la mem챵ria, que va a 298 00:18:29,870 --> 00:18:35,610 ser, i tot seguit, aquesta barra invertida 0 car횪cter. 299 00:18:35,610 --> 00:18:39,170 >> Llavors, com fem perqu챔 la longitud de s? 300 00:18:39,170 --> 00:18:43,190 B챕, el truc est횪 a la recerca d'aquest 0 contraatac car횪cter, aquesta nul 301 00:18:43,190 --> 00:18:44,380 terminador. 302 00:18:44,380 --> 00:18:50,270 De manera que l'algorisme es va a ser alguna cosa aix챠 com uns pocs 303 00:18:50,270 --> 00:18:51,510 suficients car횪cters que - 304 00:18:51,510 --> 00:18:56,180 anem a fer aquesta m횪 representen alguns taulell, anem a trucar a aquesta longitud int. 305 00:18:56,180 --> 00:19:00,060 Aix챠, a partir d'aqu챠, estem va a iterar sobre la nostra cadena. 306 00:19:00,060 --> 00:19:04,100 >> Aix챠 que el primer car횪cter, 챕s H, i no 챕s de nou slash 0, de manera que 307 00:19:04,100 --> 00:19:05,170 la longitud 챕s 1. 308 00:19:05,170 --> 00:19:08,050 Iterar fins al seg체ent car횪cter, I, i no 챕s la barra invertida 0. 309 00:19:08,050 --> 00:19:09,630 La longitud 챕s de 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 I, finalment, arribem a la barra invertida 0, de manera que aix챵 significa, aix챠, 314 00:19:16,690 --> 00:19:17,780 aquesta cadena ha acabat. 315 00:19:17,780 --> 00:19:20,130 Aix챠 que anem a tornar maig. 316 00:19:20,130 --> 00:19:33,630 >> Aix챠 que en realitat l'aplicaci처 que, en primer lloc, la meva longitud n 챕s igual a 0, la m횪 dreta. 317 00:19:33,630 --> 00:19:36,088 I repetirem - 318 00:19:36,088 --> 00:19:38,000 >> ALTAVEU 1: [inaudible] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: Oh, disparar. 320 00:19:38,640 --> 00:19:39,870 Bona decisi처. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Aix챠 longitud n 챕s igual a 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Aix챠 que ara, la durada, per s no igual i despr챕s, la barra invertida 0. 325 00:19:58,310 --> 00:20:04,660 Aix챠 que recordi, aquesta barra invertida 0, es tracta d'una car횪cter real, i indica 326 00:20:04,660 --> 00:20:05,820 al final de la cadena. 327 00:20:05,820 --> 00:20:09,850 Igual que, tamb챕, la barra invertida n 챕s un personatge real. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 indicar횪 Al final de la nostra cadena. 329 00:20:14,040 --> 00:20:15,414 No vull posar aix챵 aqu챠. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 I mentre que s indexats per la longitud no 챕s igual al terminador nul, 332 00:20:25,620 --> 00:20:27,130 nom챕s anem a incrementar la longitud. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Aix챠 doncs, al final del nostre programa, longitud finalment es va a 335 00:20:34,880 --> 00:20:37,610 ser 5 en aquest cas. 336 00:20:37,610 --> 00:20:39,210 I acabem tornarem longitud. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> D'acord. 339 00:20:43,530 --> 00:20:48,290 Aix챠 que ara aqu챠, no ho s챕 fer my_strlen. 340 00:20:48,290 --> 00:20:50,700 Anem a compilar per assegurar tot funciona sense problemes. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Estava fent en 2? 343 00:20:58,210 --> 00:21:00,565 O era que 1? 344 00:21:00,565 --> 00:21:01,940 Aix챵 hauria de ser suficient. 345 00:21:01,940 --> 00:21:02,690 Est횪 b챕. 346 00:21:02,690 --> 00:21:08,490 Aix챠 que aix챵 챕s argv 2. 347 00:21:08,490 --> 00:21:11,585 Funciona com s'esperava, tot i era que el que jo feia a? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 S챠 350 00:21:15,550 --> 00:21:16,760 D'acord. 351 00:21:16,760 --> 00:21:21,820 Aquesta versi처 del que no tenia la l챠nia nova despr챕s de printf, per챵 352 00:21:21,820 --> 00:21:22,910 no fa cap difer챔ncia. 353 00:21:22,910 --> 00:21:23,300 D'acord. 354 00:21:23,300 --> 00:21:25,780 Aix챠 va treballar com s'esperava. 355 00:21:25,780 --> 00:21:34,750 >> Ara fins i tot podem combinar aquesta un pas A m챕s, quan resulti av챠s aqu챠, b챕, 356 00:21:34,750 --> 00:21:38,920 primer, estem agafant el strlen de argv i, i llavors estem interactuant sobre 357 00:21:38,920 --> 00:21:41,450 cada car횪cter en la cadena. 358 00:21:41,450 --> 00:21:47,480 Aix챠 que en comptes de fer aix챵, i si ens simplement combinar aquesta l챵gica de l'espera 359 00:21:47,480 --> 00:21:50,740 fins que arribem a la barra invertida 0 dret en aquest bucle? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Aix챠 iterar mentre argv i, j fa 챕s igual a 0 barra invertida. 362 00:22:07,490 --> 00:22:10,680 Aix챠 que anem a executar en primer lloc. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Est횪 b챕. 365 00:22:21,180 --> 00:22:27,655 Aix챠 que aqu챠, aquesta condici처 est횪 dient - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 anem a aclarir aix챵. 368 00:22:40,060 --> 00:22:49,140 Aix챠 que ara, que aix챵 sigui la nostra argv. 369 00:22:49,140 --> 00:22:55,290 Aix챠 que quan m'acaba d'executar aquest programa abans, argv 챕s una matriu de cadenes. 370 00:22:55,290 --> 00:23:03,100 I aix챠, si ho executo amb argv slash dot 2, hola m처n, llavors el argv 371 00:23:03,100 --> 00:23:07,650 si 챕s la longitud 3, per argv zero, hola, i al m처n. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> I dins de cada un d'aquests 챠ndexs, 챕s a dir, en si una matriu, on aix챵 ser횪 374 00:23:19,660 --> 00:23:23,780 punt, aix챵 ser횪 slash, no s챕 si aquesta era la direcci처 correcta, em 375 00:23:23,780 --> 00:23:25,680 no crec que era. 376 00:23:25,680 --> 00:23:30,110 A-R-V tauler, necessita m챕s espai. 377 00:23:30,110 --> 00:23:32,570 Anem a tallar a la matriu. 378 00:23:32,570 --> 00:23:38,230 Tauler 0, i despr챕s barra invertida 0 A-R-V. 379 00:23:38,230 --> 00:23:43,160 I llavors en el caos ser횪 hola. 380 00:23:43,160 --> 00:23:45,910 Diguem, H-I barra invertida 0. 381 00:23:45,910 --> 00:23:51,130 I, finalment, W-O barra invertida 0. 382 00:23:51,130 --> 00:23:59,730 >> De manera que l'algorisme que nom챕s escrivim, el niu bucles, el que estan 383 00:23:59,730 --> 00:24:07,321 fent 챕s, en primer lloc tenim la comptador i i j a continuaci처. 384 00:24:07,321 --> 00:24:15,206 Aix챵 seria m챕s f횪cil amb codi en el pantalla, Tornem a aix챵. 385 00:24:15,206 --> 00:24:17,476 D'acord. 386 00:24:17,476 --> 00:24:24,600 Llavors noto que i 챕s l'iterador que 챕s iterar sobre cada comanda 387 00:24:24,600 --> 00:24:25,610 argument de la l챠nia. 388 00:24:25,610 --> 00:24:28,870 I j 챕s la iteraci처 iterador sobre cada car횪cter en qu챔 389 00:24:28,870 --> 00:24:30,410 argument de la l챠nia d'ordres. 390 00:24:30,410 --> 00:24:46,755 Aix챠 que el que aix챵 printf m챕s interna est횪 fent 횋s a dir, tenim 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, 6 0, per챵 ara, argv 0 7 va a 392 00:24:58,680 --> 00:25:00,670 igualtat de barra invertida 0. 393 00:25:00,670 --> 00:25:05,730 >> Aix챠 que vam sortir d'aquest bucle, i ara itera a 1. 394 00:25:05,730 --> 00:25:10,910 I ara anem a imprimir argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 b챕, ara, des que em vaig tallar hola curta, argv febrer 1 El nou ser횪 396 00:25:17,040 --> 00:25:18,170 barra invertida 0. 397 00:25:18,170 --> 00:25:25,050 I aix챠, s'incrementa i i continuar, i aix챠 successivament, fins que ens imprimim tots 398 00:25:25,050 --> 00:25:28,580 m처n, i els tres s처n de l챠nia d'ordres arguments, i anem a sortir del 399 00:25:28,580 --> 00:25:31,670 el bucle m챕s extern, i acabar el nostre programa. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 D'acord. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Aix챠 que anem a arribar fins aqu챠. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Aix챠 obtindr횪 una certa familiaritat amb arguments de la l챠nia de comandaments en aquest 406 00:25:52,370 --> 00:25:54,460 conjunt determinat problema. 407 00:25:54,460 --> 00:25:56,630 >> Ara, la depuraci처. 408 00:25:56,630 --> 00:26:01,680 Aix챠 que 챕s probable que ja hagi hagut de fer certa depuraci처 amb el seu anterior 409 00:26:01,680 --> 00:26:03,120 estableix problema. 410 00:26:03,120 --> 00:26:08,420 I una manera molt f횪cil de depuraci처, en primer lloc, donem una ullada a un programa de buggy. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 B챕, caminar a trav챕s d'aquest programa, anem a demanar a l'usuari per a una 413 00:26:23,830 --> 00:26:29,350 sencer, agafa aquest sencer, i despr챕s, arbitr횪riament, tenim un bucle while que 414 00:26:29,350 --> 00:26:32,280 nom챕s va a disminuir i fins que sigui igual a 10. 415 00:26:32,280 --> 00:26:35,820 Anem a suposar que estic introduint un nombre enter m챕s gran que 10. 416 00:26:35,820 --> 00:26:38,700 Aix챠 decrement i fins que sigui igual a 10. 417 00:26:38,700 --> 00:26:42,630 >> I despr챕s tenim un altre bucle while que, si b챕 i no 챕s igual a 0, estem 418 00:26:42,630 --> 00:26:44,540 disminuir횪 en un 3 i. 419 00:26:44,540 --> 00:26:49,790 Aix챠 que si veus la intenci처 de l'error aqu챠, 챕s que aix챵 va a decrementar i per 420 00:26:49,790 --> 00:26:57,010 ser 10, i llavors aquesta voluntat bucle while i decrement del 10, a 7, a 4, a 1, 421 00:26:57,010 --> 00:27:02,880 a negatiu 2, 5 a negatiu, i aix챠 successivament, fins a l'infinit negatiu, ja que vaig a 422 00:27:02,880 --> 00:27:05,920 En realitat mai de ser igual a 0. 423 00:27:05,920 --> 00:27:08,610 I despr챕s, al final d'aquest programa, tenim la funci처 foo que 챕s 424 00:27:08,610 --> 00:27:12,130 passant impressi처 que jo. 425 00:27:12,130 --> 00:27:16,520 >> Aix챠 que aquest 챕s un programa curt i trivial, i l'error 챕s obvi, 426 00:27:16,520 --> 00:27:18,790 sobretot despr챕s que acabo de va dir quin era l'error. 427 00:27:18,790 --> 00:27:24,840 No obstant aix챵, la intenci처 aqu챠 챕s, b챕, aix챵 podria realment es veuen com a part de la seva 428 00:27:24,840 --> 00:27:30,040 solucions de cobdiciosos de l'첬ltima conjunt de problemes, i que per tant no tingui 429 00:27:30,040 --> 00:27:32,800 alguns bucle infinit en el seu programa, i no tens ni idea 430 00:27:32,800 --> 00:27:34,100 Qu챔 est횪 causant. 431 00:27:34,100 --> 00:27:38,690 Aix챠 que una t챔cnica de depuraci처 molt 첬til 챕s afegir nom챕s printfs 432 00:27:38,690 --> 00:27:40,180 tot el seu codi. 433 00:27:40,180 --> 00:27:49,200 >> Aix챠 que aqu챠 vull un printf fora primer bucle while. 434 00:27:49,200 --> 00:27:53,155 I jo vull un printf, i jo nom챕s vaig a imprimir i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Fins i tot em vaig a fer primer while, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 A l'exterior, mentre que el segon bucle. 439 00:28:09,040 --> 00:28:12,170 Un cop m챕s, imprimiu l'interior d'aqu챠, el valor de i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 I anem a c처rrer aix챵. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Debug slash Aix챠 punt. 444 00:28:24,800 --> 00:28:25,610 Introdu챦u un nombre enter. 445 00:28:25,610 --> 00:28:28,150 Farem 13. 446 00:28:28,150 --> 00:28:28,760 I de cop. 447 00:28:28,760 --> 00:28:33,300 Veiem que estem bucle infinit dins del segon bucle while. 448 00:28:33,300 --> 00:28:36,305 Aix챠 que ara que sabem el que l'error 챕s. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Per챵 la depuraci처 printf 챕s perfectament b챕, per챵 una vegada que els seus programes obtenen 451 00:28:45,610 --> 00:28:50,560 m챕s llarg i complicat, hi ha solucions m챕s sofisticades a 452 00:28:50,560 --> 00:28:51,705 fer les coses de treball. 453 00:28:51,705 --> 00:28:52,955 Aix챠 que anem a eliminar tots aquests printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 I anem a fer que no ho vaig fer trencar res. 456 00:29:08,896 --> 00:29:09,850 D'acord. 457 00:29:09,850 --> 00:29:14,180 >> Aix챠 que el programa que anem introduir s'anomena 458 00:29:14,180 --> 00:29:16,715 GDB, per a GNU depurador. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 B챕, en realitat, anem a eliminar de depuraci처 per una segona, i fer de depuraci처 de nou. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 B챕, en realitat en primer lloc, una bona lli챌처 en els arguments de l챠nia de comandes. 463 00:29:34,440 --> 00:29:37,780 Tingueu en compte que aquesta comanda Clang 챕s compilar tot s'est횪 passant 464 00:29:37,780 --> 00:29:41,300 en la l챠nia d'ordres, aquests valors arguments de la l챠nia d'ordres. 465 00:29:41,300 --> 00:29:46,250 Llavors, com es va a utilitzar arguments de la l챠nia d'ordres, com es 466 00:29:46,250 --> 00:29:51,500 ho va fer abans, i el que vulguis en PSET 2, aix챠 챕s com Clang els est횪 utilitzant. 467 00:29:51,500 --> 00:30:00,070 >> Aix챠 que adonar-se que aquesta primera bandera, gui처 ggdb3, el que est횪 dient 챕s: Clang, 468 00:30:00,070 --> 00:30:03,790 vost챔 ha compilar aquest arxiu amb el intenci처 que amb el temps es 469 00:30:03,790 --> 00:30:05,380 necessari per depurar. 470 00:30:05,380 --> 00:30:13,840 Aix챠 que, mentre vost챔 t챕 aquesta bandera, llavors podem GDB depuraci처. 471 00:30:13,840 --> 00:30:17,380 I va obrir el depurador de GNU. 472 00:30:17,380 --> 00:30:22,920 >> Aix챠 que hi ha una gran quantitat d'ordres que ha de acostumar. 473 00:30:22,920 --> 00:30:27,100 El primer que probablement immediatament necessitar est횪 a Executar. 474 00:30:27,100 --> 00:30:28,200 Llavors, qu챔 챕s Executar far횪? 475 00:30:28,200 --> 00:30:30,910 Aix챵 va a comen챌ar el nostre programa. 476 00:30:30,910 --> 00:30:36,180 Correu de tal manera, en iniciar el programa, el programa ens demana un nombre enter de 13. 477 00:30:36,180 --> 00:30:39,170 I llavors 챕s un bucle infinit com era d'esperar, excepte Vaig treure el 478 00:30:39,170 --> 00:30:40,500 printfs, de manera que ni tan sols veiem aix챵. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Va sortir amb normalitat. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 횋s possible que envolta tot el rev챕s, de nou a - ignorar aix챵. 484 00:30:53,640 --> 00:30:55,170 Suposem que no sortir normalment. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Hi ha una resposta complicada que aix챵. 487 00:31:03,370 --> 00:31:07,890 >> Aix챠 que ara, aix챵 no 챕s molt 첬til. 488 00:31:07,890 --> 00:31:11,480 Pel que nom챕s s'executa nostre programa a l'interior de Aquest depurador no ens ajuda en qualsevol 489 00:31:11,480 --> 00:31:15,610 manera, ja que podr챠em haver fet dot slash depuraci처 des de fora del BGF. 490 00:31:15,610 --> 00:31:21,250 Aix챠 el comandament que probablement et - 491 00:31:21,250 --> 00:31:22,970 i vaig a sortir d'aquesta. 492 00:31:22,970 --> 00:31:25,850 -Control d o deixar de fumar, tant a la feina. 493 00:31:25,850 --> 00:31:29,550 Aix챠 que anem a obrir de nou. 494 00:31:29,550 --> 00:31:31,130 >> Una altra ordre que probablement immediatament voler 495 00:31:31,130 --> 00:31:33,600 acostumar 챕s Break. 496 00:31:33,600 --> 00:31:37,120 Aix챠 que anem a trencar el principal, per ara, i despr챕s vaig a explicar aix챵. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 B챕, aqu챠 veiem establim un punt d'interrupci처 en aquesta l챠nia en debug.c. 499 00:31:46,370 --> 00:31:50,160 Llavors, qu챔 significa ruptura 챕s que quan escriure executar, el programa va a 500 00:31:50,160 --> 00:31:53,560 continuar횪 funcionant fins que Em va colpejar un punt d'interrupci처. 501 00:31:53,560 --> 00:31:59,390 Aix챠 que quan vaig arribar a l'execuci처, el programa s'inicia, i tot seguit, es trenca tan aviat com es 502 00:31:59,390 --> 00:32:01,940 entra en la funci처 principal. 503 00:32:01,940 --> 00:32:06,930 Trencar principal ser횪 una cosa vost챔 bastant com첬 fa. 504 00:32:06,930 --> 00:32:11,340 >> I ara, per presentar- a alguns m챕s ordres. 505 00:32:11,340 --> 00:32:14,330 Noteu aqu챠, que est횪 dient que es va trencar en la l챠nia 11, que 챕s 506 00:32:14,330 --> 00:32:16,230 printf, introdu챦u un enter. 507 00:32:16,230 --> 00:32:21,260 Llavors la comanda seg체ent ser횪 la forma en ens anem a la seg체ent l챠nia de codi. 508 00:32:21,260 --> 00:32:24,810 Aix챵 permetr횪 que fem un pas a trav챕s de la nostra l챠nia de programa per l챠nia. 509 00:32:24,810 --> 00:32:26,260 Aix챠 que la propera. 510 00:32:26,260 --> 00:32:29,820 >> Ara la l챠nia 12, que anem per obtenir el nombre enter. 511 00:32:29,820 --> 00:32:30,450 Seg체ent. 512 00:32:30,450 --> 00:32:34,290 I si simplement premeu la tecla Enter de nou, que va a refer l'첬ltima cosa que va fer. 513 00:32:34,290 --> 00:32:36,480 Aix챠 que no he d'escriure al costat cada vegada. 514 00:32:36,480 --> 00:32:40,100 Aix챠 que entrar en un enter de 13. 515 00:32:40,100 --> 00:32:46,940 Aix챠 que ara, la l챠nia 14, mentre que i 챕s m챕s gran de 10, i far챕 tot seguit. 516 00:32:46,940 --> 00:32:48,685 I veiem que anem a disminuir i. 517 00:32:48,685 --> 00:32:50,210 Aix챠 que anem a disminuir i de nou. 518 00:32:50,210 --> 00:32:53,620 >> Aix챠 que ara, una altra utilitat comanda 챕s Imprimeix. 519 00:32:53,620 --> 00:32:55,750 Aix챠 impressi처 es va a imprimir el valor de la variable. 520 00:32:55,750 --> 00:32:57,825 Anem a posar de manifest el valor d'i variable. 521 00:32:57,825 --> 00:32:58,705 Anem a imprimir i. 522 00:32:58,705 --> 00:33:00,910 Es dir횪 i 챕s 11. 523 00:33:00,910 --> 00:33:03,330 Ara estem de nou en Seg체ent, mentre i 챕s m챕s gran que 10. 524 00:33:03,330 --> 00:33:05,590 Aix챠 que 챕s encara m챕s gran que 10, ja que 챕s 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Anem a imprimir i de nou. 527 00:33:08,250 --> 00:33:10,950 Com era d'esperar, 챕s 10. 528 00:33:10,950 --> 00:33:12,510 >> Aix챠 que ara, al costat. 529 00:33:12,510 --> 00:33:16,250 Es va de nou a la condici처, i 챕s major de 10, per챵 i 챕s ara 10, de manera que 530 00:33:16,250 --> 00:33:20,040 no 챕s m챕s gran que 10, pel que esperem que caigui del bucle while. 531 00:33:20,040 --> 00:33:22,220 I ara estem per sota de la l챠nia de codi. 532 00:33:22,220 --> 00:33:28,750 I un altre ordre, Llista, nom챕s va per mostrar l'anterior i seg체ent 533 00:33:28,750 --> 00:33:31,240 parell de l챠nies de codi, en cas que va perdre a si mateix. 534 00:33:31,240 --> 00:33:35,420 Aix챠 que nom챕s sortia d'aquest bucle while, i ara hem entrat en aquesta 535 00:33:35,420 --> 00:33:37,080 while, l챠nia 18. 536 00:33:37,080 --> 00:33:39,860 Aix챠, mentre que i no 챕s igual a 0. 537 00:33:39,860 --> 00:33:46,570 I, a continuaci처, i 챕s igual a i menys 3, i anem a notar, aix챵 nom챕s seguir횪 endavant. 538 00:33:46,570 --> 00:33:48,270 I podem imprimir i. 539 00:33:48,270 --> 00:33:49,990 >> Cada comandament t챕 una mena de dreceres. 540 00:33:49,990 --> 00:33:51,720 Llavors p 챕s l'abreviatura d'impressi처. 541 00:33:51,720 --> 00:33:53,400 Aix챠 que pot p i. 542 00:33:53,400 --> 00:33:57,550 Hem de tenir la celebraci처 de n, o seguir fent a Seg체ent. 543 00:33:57,550 --> 00:33:58,340 Imprimir i de nou. 544 00:33:58,340 --> 00:34:00,380 Vost챔 veu ara 챕s negatiu 167. 545 00:34:00,380 --> 00:34:06,030 Aix챠 que aix챵 durar횪 per sempre, per챵 no realment per sempre, ja que acaba de veure, 챕s 546 00:34:06,030 --> 00:34:09,330 acabar횪 en realitat en algun moment. 547 00:34:09,330 --> 00:34:15,699 >> Aix챠 que comen챌a GDB. 548 00:34:15,699 --> 00:34:19,504 Per챵 farem una cosa m챕s a GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, de depuraci처. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Aix챠, en aquest cas particular, la bucle infinit va passar a estar dins de 552 00:34:28,534 --> 00:34:30,050 la funci처 principal. 553 00:34:30,050 --> 00:34:35,779 I per ara, nom챕s acceptar que que s처c va a moure el bucle infinit en 554 00:34:35,779 --> 00:34:37,029 la funci처 foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Nom챕s recordeu que, al final d'aquest programa, b챕, aix챵 va ser originalment 557 00:34:43,730 --> 00:34:46,210 trucar a foo, que era voleu imprimir i. 558 00:34:46,210 --> 00:34:51,880 Per챵 ara estem cridant foo, que 챕s disminuir횪 i fins que sigui 0, i 559 00:34:51,880 --> 00:34:54,548 a continuaci처, imprimir aquesta variable. 560 00:34:54,548 --> 00:34:55,469 D'acord. 561 00:34:55,469 --> 00:34:57,970 Deseu aix챵. 562 00:34:57,970 --> 00:35:00,175 Fer debug. 563 00:35:00,175 --> 00:35:03,310 I ara, de depuraci처 gdb. 564 00:35:03,310 --> 00:35:04,090 D'acord. 565 00:35:04,090 --> 00:35:10,580 >> Aix챠 que si nom챕s Corro llavors jo no vaig a poder donar un pas en realitat a trav챕s del meu 566 00:35:10,580 --> 00:35:11,730 l챠nia per l챠nia de programa. 567 00:35:11,730 --> 00:35:19,820 Aix챠 que anem a trencar en el principal, i escriviu termini. 568 00:35:19,820 --> 00:35:28,160 Aix챠 de passar per aix챵, printf, introdu챦u un enter, obtenir el nombre enter de 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Aix챠 que seguirem decrement fins que i 챕s m챕s gran que 10. 571 00:35:37,490 --> 00:35:42,840 Llavors anem a caure a trav챕s de la while, i arribar a la l챠nia - 572 00:35:42,840 --> 00:35:44,364 obrirem cap amunt en una finestra separada. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Aix챠 que disminueix fins que jo no era m챕s gran que 10, i despr챕s 575 00:35:53,300 --> 00:35:55,700 crida a la funci처, foo. 576 00:35:55,700 --> 00:36:01,340 >> I qu챔 va passar tan aviat com em va colpejar function foo, b챕, em crida foo, i 577 00:36:01,340 --> 00:36:04,030 llavors ja no vaig tenir control sobre GDB. 578 00:36:04,030 --> 00:36:10,230 Aix챠 que tan aviat com em va colpejar a Seg체ent en aquesta l챠nia, coses van continuar fins que va passar aix챵, 579 00:36:10,230 --> 00:36:12,400 on el programa va sortir al - 580 00:36:12,400 --> 00:36:14,450 assumeixi que no existia el temps. 581 00:36:14,450 --> 00:36:16,390 Vost챔 ho va veure fer una pausa per un moment per챵. 582 00:36:16,390 --> 00:36:22,040 Llavors, per qu챔 he perdut el control sobre el programa en aquest moment? 583 00:36:22,040 --> 00:36:27,540 B챕, quan escric a continuaci처, que es destina a la seg체ent l챠nia de codi literal que 584 00:36:27,540 --> 00:36:28,850 s'executar횪. 585 00:36:28,850 --> 00:36:35,950 Aix챠 que despr챕s de la l챠nia 21, la seg체ent l챠nia de codi que s'executar횪 챕s la l챠nia 22, 586 00:36:35,950 --> 00:36:38,520 que 챕s, que surt de principal. 587 00:36:38,520 --> 00:36:43,810 Aix챠 que no em vull anar a la seg체ent l챠nia de codi. 588 00:36:43,810 --> 00:36:48,170 Jo vull entrar en la funci처, foo, i despr챕s tamb챕 pas a pas 589 00:36:48,170 --> 00:36:49,830 aquestes l챠nies de codi. 590 00:36:49,830 --> 00:36:53,726 >> Aix챠 que per aix챵, tenim una alternativa. 591 00:36:53,726 --> 00:36:56,770 Deixem d'aix챵 una altra vegada. 592 00:36:56,770 --> 00:36:58,020 Trencar principal. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, seg체ent, seg체ent, el 13, al costat, seg체ent, seg체ent, amb cura, 595 00:37:06,370 --> 00:37:09,820 abans de tirar-nos a foo l챠nia. 596 00:37:09,820 --> 00:37:10,520 D'acord. 597 00:37:10,520 --> 00:37:13,700 >> Aix챠 que ara, que estem en la l챠nia 21, on anomenem foo. 598 00:37:13,700 --> 00:37:17,100 No volem que escrigui al costat, ja que s'acaba de cridar a la funci처 foo, i 599 00:37:17,100 --> 00:37:18,710 anar a la seg체ent l챠nia de codi. 600 00:37:18,710 --> 00:37:20,840 El que volem utilitzar 챕s el Pas. 601 00:37:20,840 --> 00:37:25,690 Aix챠 que hi ha una difer챔ncia entre el Pas i Next, on el pas entra a la 602 00:37:25,690 --> 00:37:28,190 funcionar, i Next va sobre la funci처. 603 00:37:28,190 --> 00:37:32,830 Simplement executa la totalitat de la funci처 i segueix pujant. 604 00:37:32,830 --> 00:37:37,210 >> Aix챠 que pas ens portar횪 en la funci처, foo. 605 00:37:37,210 --> 00:37:41,160 I veiem aqu챠, ara, estem de tornada a aquest bucle while que 챕s, en teoria, 606 00:37:41,160 --> 00:37:44,190 continuar횪 per sempre. 607 00:37:44,190 --> 00:37:50,420 I si es colpeja Pas, quan ni tan sols 챕s una funci처 per cridar, llavors 챕s 608 00:37:50,420 --> 00:37:51,720 id챔ntica al seg체ent. 609 00:37:51,720 --> 00:37:55,320 Aix챠 que 챕s nom챕s quan vost챔 est횪 en una l챠nia que est횪 cridant a una funci처 que Step 610 00:37:55,320 --> 00:37:56,970 va a diferir de Seg체ent. 611 00:37:56,970 --> 00:37:57,930 Aix챠 Pas ens portar횪 aqu챠. 612 00:37:57,930 --> 00:38:02,100 Pas, pas, pas, pas, pas, pas, i Tindrem bucle infinit per sempre. 613 00:38:02,100 --> 00:38:06,810 >> Aix챠 que 챕s possible acostumar-se a que, com el seu forma d'identificar bucles infinits, 챕s 614 00:38:06,810 --> 00:38:08,960 nom챕s la celebraci처 d'aquesta tecla Enter per veure on et quedes encallat. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Hi ha millors maneres de fer-ho, per챵 per ara, aix챵 챕s perfectament suficient. 617 00:38:14,780 --> 00:38:17,967 I estil챠sticament, per complir amb Estil 50, que hauria d'haver fet aix챵. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 D'acord. 620 00:38:24,030 --> 00:38:28,400 >> Aix챠 que una 첬ltima ordre a introduir. 621 00:38:28,400 --> 00:38:30,810 B챕, anem a gdb depuraci처 polz 622 00:38:30,810 --> 00:38:35,580 Aix챠 que en lloc de trencar a principal, si con챔ixer la funci처 foo 챕s tamb챕 el 623 00:38:35,580 --> 00:38:39,230 problema, llavors jo podria tenir nom챕s va dir, trencar a foo, al seu lloc. 624 00:38:39,230 --> 00:38:42,310 Diguem que jo trenco en tant principal i foo. 625 00:38:42,310 --> 00:38:45,390 Aix챠 que vost챔 pot configurar tants punts d'interrupci처 com vulguis. 626 00:38:45,390 --> 00:38:49,230 Quan escric termini, que va per parar al - 627 00:38:49,230 --> 00:38:52,180 ooh, anem a tornar a compilar, ja que He canviat les coses. 628 00:38:52,180 --> 00:38:55,950 Vost챔 veur횪 aquesta l챠nia, Notes, font arxiu 챕s m챕s recent que la executable. 629 00:38:55,950 --> 00:38:59,680 Aix챠 que aix챵 significa que em vaig anar d'aqu챠 i canviat aquests per ajustar-se Estil 630 00:38:59,680 --> 00:39:03,100 50, per챵 no a compilar el programa. 631 00:39:03,100 --> 00:39:04,870 Aix챠 GDB em fa conscient d'aix챵. 632 00:39:04,870 --> 00:39:10,130 Deixar챕, fer debug de nou, colpejar debug gdb. 633 00:39:10,130 --> 00:39:10,700 D'acord. 634 00:39:10,700 --> 00:39:12,800 >> Aix챠 que ara, de tornada al que estava fent. 635 00:39:12,800 --> 00:39:15,720 Trencar principal foo, trencar. 636 00:39:15,720 --> 00:39:20,680 Ara b챕, si executo el programa, pel que 챕s continuar횪 fins que fa un 637 00:39:20,680 --> 00:39:21,320 punt d'interrupci처. 638 00:39:21,320 --> 00:39:24,680 Aquest punt d'interrupci처 passa a ser el primer a principal. 639 00:39:24,680 --> 00:39:28,630 Ara, en comptes de fer les seg체ent, seg체ent, seg체ent, seg체ent, seg체ent, fins que vaig arribar a foo, I 640 00:39:28,630 --> 00:39:35,230 pot escriure continuar, que continuar횪 fins arribar a la seg체ent punt d'interrupci처. 641 00:39:35,230 --> 00:39:37,200 He de introduir el nombre enter primer. 642 00:39:37,200 --> 00:39:40,570 Continuar continuar횪 fins que vaig arribar a la seg체ent punt d'interrupci처, que 챕s que 643 00:39:40,570 --> 00:39:43,320 funci처 de foo. 644 00:39:43,320 --> 00:39:50,130 >> Aix챠 Run s'executar횪 fins arribar a un punt de ruptura, per챵 nom챕s s'escriu d'execuci처 quan 645 00:39:50,130 --> 00:39:54,060 vas a comen챌ar el programa i, a continuaci처, a partir de llavors, 챕s continuar. 646 00:39:54,060 --> 00:40:01,950 Si acabo de fer trencar principal i despr챕s va c처rrer, es trencar횪 en 647 00:40:01,950 --> 00:40:03,670 principal, i despr챕s continuar. 648 00:40:03,670 --> 00:40:10,050 Com jo no tinc un punt d'inflexi처 en foo, introduir el nombre enter, llavors ara estic 649 00:40:10,050 --> 00:40:11,380 no trencar횪 a foo. 650 00:40:11,380 --> 00:40:16,318 Nom챕s va a infinit bucle fins que. 651 00:40:16,318 --> 00:40:17,568 D'acord. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Aix챠 que aix챵 챕s Introducci처 a GDB. 654 00:40:24,420 --> 00:40:27,790 Vost챔 ha de comen챌ar a usar-lo en els seus butlletins de problemes. 655 00:40:27,790 --> 00:40:30,550 Pot ser molt 첬til per identificar errors. 656 00:40:30,550 --> 00:40:35,280 Si realment just, l챠nia per l챠nia, vagi a trav챕s del seu codi, i comparar el que 챕s 657 00:40:35,280 --> 00:40:39,740 succeint realment amb el que s'espera a succeir, llavors 챕s bastant 658 00:40:39,740 --> 00:40:41,060 dif챠cil passar per alt els seus errors. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 D'acord. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Aix챠 que la setmana passada David va fer pujar aquest coses secretes Criptografia de clau per a la 663 00:40:54,040 --> 00:40:59,350 primera vegada, on no volem contrasenyes nom챕s poden emmagatzemar en el nostre 664 00:40:59,350 --> 00:41:03,210 ordinador en algun arxiu de text sense format, on alg첬 pot venir i simplement 665 00:41:03,210 --> 00:41:04,660 obrir-lo i llegir-lo. 666 00:41:04,660 --> 00:41:07,530 L'ideal 챕s que es xifren d'alguna manera. 667 00:41:07,530 --> 00:41:13,340 I en exercicis 2, se'l tracta amb un m챔tode de xifrat, 668 00:41:13,340 --> 00:41:16,520 O, b챕, dos m챔todes, per챵 que no s처n tan grans. 669 00:41:16,520 --> 00:41:20,050 Si ho fa l'edici처 hacker, ets tamb챕 estar횪 tractant amb 670 00:41:20,050 --> 00:41:22,150 desxifrar algunes coses. 671 00:41:22,150 --> 00:41:29,770 >> Aix챠 que la q체esti처 ara 챕s, b챕, encara que tenim el xifrat m챕s potent 672 00:41:29,770 --> 00:41:34,830 algoritme al m처n, si vost챔 escull un particularment pobre contrasenya, llavors 673 00:41:34,830 --> 00:41:37,720 no l'ajudar횪 molt, ja que les persones encara ser횪 capa챌 de entendre-ho. 674 00:41:37,720 --> 00:41:41,530 Encara veient la cadena xifrada i sembla un embolic d'escombraries 675 00:41:41,530 --> 00:41:44,760 que no significa res per a ells, si encara nom챕s ha de provar un parell de contrasenyes 676 00:41:44,760 --> 00:41:50,560 per entendre-ho, llavors vost챔 no s처n molt segures. 677 00:41:50,560 --> 00:41:55,890 Aix챠 que veure un v챠deo que fa que aquest punt. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [REPRODUCCI횙 DE V횒DEO] 680 00:42:00,970 --> 00:42:02,100 >> -Casc, vost챔 Dimoni. 681 00:42:02,100 --> 00:42:03,370 Qu챔 est횪 passant? 682 00:42:03,370 --> 00:42:05,170 Qu챔 est횪s fent amb la meva filla? 683 00:42:05,170 --> 00:42:09,910 >> Me-Permeteu-me que introduir el brillant jove cirurgi횪 pl횪stic, el Dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, el m챕s gran del nas home de treball a tot el 685 00:42:13,730 --> 00:42:16,080 univers, i Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -La seva Altesa. 687 00:42:17,210 --> 00:42:18,070 >> -Nas treball? 688 00:42:18,070 --> 00:42:18,670 No entenc. 689 00:42:18,670 --> 00:42:20,090 Ella ja ha tingut una cirurgia de nas. 690 00:42:20,090 --> 00:42:21,910 Va ser un dol챌 setze present. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 No 챕s el que penses. 693 00:42:23,690 --> 00:42:25,420 횋s molt, molt pitjor. 694 00:42:25,420 --> 00:42:30,300 Si no em dones la combinaci처 de l'escut d'aire, el Dr Schlotkin es 695 00:42:30,300 --> 00:42:34,226 donar a la seva filla de tornada a la seva antiga nas. 696 00:42:34,226 --> 00:42:35,476 >> -No. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 D'on vas treure aix챵? 699 00:42:40,516 --> 00:42:41,440 >> -Molt b챕. 700 00:42:41,440 --> 00:42:42,180 T'ho dir챕. 701 00:42:42,180 --> 00:42:43,381 T'ho dir챕. 702 00:42:43,381 --> 00:42:44,263 No, pare. 703 00:42:44,263 --> 00:42:45,590 No, no ho has de fer. 704 00:42:45,590 --> 00:42:46,860 >> -Tens ra처, estimada. 705 00:42:46,860 --> 00:42:48,450 Vaig a estranyar la seva nova nas. 706 00:42:48,450 --> 00:42:52,090 Per챵 jo no li vaig a dir la combinaci처, no importa qu챔. 707 00:42:52,090 --> 00:42:53,680 >> -Molt b챕. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, fes el que vulguis. 709 00:42:55,685 --> 00:42:56,914 >> -횋s un plaer. 710 00:42:56,914 --> 00:43:00,690 >> [TOOLS es va aguditzar] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Esperi. 713 00:43:02,520 --> 00:43:03,836 Esperi. 714 00:43:03,836 --> 00:43:05,300 T'ho dir챕. 715 00:43:05,300 --> 00:43:06,880 T'ho dir챕. 716 00:43:06,880 --> 00:43:09,130 >> -Jo sabia que anava a funcionar. 717 00:43:09,130 --> 00:43:09,900 Est횪 b챕. 718 00:43:09,900 --> 00:43:12,850 D처na-m'ho. 719 00:43:12,850 --> 00:43:16,918 >> -La combinaci처 챕s un. 720 00:43:16,918 --> 00:43:17,406 >> -Un. 721 00:43:17,406 --> 00:43:18,382 >> -Un. 722 00:43:18,382 --> 00:43:19,358 >> -Dos. 723 00:43:19,358 --> 00:43:19,846 >> -Dos. 724 00:43:19,846 --> 00:43:20,822 >> -Dos. 725 00:43:20,822 --> 00:43:21,310 >> -Tres. 726 00:43:21,310 --> 00:43:21,798 >> -Tres. 727 00:43:21,798 --> 00:43:22,774 >> -Tres. 728 00:43:22,774 --> 00:43:23,262 >> -Quatre. 729 00:43:23,262 --> 00:43:23,750 >> -Quatre. 730 00:43:23,750 --> 00:43:26,150 >> -Quatre. 731 00:43:26,150 --> 00:43:27,010 >> -Cinc. 732 00:43:27,010 --> 00:43:27,670 >> -Cinc. 733 00:43:27,670 --> 00:43:29,010 >> -Cinc. 734 00:43:29,010 --> 00:43:34,770 >> -Aix챠 que la combinaci처 챕s un, dos, tres, quatre, cinc. 735 00:43:34,770 --> 00:43:37,460 Aquesta 챕s la combinaci처 m챕s est첬pida Que he sentit en la meva vida. 736 00:43:37,460 --> 00:43:39,710 Aquest 챕s el tipus de cosa que un idiota tindria en el seu equipatge. 737 00:43:39,710 --> 00:43:42,000 >> -Gr횪cies, Altesa. 738 00:43:42,000 --> 00:43:43,530 >> - Qu챔 vas fer? 739 00:43:43,530 --> 00:43:44,490 >> -Vaig apagar la paret. 740 00:43:44,490 --> 00:43:45,420 >> -No, no ho vas fer. 741 00:43:45,420 --> 00:43:45,840 Va apagar la pel 쨌 l챠cula sencera. 742 00:43:45,840 --> 00:43:46,930 >> -He d'haver premut el bot처 equivocat. 743 00:43:46,930 --> 00:43:48,265 >> -B챕, el va posar de nou. 744 00:43:48,265 --> 00:43:49,110 Col loqueu la pel 쨌 l챠cula de nou. 745 00:43:49,110 --> 00:43:49,510 >> -S챠, senyor. 746 00:43:49,510 --> 00:43:49,917 S챠, senyor. 747 00:43:49,917 --> 00:43:50,324 >> -Anem, Arnold. 748 00:43:50,324 --> 00:43:51,140 Va, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Per descomptat, vost챔 sap que jo seguir챕 haver de cobrar per aix챵. 750 00:43:53,060 --> 00:43:53,440 >> [VIDEO PLAYBACK FI] 751 00:43:53,440 --> 00:43:54,690 >> ROB BODEN: Molt b챕. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Aix챠 que ara que ja estem parlant de seguretat en algunes maneres, agradable 754 00:44:08,430 --> 00:44:16,050 petit cartell de la pel 쨌 l챠cula, pel que en els 첬ltims anys dia, aquests temes amb la NSA 755 00:44:16,050 --> 00:44:17,300 el seguiment de tot. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Pot ser dif챠cil per sentir que tenir algun tipus d'intimitat al 758 00:44:26,930 --> 00:44:34,540 m처n en l챠nia, encara que no podria dir que la major part dels detalls de PRISM. 759 00:44:34,540 --> 00:44:42,130 Aix챠 que anar m챕s enll횪 de PRISM, no anem a parlar d'aix챵, ara 760 00:44:42,130 --> 00:44:44,030 pensar a l'ordinador port횪til. 761 00:44:44,030 --> 00:44:48,360 Aix챠 que aqu챠, vull canviar al meu compte real, 762 00:44:48,360 --> 00:44:50,370 amb el meu petit ping체챠. 763 00:44:50,370 --> 00:44:57,310 Aix챠 que tinc una contrasenya establerta, i que contrasenya 챕s el que jo vull que sigui. 764 00:44:57,310 --> 00:45:02,430 >> Per챵 recordeu que el que estic tala amb, de manera que aquest inici de sessi처 765 00:45:02,430 --> 00:45:04,850 r횪pida, 챕s un programa. 766 00:45:04,850 --> 00:45:07,910 횋s un programa que va ser escrit per alguna persona. 767 00:45:07,910 --> 00:45:13,250 I aix챠, aquesta persona, si s처n particularment malici처s, que van poder 768 00:45:13,250 --> 00:45:17,780 han dit, est횪 b챕, aix챠 que si la contrasenya que entro 챕s igual al meu 769 00:45:17,780 --> 00:45:22,800 contrasenya real, o 챕s igual en certa clau especial - 770 00:45:22,800 --> 00:45:25,550 David 챕s incre챦ble o alguna cosa - 771 00:45:25,550 --> 00:45:27,190 despr챕s deixar-los entrar 772 00:45:27,190 --> 00:45:33,760 Aix챠 que un programador malici처s podria tenir l'acc챕s a totes les seves Macs, o 773 00:45:33,760 --> 00:45:36,150 Finestres, o qualsevol cosa. 774 00:45:36,150 --> 00:45:41,980 >> Aix챠 que no 챕s una gran preocupaci처, ja que, Vull dir, aquest 챕s el programa d'inici de sessi처 775 00:45:41,980 --> 00:45:48,720 aix챵 s'envia amb OS X, centenars o milers de persones tenen 776 00:45:48,720 --> 00:45:50,020 revisat aquest codi. 777 00:45:50,020 --> 00:45:55,330 I aix챠, si, en el codi en algun lloc, vost챔 dir si aquesta cadena 챕s igual als iguals 778 00:45:55,330 --> 00:45:58,860 David 챕s impressionant, inici de sessi처, llavors alg첬 est횪 ser횪, com, esperi. 779 00:45:58,860 --> 00:45:59,800 Aix챵 no est횪 b챕. 780 00:45:59,800 --> 00:46:01,790 Aix챵 no hauria d'estar aqu챠. 781 00:46:01,790 --> 00:46:06,650 Aix챠 que aquesta 챕s una manera de fer les coses a ser una mena d'asseguran챌a. 782 00:46:06,650 --> 00:46:10,300 >> Per챵 pensa en programes fins i tot que escriviu. 783 00:46:10,300 --> 00:46:13,000 Diguem que vost챔 va escriure el programa d'inici de sessi처. 784 00:46:13,000 --> 00:46:20,440 Aix챠 que aquest programa d'inici de sessi처 que vost챔 va escriure, de manera que, 챵bviament, vost챔 챕s un bon 785 00:46:20,440 --> 00:46:21,210 programador. 786 00:46:21,210 --> 00:46:25,610 No vas a posar qualsevol malici처s si x 챕s igual a 챕s igual a David 챕s impressionant 787 00:46:25,610 --> 00:46:27,860 en el codi. 788 00:46:27,860 --> 00:46:31,930 Per챵 aquest programa, el que es fa utilitzar per compilar aquest programa? 789 00:46:31,930 --> 00:46:34,180 Una cosa aix챠 com Clang. 790 00:46:34,180 --> 00:46:38,460 I qu챔 si la persona que li va passar a escriure Clang especial revestit en Clang 791 00:46:38,460 --> 00:46:44,310 una mena, si estic recopilant la programa d'inici de sessi처, introdu챦u el codi 792 00:46:44,310 --> 00:46:49,720 en el programa d'inici de sessi처 que diu, si x 챕s igual a 챕s igual a David 챕s impressionant? 793 00:46:49,720 --> 00:46:59,890 Aix챠 que no 챕s del tot encara, per챵 tenim el mateix emetre aqu챠, on Clang, b챕, 794 00:46:59,890 --> 00:47:03,790 milers, si no desenes de milers de persones, han mirat Clang, tenen 795 00:47:03,790 --> 00:47:07,160 mirat a les seves l챠nies de codi, i va dir: b챕, no passa res aqu챠. 796 00:47:07,160 --> 00:47:10,680 횘bviament, ning첬 est횪 fent una cosa tan mal챔vol. 797 00:47:10,680 --> 00:47:15,780 >> Per챵, qu챔 es Clang si mateix, com, I si va compilar Clang? 798 00:47:15,780 --> 00:47:20,900 Qu챔 passa si tinc algun compilador que compila Clang que s'insereix en Clang 799 00:47:20,900 --> 00:47:25,610 aquest truc especial que diu, est횪 b챕, quan va compilar Clang, llavors el 800 00:47:25,610 --> 00:47:31,290 executable es produeix especialment he mirar dins del programa d'usuari i la inserci처 801 00:47:31,290 --> 00:47:34,230 aquest senyal, 챕s igual als iguals Dave 챕s impressionant? 802 00:47:34,230 --> 00:47:37,990 Aix챠 que recordi que el seu propi compilador necessita ser compilat en algun moment. 803 00:47:37,990 --> 00:47:42,810 Aix챠 que si el que vost챔 tri챦 per compilar Clang amb, s챠 que 챕s nociu, llavors vost챔 804 00:47:42,810 --> 00:47:45,580 podria ser cargolat el conjunt cam챠 per la l챠nia. 805 00:47:45,580 --> 00:47:49,630 >> Aix챠 que aqu챠 tenim a Ken Thompson i Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Aix챠 que aquesta 챕s una foto ic챵nica. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie est횪 a la dreta. 808 00:47:55,470 --> 00:47:58,740 Ell 챕s un dels principals - 809 00:47:58,740 --> 00:48:03,640 pr횪cticament va escriure C. Aix챠 que vost챔 pot donar-li les gr횪cies per aquesta classe. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson est횪 a l'esquerra. 811 00:48:04,840 --> 00:48:07,780 Els dos d'ells, b횪sicament, va escriure UNIX. 812 00:48:07,780 --> 00:48:10,140 B챕, eren els principals contribuents en UNIX. 813 00:48:10,140 --> 00:48:11,310 Hi va haver alguns altres. 814 00:48:11,310 --> 00:48:16,240 Aix챠 que Ken Thompson, en algun moment, guanya el Premi Turing. 815 00:48:16,240 --> 00:48:20,860 I el premi Turing, sempre he escoltat es fa refer챔ncia d'aquesta manera, 챕s el 816 00:48:20,860 --> 00:48:23,100 Premi Nobel de la inform횪tica. 817 00:48:23,100 --> 00:48:27,500 >> Aix챠 que en el Premi Turing, que ha de donar el seu discurs d'acceptaci처. 818 00:48:27,500 --> 00:48:31,790 I se li d처na a aquest molt fam처s discurs Ara, anomenat Reflexions sobre Confiant 819 00:48:31,790 --> 00:48:35,620 Trust, que hem vinculat a al lloc web del curs. 820 00:48:35,620 --> 00:48:41,670 I en aquest discurs, es diu, est횪 b챕, aix챠 que vaig escriure UNIX, i ara tots 821 00:48:41,670 --> 00:48:43,320 que la gent est횪 utilitzant UNIX. 822 00:48:43,320 --> 00:48:46,960 Ara, recorda avui que Linux 챕s un descendent directe de UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X utilitza directament UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows no fa molt, per챵 molt d'idees van ser preses de UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Aix챠 que puja a l'escenari i diu, b챕, vaig escriure UNIX. 826 00:48:59,220 --> 00:49:03,940 I perqu챔 el que vost챔s saben, jo s처c podr횪 iniciar sessi처 en cada 827 00:49:03,940 --> 00:49:05,590 i cadascun dels equips. 828 00:49:05,590 --> 00:49:14,280 Des que em vaig posar una d'elles especialment si x 챕s igual a 챕s igual a Ken Thomson 챕s impressionant, 829 00:49:14,280 --> 00:49:16,350 llavors jo estic autoritzat per iniciar sessi처. 830 00:49:16,350 --> 00:49:18,370 Aix챠 que les persones s처n com, b챕, Com vas fer aix챵? 831 00:49:18,370 --> 00:49:21,090 Ens fixem en el programa d'inici de sessi처 i res est횪 all횪. 832 00:49:21,090 --> 00:49:24,700 횋s com, b챕, he modificat el compilador per ingressar en el programa d'inici de sessi처 833 00:49:24,700 --> 00:49:30,490 perqu챔 el programa d'inici de sessi처 tindr횪 ara que x 챕s igual a 챕s igual a Ken Thompson 834 00:49:30,490 --> 00:49:31,700 챕s impressionant. 835 00:49:31,700 --> 00:49:33,120 >> I diuen, b챕, aix챵 no 챕s cert. 836 00:49:33,120 --> 00:49:35,740 Estem pensant en el compilador i el compilador no t챕 l챠nies de 837 00:49:35,740 --> 00:49:36,400 codi d'aquesta manera. 838 00:49:36,400 --> 00:49:40,540 횋s com, OK, per챵 quins s처n vost챔 compilar el compilador? 839 00:49:40,540 --> 00:49:44,810 I pensen, i ell 챕s, com, b챕, Jo s처c el que et va donar el compilador 840 00:49:44,810 --> 00:49:50,580 utilitzeu per compilar el compilador, per est횪 compilant un compilador, que 841 00:49:50,580 --> 00:49:56,390 s챠 que 챕s malici처s, i la voluntat trencar el programa d'inici de sessi처. 842 00:49:56,390 --> 00:49:59,360 Aix챠 que, b횪sicament, en aquell moment, no hi ha de cap manera es pot mirar la font 843 00:49:59,360 --> 00:50:02,450 codi del programa d'inici de sessi처 per veure el que est횪 malament. 844 00:50:02,450 --> 00:50:04,220 Ni tan sols es podia mirar la codi font del compilador 845 00:50:04,220 --> 00:50:06,790 per veure el que est횪 malament. 846 00:50:06,790 --> 00:50:11,940 >> Vost챔 hauria de mirar la m횪quina codi, el binari real de la 847 00:50:11,940 --> 00:50:16,760 compilador compilat per veure, espera, aquests l챠nies de codi no haurien d'estar aqu챠. 848 00:50:16,760 --> 00:50:22,130 Per챵 Ken Thompson va portar un pas m챕s enll횪 i va dir, b챕, hi ha 849 00:50:22,130 --> 00:50:25,980 aquests programes especials que en realitat ajudar횪 a llegir el binari dels programes, 850 00:50:25,980 --> 00:50:29,340 i pel que si alg첬 utilitza aquest programa per llegir el binari, veurien aquests 851 00:50:29,340 --> 00:50:30,490 l챠nies de codi. 852 00:50:30,490 --> 00:50:34,020 Va modificar els programes de dir, tot Est횪 b챕, si vost챔 est횪 buscant en la 853 00:50:34,020 --> 00:50:38,460 compilador, no mostren aquest particular, conjunt de binari. 854 00:50:38,460 --> 00:50:42,830 >> Aix챠 llavors vost챔 necessita per prendre aquest pas m챕s enll횪 i que, b횪sicament, que podria tenir 855 00:50:42,830 --> 00:50:46,210 m첬ltiples nivells d'indirecci처 preses, i en algun moment, ning첬 en realitat 856 00:50:46,210 --> 00:50:47,990 ser횪 la comprovaci처. 857 00:50:47,990 --> 00:50:52,590 Aix챠 que la moralitat de la hist챵ria 챕s, ets No vaig a estar escrivint 858 00:50:52,590 --> 00:50:54,340 Clang en aquesta classe. 859 00:50:54,340 --> 00:50:57,020 Vost챔 va a estar usant l'escalada Clang molt en aquesta classe. 860 00:50:57,020 --> 00:51:00,490 Per a tots vost챔s saben, Clang 챕s un malici처s programa que est횪 sabotejant cada 861 00:51:00,490 --> 00:51:03,520 sol programa alguna vegada has compilat. 862 00:51:03,520 --> 00:51:08,206 I per sortir d'aquest mateix sinistre nota, ens veiem dimecres. 863 00:51:08,206 --> 00:51:10,030 >> [Aplaudiments] 864 00:51:10,030 --> 00:51:12,935 >> ALTAVEU 2: En la seg체ent CS50. 865 00:51:12,935 --> 00:51:14,580 >> ALTAVEU 3: No t'atreveixis a dir aix챵. 866 00:51:14,580 --> 00:51:15,930 Vost챔 pot fer aix챵. 867 00:51:15,930 --> 00:51:19,440 Vost챔 ha fet aix챵 abans, vost챔 pot fer aix챵 avui en dia, vost챔 pot fer aix챵 dem횪. 868 00:51:19,440 --> 00:51:20,930 Has estat fent aix챵 durant anys. 869 00:51:20,930 --> 00:51:22,790 Nom챕s has d'anar-hi i fer-ho. 870 00:51:22,790 --> 00:51:24,310 Vost챔 pot fer aix챵. 871 00:51:24,310 --> 00:51:26,102 >> [REPRODUCCI횙 DE M횣SICA]