1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUZIKO Ludanta] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: Bone. 4 00:00:12,100 --> 00:00:15,620 Do, unua afero unue, de video el familiara vizaĝo. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO reprodukto] 7 00:00:22,560 --> 00:00:23,370 >> -Bone. 8 00:00:23,370 --> 00:00:27,150 Ĉi tio estas CS50, kaj ĉi tiu estas la komencon de semajno tri. 9 00:00:27,150 --> 00:00:29,980 Mi bedaŭras, mi ne povis esti tie kun vi hodiaŭ, sed permesu al mi prezenti 10 00:00:29,980 --> 00:00:32,880 CS50 propra Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [FINO VIDEO reprodukto] 12 00:00:33,872 --> 00:00:39,340 >> [Aplaŭdo kaj gaja] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: La filmografía en ke la video estas fantazia. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Ĉiuj pravas. 16 00:00:47,770 --> 00:00:50,960 Do unue, estas alia tagmanĝo. 17 00:00:50,960 --> 00:00:52,330 Ĝi estas morgaŭ je 1:15. 18 00:00:52,330 --> 00:00:54,480 Mankas tagmanĝo tiun vendredon. 19 00:00:54,480 --> 00:00:55,810 Estas kun Quora. 20 00:00:55,810 --> 00:01:00,190 Kaj Tommy ne ĉi tie ankoraŭ, sed unu el la homoj estas eksa estro CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Li do estas amuza ulo. 23 00:01:02,730 --> 00:01:04,819 Vi venu. 24 00:01:04,819 --> 00:01:05,900 >> Ĉiuj pravas. 25 00:01:05,900 --> 00:01:11,360 Do la lasta semajno, ni komencis rompi aparte pri kio ŝnuro vere estas. 26 00:01:11,360 --> 00:01:14,830 Ni sciis ekde la komenco, ke ĝi estas vico de signoj. 27 00:01:14,830 --> 00:01:18,130 Sed lastan semajnon, ni enprofundiĝis en la fakto ke kio vere estas vico de 28 00:01:18,130 --> 00:01:22,110 karakterojn, bone, ni nun havas arrays de karakteroj. 29 00:01:22,110 --> 00:01:26,450 Kaj ni scias, ke kordoj, ĝi estas tabelo de karakteroj, ke je la fino, 30 00:01:26,450 --> 00:01:30,920 ni havas tiun specialan nulan bajto, tio backslash 0, kiu indikas la finon de 31 00:01:30,920 --> 00:01:32,230 la kordo. 32 00:01:32,230 --> 00:01:36,970 >> Kaj tia ĉeno estas tabelo de karakterojn, sed ni povas havi pli ol 33 00:01:36,970 --> 00:01:39,530 nur tabelo de signoj, ni povas havi tabelon de iu ajn 34 00:01:39,530 --> 00:01:40,890 tipo de afero, kiun ni volas. 35 00:01:40,890 --> 00:01:51,570 Do, se vi memoras de lasta semajno, la Epokoj programo kiun David enkondukis 36 00:01:51,570 --> 00:01:53,560 vere rapide. 37 00:01:53,560 --> 00:01:57,010 Do unue ni tuj faros estas demandu al la uzanto por entjero, la 38 00:01:57,010 --> 00:01:58,800 nombro de homoj en la ĉambro. 39 00:01:58,800 --> 00:02:01,260 Iam ni havi tiun entjero, ni deklari tabelon. 40 00:02:01,260 --> 00:02:02,890 Rimarku ĉi krampo sintakso. 41 00:02:02,890 --> 00:02:04,540 Vi tuj kutimiĝi al tio. 42 00:02:04,540 --> 00:02:09,430 >> Do ni deklari tabelon de entjeroj nomas aĝoj, kaj tie estas n 43 00:02:09,430 --> 00:02:12,080 entjeroj en tiu tabelo. 44 00:02:12,080 --> 00:02:16,480 Do tiu modelo, ĝuste ĉi tie, ĉi 4 int i egalas 0, i estas malpli ol n, i pli 45 00:02:16,480 --> 00:02:20,580 alpago, kiu estas ankaŭ tuj estos mastron ke vi akiras tre uzata por. 46 00:02:20,580 --> 00:02:24,000 Ĉar tio estas sufiĉe multe kiel vi estas irante ĉiam persisti super arrays. 47 00:02:24,000 --> 00:02:26,330 Do memoru, ke n estas la longeco de nia tabelo. 48 00:02:26,330 --> 00:02:32,120 Kaj do tie, ni ree demandas cxar la aĝon de persono i en la ĉambron. 49 00:02:32,120 --> 00:02:36,640 >> Post ĉi tiu, ni iru malsupren, kaj por kio ajn arbitran kialo, ni do 50 00:02:36,640 --> 00:02:40,220 presi Kian aĝon ili iras esti jaro de nun. 51 00:02:40,220 --> 00:02:49,980 Kaj kurinte tiu programo, ni fari aĝoj, dot oblikvo aĝoj. 52 00:02:49,980 --> 00:02:53,010 Do nombro de homoj en la ĉambron, diru tie estas tri. 53 00:02:53,010 --> 00:02:59,880 Kaj diru, la unua persono estas 13, sekvanta estas 26, kaj la lasta estas 30. 54 00:02:59,880 --> 00:03:05,080 Tial do tio devos persisti super tiuj tri homoj, presi 14, 27, kaj 31. 55 00:03:05,080 --> 00:03:16,060 >> Do memoru, ke kiam ni deklaru tabelo de amplekso n, la indeksoj en tiu 56 00:03:16,060 --> 00:03:19,950 tabelo, la tabelo havas valorojn kaj indeksoj 0, 1, 2, la tuta vojo 57 00:03:19,950 --> 00:03:21,680 ĝis n minus 1. 58 00:03:21,680 --> 00:03:26,255 Do kiam ni diris tie estis tri personoj en la ĉambro, kaj ni metu tien 59 00:03:26,255 --> 00:03:29,850 la unua ripeto tra tiu buklo, i tuj esti 0. 60 00:03:29,850 --> 00:03:31,650 Do en indekso 0. 61 00:03:31,650 --> 00:03:34,540 Ni atribuante la unua kadukiĝi la uzanto eniras. 62 00:03:34,540 --> 00:03:38,870 Tiam en la sekva, ni eniras la dua n la uzanto eniras, kaj en 63 00:03:38,870 --> 00:03:40,580 apud du, la lasta n. 64 00:03:40,580 --> 00:03:44,200 >> Do rimarkos ke tabelo de grandeco tri havas nenion 65 00:03:44,200 --> 00:03:46,040 en la indekso la tri. 66 00:03:46,040 --> 00:03:49,036 Tiu ne estas valida. 67 00:03:49,036 --> 00:03:50,250 Ĉiuj pravas. 68 00:03:50,250 --> 00:03:55,136 Do, irante reen tie. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Do nun, ke ni jam pritraktis sensilo, Ni havas kelkajn familiareco. 71 00:04:01,590 --> 00:04:03,780 Nun ni tuj pluiri al komando linio argumentoj, kiuj estas tuj estos 72 00:04:03,780 --> 00:04:05,890 bela rilatajn al tiu problemo aro. 73 00:04:05,890 --> 00:04:09,670 >> Do ĝis nun, kiam vi havas deklaris via ĉefa funkcio, ni 74 00:04:09,670 --> 00:04:11,230 diris int ĉefa malplenon. 75 00:04:11,230 --> 00:04:14,070 Do malplenon simple signifas, ke ni ne pasante ajna 76 00:04:14,070 --> 00:04:16,440 argumentojn por tiu funkcio. 77 00:04:16,440 --> 00:04:19,190 Nun ni iras, por vidi ke la ĉefaj povas preni kelkajn argumentojn. 78 00:04:19,190 --> 00:04:22,470 Jen ni nomas ilin int argc kaj ŝnuro argv krampoj. 79 00:04:22,470 --> 00:04:26,930 La krampoj, refoje, indikante kiuj ni estas kontraktanta kun arrays. 80 00:04:26,930 --> 00:04:31,850 Do jen, kordo argv krampoj, ni estas kontraktanta kun tabelo de kordoj. 81 00:04:31,850 --> 00:04:35,360 Do argc, ke tuj indikos kiom da argumentoj ni 82 00:04:35,360 --> 00:04:37,580 pasis al tiu programo. 83 00:04:37,580 --> 00:04:46,050 Kaj vidi kion tio signifas, ni fermu. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Do ĝis nun, ni kuros ĉiu programo kiel skalara oblikvo aĝoj. 86 00:04:50,790 --> 00:04:55,250 Ni povas ankaux, en la komandlinio, preter pasi argumentoj, tial la termino, ordono 87 00:04:55,250 --> 00:04:56,550 linio argumentoj. 88 00:04:56,550 --> 00:04:59,760 Do la unua argumento, saluton mondo. 89 00:04:59,760 --> 00:05:03,350 Do jen, argc estus tri. 90 00:05:03,350 --> 00:05:07,720 Ĝi estas la grafo de la argumentoj ĉe la komandlinio. 91 00:05:07,720 --> 00:05:12,840 Argc estas ĉiam almenaŭ 1, ekde punkto oblikvo aĝoj, mem, rakontas kiel unu el 92 00:05:12,840 --> 00:05:14,490 la komandlinio argumentoj. 93 00:05:14,490 --> 00:05:17,010 >> Tiam saluton estas la unua. 94 00:05:17,010 --> 00:05:20,460 Se skalara oblikvo aĝoj estas la nula, tiam saluton estas la unua, kaj la mondo estas la 95 00:05:20,460 --> 00:05:22,830 dua komandlinia argumento. 96 00:05:22,830 --> 00:05:29,490 Do la kordo argv, ni tuj vidos, Enhavas la kordoj, skalara oblikvo 97 00:05:29,490 --> 00:05:33,830 aĝoj, saluton, kaj la mondo. 98 00:05:33,830 --> 00:05:38,945 Kaj, per Davido peto, ni iras ludi video enkonduki tion. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO reprodukto] 101 00:05:43,890 --> 00:05:46,240 >> -Ĝis nun en programoj ni skribita, ni deklarus 102 00:05:46,240 --> 00:05:48,500 ĉefa, kiel int ĉefa malplenon. 103 00:05:48,500 --> 00:05:51,170 Kaj cxi tiu tuta tempo, tiu malplena havas simple estis preciziganta ke la 104 00:05:51,170 --> 00:05:54,430 programo ne preni ajnan komandlinia argumentoj. 105 00:05:54,430 --> 00:05:57,750 En aliaj vortoj, kiam uzanto kuras programon, li aŭ ŝi povas havigi komando 106 00:05:57,750 --> 00:06:01,710 linio argumentoj por skribi aldonan vortoj aŭ frazoj post la programo 107 00:06:01,710 --> 00:06:03,000 nomumi ĉe la prompto. 108 00:06:03,000 --> 00:06:06,550 >> Nu, se vi ĉu vi volas, ke via programo por preni komandlinia argumentojn, unu aŭ 109 00:06:06,550 --> 00:06:10,540 pli tiaj vortoj, ni devas anstataŭi vanigas kun paro da argumentoj. 110 00:06:10,540 --> 00:06:12,200 Do ni faru tion. 111 00:06:12,200 --> 00:06:15,750 Inkluzivi CS50.h. 112 00:06:15,750 --> 00:06:19,360 Inkluzivi normo io.h. 113 00:06:19,360 --> 00:06:20,760 Int main. 114 00:06:20,760 --> 00:06:26,330 Kaj nun, anstataŭ malplenon, mi tuj specifi int nomata argc, kaj 115 00:06:26,330 --> 00:06:28,780 tabelo de kordoj nomata argv. 116 00:06:28,780 --> 00:06:31,820 Nun, argc kaj argv estas simple konvencioj. 117 00:06:31,820 --> 00:06:34,000 >> Ni povis esti nomata tiuj argumentoj plej ion ni volas. 118 00:06:34,000 --> 00:06:37,630 Sed kio gravas estas ke argc estas an int ĉar, laŭ difino, ĝi estas 119 00:06:37,630 --> 00:06:41,360 tuj enhavos la argumento grafo, la nombro de vortoj en entute, ke la 120 00:06:41,360 --> 00:06:43,380 uzanto tajpita en lia aŭ ŝia prompto. 121 00:06:43,380 --> 00:06:47,910 argv, dume, argumento vektoro, estas tuj reale esti tabelo stokante 122 00:06:47,910 --> 00:06:52,020 ĉiuj vortoj, kiujn la uzanto havas tajpitaj en lia aŭ ŝia prompto. 123 00:06:52,020 --> 00:06:54,500 >> Ni plue agos ion nun kun unu aŭ pli el tiuj 124 00:06:54,500 --> 00:06:55,660 komandlinia argumentoj. 125 00:06:55,660 --> 00:07:00,070 En aparta, ni iru antaŭen kaj printi kion ajn vorto la uzanto tajpas 126 00:07:00,070 --> 00:07:03,960 post la programon La nomo ĉe la prompto. 127 00:07:03,960 --> 00:07:04,730 Malferma krampo. 128 00:07:04,730 --> 00:07:06,240 Fermu krampo. 129 00:07:06,240 --> 00:07:10,510 Printf procento s backslash kaj komo. 130 00:07:10,510 --> 00:07:14,550 Kaj nun mi bezonas rakonti al printf kio valoro ŝtopi en tiun lokokupilo. 131 00:07:14,550 --> 00:07:18,600 Mi volas la unua vorto, ke la uzanto havas tajpitaj post la programo la nomo 132 00:07:18,600 --> 00:07:23,130 kaj do mi tuj specifi argv krampo 1, proksime 133 00:07:23,130 --> 00:07:24,830 parentezo, punktokomo. 134 00:07:24,830 --> 00:07:27,290 >> Nu, kial krampo 1 kaj ne krampo 0? 135 00:07:27,290 --> 00:07:30,990 Nu, tio rezultas, aŭtomate stokitaj en argv 0 tuj estos la 136 00:07:30,990 --> 00:07:32,620 programo realan nomon. 137 00:07:32,620 --> 00:07:36,180 Do la unua vorto, ke la uzanto tajpas post la programon La nomo estas, por 138 00:07:36,180 --> 00:07:38,990 kongreso, tuj estos stokita en argv 1. 139 00:07:38,990 --> 00:07:42,380 Ni nun kompili kaj kuros ĉi programo. 140 00:07:42,380 --> 00:07:47,780 >> Faru argv 0, skalara oblikvo argv 0. 141 00:07:47,780 --> 00:07:50,520 Kaj nun unu vorton kiel saluton. 142 00:07:50,520 --> 00:07:51,670 Eniru. 143 00:07:51,670 --> 00:07:53,520 Kaj tie ni havas ĝin, saluton. 144 00:07:53,520 --> 00:07:55,750 >> [FINO VIDEO reprodukto] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: Bone. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Fermu tio. 148 00:08:01,230 --> 00:08:16,730 Do prenante rigardon al tiu programo kiu ni ĵus enkondukis nin, bone, nur 149 00:08:16,730 --> 00:08:24,710 por montri, se ni presi argv 0, fari, nun kio ĝi estas, argv 0, skalara oblikvo argv 0. 150 00:08:24,710 --> 00:08:30,440 Do, kiel atendita, ĝi estas la impreso el la nomo de la programo, ĉar argv 0 estas 151 00:08:30,440 --> 00:08:32,970 ĉiam tuj estos la nomo de la programo. 152 00:08:32,970 --> 00:08:35,640 Sed ni faru ion pli mordis pli interesa. 153 00:08:35,640 --> 00:08:42,080 >> Do la problemo aro, vi estos prezentis al tiu funkcio, atoi. 154 00:08:42,080 --> 00:08:44,440 Do kion ni uzas atoi por? 155 00:08:44,440 --> 00:08:48,550 Tio okazas por konverti ŝnuro al entjero. 156 00:08:48,550 --> 00:08:53,280 Do se mi pasas la kordoj, unu du tri, al atoi, kiuj devos konverti ke 157 00:08:53,280 --> 00:08:56,910 al la entjero, unu du tri. 158 00:08:56,910 --> 00:09:01,480 Do ni tuj konverti la unua komandlinia argumento por entjero, 159 00:09:01,480 --> 00:09:05,690 kaj tiam ĝuste presi ke entjero. 160 00:09:05,690 --> 00:09:09,680 >> Do esence, ni estas speco de reimplementing getint, nur la 161 00:09:09,680 --> 00:09:12,350 entjero estas eniris en la komando linio anstataŭ en la programo 162 00:09:12,350 --> 00:09:14,560 interage. 163 00:09:14,560 --> 00:09:23,170 Tial do, farante argv 0, ni faru ĝin en ĉi tie, kaj fermos, ke. 164 00:09:23,170 --> 00:09:27,670 Do kurante argv 0, kaj ni eniros en la entjero, unu du tri kvar unu du. 165 00:09:27,670 --> 00:09:30,840 Do tio devos presi la entjero, unu du tri kvar unu du. 166 00:09:30,840 --> 00:09:35,500 Estas iuj subtilaĵoj al atoi ke ĝi ĉesos zorgi pri io 167 00:09:35,500 --> 00:09:39,040 preter valida numera karaktero, sed tio ne gravas. 168 00:09:39,040 --> 00:09:42,870 >> Do, kion vi opinias okazas se mi faras tion? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentación kulpo. 171 00:09:47,050 --> 00:09:50,410 Do kial estas tio? 172 00:09:50,410 --> 00:09:56,060 Se vi retrorigardas al nia programo, ni estas konvertanta argv 1, la unua argumento 173 00:09:56,060 --> 00:09:59,610 post la programon nomon, por entjero. 174 00:09:59,610 --> 00:10:03,350 Sed ne estas argumento pasis post la programo nomo. 175 00:10:03,350 --> 00:10:08,060 Do jen, ni vidas, ke tiu estas kalesxo programo, ekde, se ni provas ruli ĝin 176 00:10:08,060 --> 00:10:10,530 sen ajna argumentoj, tio estos nur frakasi. 177 00:10:10,530 --> 00:10:16,950 >> Do alia komuna modelo, vi vidos Estas io kiel, se argc estas malpli 178 00:10:16,950 --> 00:10:21,100 ol du, indikante ke ne estis almenaŭ la programo nomon kaj 179 00:10:21,100 --> 00:10:29,100 unua argumento, tiam ni faros ion kiel printf, ne sufiĉas 180 00:10:29,100 --> 00:10:31,190 komandlinia argumentoj. 181 00:10:31,190 --> 00:10:33,170 Tio verŝajne ne estas bona por presi, ĝi estas probable io, kiel 182 00:10:33,170 --> 00:10:35,440 vi devus entajpi entjeron ĉe la komandlinio. 183 00:10:35,440 --> 00:10:37,450 Mi nur finos ĝin tie. 184 00:10:37,450 --> 00:10:39,600 Kaj tiam revenu 1. 185 00:10:39,600 --> 00:10:44,740 Do memoru, ke je la fino de nia programon, se ni revenos 0, ke ia 186 00:10:44,740 --> 00:10:47,060 indikas sukceson. 187 00:10:47,060 --> 00:10:50,940 Kaj ĉefa ankaŭ aŭtomate Revenas 0 se vi ne faras. 188 00:10:50,940 --> 00:10:55,800 >> Do jen, ni retuning 1 indiki ke tio ne estas sukceso. 189 00:10:55,800 --> 00:11:01,000 Kaj vi povas reveni, kion ajn vi volas, ĝuste, 0 indikas sukceson, kaj 190 00:11:01,000 --> 00:11:03,390 io alia indikas fiaskon. 191 00:11:03,390 --> 00:11:04,855 Do ni kuros ĉi versio de la aferoj. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Do nun, se ni ne enigi komandlinion argumento, gxi devos korekte diri 194 00:11:16,600 --> 00:11:18,290 ni, ne sufiĉas komandlinio. 195 00:11:18,290 --> 00:11:20,610 Ne finis la frazon. 196 00:11:20,610 --> 00:11:24,950 Alie, se ni vere pasi ĝin unu, ĝi povas kompletigi la programon. 197 00:11:24,950 --> 00:11:27,920 Do jen kiel vi uzus argc en Por validigi la nombro de 198 00:11:27,920 --> 00:11:30,630 komandlinia argumentojn ke efektive pasis. 199 00:11:30,630 --> 00:11:39,360 >> Do ni faru ĉi programo iom pli komplika, kaj rigardu la duan 200 00:11:39,360 --> 00:11:42,180 ripeto de la aferoj. 201 00:11:42,180 --> 00:11:46,310 Do nun, ni ne nur presi la unua komandlinia argumento. 202 00:11:46,310 --> 00:11:51,210 Tie, ni ripetanta de int i egaluloj 0, i estas malpli ol argc, i pli 203 00:11:51,210 --> 00:11:55,280 plus, kaj impreso argv, indekso i. 204 00:11:55,280 --> 00:11:59,300 Do ĉi tiu ŝablono, denove, ĉi tiu estas la sama mastro kiel antaŭe, escepte anstataŭ 205 00:11:59,300 --> 00:12:02,600 nomi la variablo n, ni uzas argc. 206 00:12:02,600 --> 00:12:09,520 >> Do tiu estas ripetanta super ĉiu indekso en la tabelo, kaj presi ĉiu 207 00:12:09,520 --> 00:12:11,910 elemento en tiu tabelo. 208 00:12:11,910 --> 00:12:20,300 Kaj cxiufoje, kiam ni kuros ĉi programo, bone, Mi ne eniris ajnan komandlinia 209 00:12:20,300 --> 00:12:22,540 argumentoj, do ĝi apenaŭ printaĵoj la programo nomo. 210 00:12:22,540 --> 00:12:26,053 Se mi eniras faskon da aferoj, tio timige presi, ĉiu sur ĝia propra linio. 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 Do ni prenu plupaŝi. 214 00:12:34,770 --> 00:12:38,890 Kaj anstataŭ presi ĉiun argumenton sur ĝia propra linio, ni presas ĉiu 215 00:12:38,890 --> 00:12:42,590 karakteron de ĉiu argumento sur ĝia propra linio. 216 00:12:42,590 --> 00:12:46,700 Do memoru, ke argv estas tabelo de kordoj. 217 00:12:46,700 --> 00:12:50,960 Do kio estas ĉeno, sed tabelo de signoj? 218 00:12:50,960 --> 00:12:57,140 Do tio signifas ke argv estas vere tabelo de tabelo de signoj. 219 00:12:57,140 --> 00:13:04,920 Do utiligante ke, ni ignoras tion por nun. 220 00:13:04,920 --> 00:13:08,190 Ni nur konsideri la kordo argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Do, se ni volas alporti ĉiu karaktero de argv 0 sur ĝia propra linio, tiam mi deziras 222 00:13:14,170 --> 00:13:19,500 fari la ŝablono ni kutimis, i estas malpli ol la longo de la tabelo, 223 00:13:19,500 --> 00:13:23,990 kiun ĉi tie, estas strlen de, tio estas ne estas kion mi volas fari, kordo 224 00:13:23,990 --> 00:13:26,450 s egalas argv 0. 225 00:13:26,450 --> 00:13:30,390 Do i estas malpli ol la longo de nia tabelo, kiu en ĉi tiu kazo estas tabelo 226 00:13:30,390 --> 00:13:34,410 de karakteroj, i plus plus. 227 00:13:34,410 --> 00:13:41,040 Kaj tiel, kiel ni vidis, pasintsemajne, estas idealo se ni movas ke strlen ekstere 228 00:13:41,040 --> 00:13:45,210 de la kondiĉo, ekde n estos esti aldono la strlen de s ĉiu tempo ni iru 229 00:13:45,210 --> 00:13:47,720 tra la ciklo, kaj ĝi estas ne tuj estos ŝanĝanta. 230 00:13:47,720 --> 00:13:50,230 Do ni starigis ĝin egala al n ĉi tie. 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 Do nun, ni ripetanta super ĉiu indekso en la tabelo. 234 00:14:01,320 --> 00:14:05,630 Kaj do, se ni deziras presi ĉiu karakteron en tiu tabelo, procento c estas 235 00:14:05,630 --> 00:14:06,880 la flago oni volas uzi por gravuloj. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Kaj nun harpinglo i tuj estos la kordo, indekso karaktero i, do se la 238 00:14:19,770 --> 00:14:20,970 kordo estis saluton. 239 00:14:20,970 --> 00:14:27,530 Tiam S 0 tuj estos h, s krampo 1 estos e, kaj tiel plu. 240 00:14:27,530 --> 00:14:30,800 >> Do nun ni volas kombini ĉi tiuj du aferoj. 241 00:14:30,800 --> 00:14:35,440 Ni volas presi ĉiu karaktero de ĉiu komandlinia argumento. 242 00:14:35,440 --> 00:14:38,950 Do ni tuj havos a nestitaj por buklo. 243 00:14:38,950 --> 00:14:47,480 Kaj konvencie, la unua nombrilo Estas mi, la sekvanta tuj estos j, n 244 00:14:47,480 --> 00:14:54,450 Estos la strlen de argv i, i estas malpli ol n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Kaj nun, anstataŭ presi argv i, tiel argv krampo i tuj indekso - 247 00:15:06,870 --> 00:15:14,280 ke tuj estos la i-a komandlinia argumento, argv i, j tuj 248 00:15:14,280 --> 00:15:16,925 esti la jth karakteron de la i-a argumento. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Mi liveras de ĉi tien nun ĉar ni metis ĝin en tiun cirklon. 251 00:15:24,810 --> 00:15:33,900 Do estas ekvivalento al kordo s egaluloj argv i, kaj tiam s krampo j. 252 00:15:33,900 --> 00:15:36,980 >> Nu, ni ne bezonas por deklari ĉi variablo s. 253 00:15:36,980 --> 00:15:44,530 Anstataŭe, ni nur kombini tiujn du en kio ni havis, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [inaudibles]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: Bonan alvokon. 257 00:15:49,680 --> 00:15:52,936 Do tiu estas rompita. 258 00:15:52,936 --> 00:15:55,510 Se mi efektive kuris, ni farus rimarkis tion. 259 00:15:55,510 --> 00:16:01,210 Do la nombrilo mi zorgas pri en tiu aparta por 260 00:16:01,210 --> 00:16:05,410 buklo estas J, la iterator. 261 00:16:05,410 --> 00:16:08,560 Do vi estus kolizii temoj, verŝajne malfinia ciklo, se ni 262 00:16:08,560 --> 00:16:09,540 ne estis fiksita, ke. 263 00:16:09,540 --> 00:16:12,220 Tial ni ankaux parolas pri elpurigi hodiaŭ. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Do ni kuros ĉi programo. 266 00:16:15,240 --> 00:16:21,200 Kaj ni efektive aldonu apartan printf ĝuste ĉi tie, ke estos ĝuste presi 267 00:16:21,200 --> 00:16:27,480 alia linio, ĉar tio signifas, kiam ni ruli la programon, tie estos malplenan 268 00:16:27,480 --> 00:16:31,830 linio inter ĉiu karaktero de ĉiu komandlinia argumento. 269 00:16:31,830 --> 00:16:33,448 Nu, ni vidos kion tio signifas. 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 Got iun cimon. 273 00:16:39,870 --> 00:16:42,860 Eraro implice deklarante biblioteko funkcio strlen. 274 00:16:42,860 --> 00:16:51,630 >> Do reiri al nia programo, mi forgesis hash inkluzivi string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Do string.h tuj estos la kaplinio dosiero kiu deklaras 277 00:16:57,730 --> 00:16:58,980 la funkcio strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, kompilas. 280 00:17:06,060 --> 00:17:09,109 Nun, ni ruli ĝin. 281 00:17:09,109 --> 00:17:10,930 Do ĝuste tion. 282 00:17:10,930 --> 00:17:17,790 Ĝi tuj presi nian programo nomo, saluton mondo. 283 00:17:17,790 --> 00:17:23,510 Ĝi tuj presi ĉiu aĵo, ĉiu karaktero, en lia propra linio. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Do ni reale preni ĉi unu paŝon plu. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Kaj anstataŭ uzi string.h, ni pensu pri kiel ni volus realigi nian propran 288 00:17:39,700 --> 00:17:41,420 strlen funkcio. 289 00:17:41,420 --> 00:17:45,600 Do mi devos tuj donu funkcio subskribon. 290 00:17:45,600 --> 00:17:52,900 Do ni nomas en my_strlen, kaj ĝi estas tuj prenos kordo kiel argumento, 291 00:17:52,900 --> 00:17:57,220 kaj ni atendas por reveni al la longeco de tiu ĉeno. 292 00:17:57,220 --> 00:18:03,430 Do, kie estas tiu knabo? 293 00:18:03,430 --> 00:18:04,990 Jes. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Do memoras el la pli frua slide ke Estis ankaŭ el pasintsemajne, ke 296 00:18:12,900 --> 00:18:18,890 tabelo de signoj, bone, ŝnuro, do ni diru cxi tiu estas nia kordo s. 297 00:18:18,890 --> 00:18:29,870 Do, se s estas la kordo, saluton, tiam, H-E-L-L-ho, en la memoro, ke tuj 298 00:18:29,870 --> 00:18:35,610 esti, kaj tiam ĉi backslash 0 karaktero. 299 00:18:35,610 --> 00:18:39,170 >> Do kiel ni ricevas la longeco de s? 300 00:18:39,170 --> 00:18:43,190 Nu, la truko serĉas ĉi reagon 0 karaktero, tiu nula 301 00:18:43,190 --> 00:18:44,380 finilo. 302 00:18:44,380 --> 00:18:50,270 Do la algoritmo tuj esti io kiel malmultaj 303 00:18:50,270 --> 00:18:51,510 sufiĉe karakteroj ke - 304 00:18:51,510 --> 00:18:56,180 ni havas ĉi mano reprezenti iun nombrilo, ni nomas tiun int longeco. 305 00:18:56,180 --> 00:19:00,060 Do, ekde super cxi tie, ni estas irante persisti super niaj kordo. 306 00:19:00,060 --> 00:19:04,100 >> Do la unua signo, estas H, kaj ĝi ne estas reen oblikvo 0, tiel 307 00:19:04,100 --> 00:19:05,170 la longo estas 1. 308 00:19:05,170 --> 00:19:08,050 Persisti ĝis la venonta signo, E, kaj ĝi ne estas backslash 0. 309 00:19:08,050 --> 00:19:09,630 Daŭro estas 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 Ho, 5. 313 00:19:13,050 --> 00:19:16,690 Kaj fine, ni atingas backslash 0, kaj tial, ke rimedoj, bone, 314 00:19:16,690 --> 00:19:17,780 tiu cxeno estas finita. 315 00:19:17,780 --> 00:19:20,130 Do ni revenu 5. 316 00:19:20,130 --> 00:19:33,630 >> Do efektive apliki ke, unue, mia n longo egalas 0, mia dekstra mano. 317 00:19:33,630 --> 00:19:36,088 Kaj ni iras persisti - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [inaudibles] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: Ho, pafi. 320 00:19:38,640 --> 00:19:39,870 Bonan alvokon. 321 00:19:39,870 --> 00:19:42,680 Eksplodo. 322 00:19:42,680 --> 00:19:44,140 Do n longo egalas 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Do nun, dum s longo ne egalaj kaj tiam, backslash 0. 325 00:19:58,310 --> 00:20:04,660 Do memoru, ĉi backslash 0, ĝi estas efektiva karaktero, kaj gxi indikas 326 00:20:04,660 --> 00:20:05,820 la finon de la ŝnuro. 327 00:20:05,820 --> 00:20:09,850 Same kiel, ankaŭ, backslash n estas reala karaktero. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 tuj indikos la finon de nia kordo. 329 00:20:14,040 --> 00:20:15,414 Mi ne volas meti tiun tie. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Kaj dum s indeksita per longo estas egala al la nula finilo, tiam 332 00:20:25,620 --> 00:20:27,130 ni nur iri al pliigo longa. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Tial do, je la fino de nia programo, longeco estas eventuale tuj 335 00:20:34,880 --> 00:20:37,610 estu 5 en tiu kazo. 336 00:20:37,610 --> 00:20:39,210 Kaj ni vidos ĝuste redoni longa. 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 Do nun cxi tie, mi ne faras fari my_strlen. 340 00:20:48,290 --> 00:20:50,700 Ni kompili gxin por certigi ĉio funkcias glate. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Ĉu mi faras en 2? 343 00:20:58,210 --> 00:21:00,565 Aux estis, ke 1? 344 00:21:00,565 --> 00:21:01,940 Tio devus fari. 345 00:21:01,940 --> 00:21:02,690 Ĉiuj pravas. 346 00:21:02,690 --> 00:21:08,490 Do tiu estas argv 2. 347 00:21:08,490 --> 00:21:11,585 Laboras kiel anticipis, kvankam estis, ke la unu mi tion faris en? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Jes. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Ĉi tiu versio de aĵoj ne havas la printf novan linion post, sed 352 00:21:21,820 --> 00:21:22,910 ne fari ian diferencon. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Do laboris kiel atendita. 355 00:21:25,780 --> 00:21:34,750 >> Nun ni povas eĉ kombini ĉi tiu paŝo plui, kie avizo tie, bone, 356 00:21:34,750 --> 00:21:38,920 unue, ni kaptante la strlen de argv i, kaj tiam ni ripetanta super 357 00:21:38,920 --> 00:21:41,450 ĉiun karakteron en tiu kordo. 358 00:21:41,450 --> 00:21:47,480 Do anstataŭ fari tion, kion, se ni nur kombini tiun logikon de atendis 359 00:21:47,480 --> 00:21:50,740 gxis ni batis backslash 0 dekstra en ĉi tiun por buklo? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Do ankaŭ persisti dum argv i, j faras Ne egala backslash 0. 362 00:22:07,490 --> 00:22:10,680 Do ni ruli ĝin unue. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Ĉiuj pravas. 365 00:22:21,180 --> 00:22:27,655 Do ĉi tie, ĉi tiu kondiĉo estas jene - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 ni purigi tion. 368 00:22:40,060 --> 00:22:49,140 Do nun, cxi tio estu nia argv. 369 00:22:49,140 --> 00:22:55,290 Do, kiam mi simple kuris tiu programo antaŭ, argv estas tabelo de kordoj. 370 00:22:55,290 --> 00:23:03,100 Kaj tial, se mi kuras kun skalara oblikvo argv 2, saluton mondo, tiam la argv 371 00:23:03,100 --> 00:23:07,650 sin estas longo 3, por argv nulo, saluton, kaj la mondo. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Kaj ene de ĉiu el tiuj indeksoj estas, mem tabelo, kie tio estos 374 00:23:19,660 --> 00:23:23,780 streketo ĉi estos oblikvo, mi ne scias se tiu estis la ĝustan direkton, mi 375 00:23:23,780 --> 00:23:25,680 ne pensu estis. 376 00:23:25,680 --> 00:23:30,110 A-R-V haltostreko, bezonas pli da spaco. 377 00:23:30,110 --> 00:23:32,570 Ni tranĉis en tiun tabelo. 378 00:23:32,570 --> 00:23:38,230 A-R-V haltostreko 0, kaj tiam backslash 0. 379 00:23:38,230 --> 00:23:43,160 Kaj tiam en malordo estos saluton. 380 00:23:43,160 --> 00:23:45,910 Ni diru, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 Kaj fine, W-Ho backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> Do la algoritmo, ke ni nur skribis, la neston por masxojn, kio ili estas 383 00:23:59,730 --> 00:24:07,321 fari estas, ni devas unue la kontraŭi i kaj tiam j. 384 00:24:07,321 --> 00:24:15,206 Ĉi tiu estus pli facile kun kodo en la ekrano, Ni revenu al tio. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Do rimarkos ke mi estas la iterator tio ripetanta super ĉiu komando 387 00:24:24,600 --> 00:24:25,610 linio argumento. 388 00:24:25,610 --> 00:24:28,870 Kaj j estas la iterator ripetanta super ĉiu signo en tiu 389 00:24:28,870 --> 00:24:30,410 komandlinia argumento. 390 00:24:30,410 --> 00:24:46,755 Do kio estas tiu interna printf faras estas ni 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, sed nun, argv 0 7 tuj 392 00:24:58,680 --> 00:25:00,670 egala backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> Do tiam ni eliros ke por buklo, Kaj nun mi ripetas al 1. 394 00:25:05,730 --> 00:25:10,910 Kaj nun ni iras al print argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 nu, nun, kiam mi tranĉis saluton mallonga, argv 1 2 estas denove tuj estos 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 Kaj do, pliigo i kaj daŭrigi, kaj tiel plu, ĝis ni presi ĉiuj 398 00:25:25,050 --> 00:25:28,580 mondo, kaj tiuj estas tri komandlinia argumentoj, kaj ni devos eliri el 399 00:25:28,580 --> 00:25:31,670 la plej ekstera iteracio, kaj fini nian programon. 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 >> Do ni revenu ĉi tien. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Do vi devos gajni iun familiareco kun komandlinia argumentojn sur tiu 406 00:25:52,370 --> 00:25:54,460 apartan problemon agordi. 407 00:25:54,460 --> 00:25:56,630 >> Nun, debugging. 408 00:25:56,630 --> 00:26:01,680 Do vi probable jam devis fari iuj debugging kun via antaŭa 409 00:26:01,680 --> 00:26:03,120 problemo metita. 410 00:26:03,120 --> 00:26:08,420 Kaj unu tre facila vojo de debugging, unue, ni rigardu a buggy programo. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Nu, promenante tra tiu programo, ni iras, por demandi al la uzanto por 413 00:26:23,830 --> 00:26:29,350 entjera, grab ke entjero, kaj tiam, arbitre, ni havas tempon buklo ke 414 00:26:29,350 --> 00:26:32,280 estas ĝuste tuj dekremento i ĝis ĝi estas egala al 10. 415 00:26:32,280 --> 00:26:35,820 Ni simple supozi ke mi eniri entjero pli granda ol 10. 416 00:26:35,820 --> 00:26:38,700 Do dekremento i ĝis ĝi estas egala al 10. 417 00:26:38,700 --> 00:26:42,630 >> Kaj tiam ni havos alian dum buklo ke, dum i ne egalas 0, ni estas 418 00:26:42,630 --> 00:26:44,540 tuj dekremento i per 3. 419 00:26:44,540 --> 00:26:49,790 Do, se vi vidos la intenco de la bug ĉi tie, estas ke tiu povos dekremento i al 420 00:26:49,790 --> 00:26:57,010 estos 10, kaj tiam ĉi tio dum buklo volo dekremento i el 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 al negativa 2, al negativa 5, kaj tiel plu, al negativa malfinio, kiam mi volas, 422 00:27:02,880 --> 00:27:05,920 neniam vere egalus 0. 423 00:27:05,920 --> 00:27:08,610 Kaj poste, je la fino de tiu programo, ni havas la foo funkcio kiu estas 424 00:27:08,610 --> 00:27:12,130 irante sur print ke i. 425 00:27:12,130 --> 00:27:16,520 >> Do tiu estas mallonga kaj bagatela programo, kaj la eraro estas evidenta, 426 00:27:16,520 --> 00:27:18,790 speciale post mi simple diris kion la cimon estis. 427 00:27:18,790 --> 00:27:24,840 Sed la intenco ĉi tie estas, nu, tio eble efektive aspektas kiel kelkaj el viaj 428 00:27:24,840 --> 00:27:30,040 solvojn de avidaj de la lasta problemo starigis, kaj eble vi ne havos 429 00:27:30,040 --> 00:27:32,800 iuj senfina iteracio en vian programon, kaj vi ne havas ideon 430 00:27:32,800 --> 00:27:34,100 kio kaŭzis ĝin. 431 00:27:34,100 --> 00:27:38,690 Do tre utila debugging tekniko estas nur aldonu printfs 432 00:27:38,690 --> 00:27:40,180 ĉie en via kodo. 433 00:27:40,180 --> 00:27:49,200 >> Do ĉi tie mi deziras printf ekstere unue dum buklo. 434 00:27:49,200 --> 00:27:53,155 Kaj tie mi volas printf, kaj mi nur presi i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Mi eĉ fari unue dum buklo, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Ekstere, dua dum buklo. 439 00:28:09,040 --> 00:28:12,170 Denove, presi interne el tie, la valoro i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 Kaj ni kuros ĉi. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Do dot oblikvo erarserĉilo. 444 00:28:24,800 --> 00:28:25,610 Entajpu entjero. 445 00:28:25,610 --> 00:28:28,150 Ni do 13. 446 00:28:28,150 --> 00:28:28,760 Kaj eksplodo. 447 00:28:28,760 --> 00:28:33,300 Ni vidas, ke ni estas senfinaj looping ene de la dua dum buklo. 448 00:28:33,300 --> 00:28:36,305 Do nun ni scias kio estas la eraro estas. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Sed printf debugging estas perfekte granduloj, sed unufoje viaj programoj akiri 451 00:28:45,610 --> 00:28:50,560 pli kaj pli komplikaj, esas pli kompleksajn solvojn al 452 00:28:50,560 --> 00:28:51,705 getting aferoj laborante. 453 00:28:51,705 --> 00:28:52,955 Do ni forigos ĉiujn tiujn printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Kaj ni certigu mi ne rompi nenion. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Do la programo ni iras enkonduki nomiĝas 458 00:29:14,180 --> 00:29:16,715 GDB, por GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Nu, fakte, ni forigi erarserĉilo por duan, kaj fari elpurigi denove. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Nu, efektive la unua, bonan lecionon en komandlinio argumentoj. 463 00:29:34,440 --> 00:29:37,780 Rimarku ke ĉi tin komando kiu estas kompili ĉio estas aprobotaj 464 00:29:37,780 --> 00:29:41,300 ĉe la komandlinio, tiuj komandlinia argumentoj. 465 00:29:41,300 --> 00:29:46,250 Do ĝuste kiel vi tuj uzos komandlinia argumentoj, kiel ni 466 00:29:46,250 --> 00:29:51,500 faris antaŭe, kaj tiel vi havos en PSET 2, tiel estas kiel tin uzas ilin. 467 00:29:51,500 --> 00:30:00,070 >> Do rimarki ke tiu unua flago, haltostreko ggdb3, kio tio estas diro, tin, 468 00:30:00,070 --> 00:30:03,790 vi devas kompili tiun dosieron kun la intenco, ke ni volas eventuale 469 00:30:03,790 --> 00:30:05,380 bezonas elpurigi ĝin. 470 00:30:05,380 --> 00:30:13,840 Do tiel longe, kiel vi havas tiun flagon, tiam ni povas GDB erarserĉilo. 471 00:30:13,840 --> 00:30:17,380 Kaj gxi donos malfermi la GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Do tie estas multe da ordonoj ke vi devas alkutimiĝi al. 473 00:30:22,920 --> 00:30:27,100 Unue oni ke vi probable Tuj bezonas estas Kuru. 474 00:30:27,100 --> 00:30:28,200 Do kio estas Kuru tuj faros? 475 00:30:28,200 --> 00:30:30,910 Ĝi tuj komencu nian programon. 476 00:30:30,910 --> 00:30:36,180 Do kuru, komencante programo, la programo demandas nin por entjero, 13. 477 00:30:36,180 --> 00:30:39,170 Kaj tiam estas malfinia looping kiel atendis, krom mi forigis la 478 00:30:39,170 --> 00:30:40,500 printfs, do ni ne eĉ vidi tion. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Ĝi eliris normale. 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 Estas ebla, ke ĝi envolvis la tutan vojo ĉirkaŭ, reen al - ignorante tion. 484 00:30:53,640 --> 00:30:55,170 Alpreni ne eliri normale. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Tie estas komplika respondo al tiu. 487 00:31:03,370 --> 00:31:07,890 >> Do nun, tio ne estas tre utila. 488 00:31:07,890 --> 00:31:11,480 Do nur kurante nian programon ene de ĉi debugger ne helpas al ni en iu 489 00:31:11,480 --> 00:31:15,610 maniero, ĉar ni povis jxus faris dot oblikvo elpurigi de ekstere GDB. 490 00:31:15,610 --> 00:31:21,250 Do la ordono, ke Vi verŝajne - 491 00:31:21,250 --> 00:31:22,970 kaj mi rezignis tion. 492 00:31:22,970 --> 00:31:25,850 Kontrolo-d aŭ rezigni, ambaŭ laboras. 493 00:31:25,850 --> 00:31:29,550 Do ni malfermu ĝin denove. 494 00:31:29,550 --> 00:31:31,130 >> Alia komando kiu vi probable tuj volas 495 00:31:31,130 --> 00:31:33,600 alkutimiĝi al estas Break. 496 00:31:33,600 --> 00:31:37,120 Do ni rompos la ĉefa por nun, kaj tiam Mi klarigos tion. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Nu, jen ni vidas ni aperigos Haltpunkto en ĉi tiu linio en debug.c. 499 00:31:46,370 --> 00:31:50,160 Do kio ripozon rimedoj estas ke kiam mi tajpi run, la programo tuj 500 00:31:50,160 --> 00:31:53,560 daŭrigi kuri ĝis Mi trafi Haltpunkto. 501 00:31:53,560 --> 00:31:59,390 Do kiam mi batis run, la programo komencas, kaj tiam ĝi rompas tuj kiam 502 00:31:59,390 --> 00:32:01,940 Eniras la ĉefa funkcio. 503 00:32:01,940 --> 00:32:06,930 Break ĉefa tuj estos io vi belan komune fari. 504 00:32:06,930 --> 00:32:11,340 >> Kaj nun, por enkonduki vin iuj pli komandoj. 505 00:32:11,340 --> 00:32:14,330 Rimarku ĉi tie, ke ĝi estas jene ni rompis ĉe linio 11, kiu estas 506 00:32:14,330 --> 00:32:16,230 printf, eniru entjero. 507 00:32:16,230 --> 00:32:21,260 Do la komando Sekva tuj estos kiel ni iru al la sekvanta linio de kodo. 508 00:32:21,260 --> 00:32:24,810 Tiu tuj permesos ke ni tretas tra nia programo linio por linio. 509 00:32:24,810 --> 00:32:26,260 Do sekvanta. 510 00:32:26,260 --> 00:32:29,820 >> Nun la linio 12, ni iras por ricevi la entjero. 511 00:32:29,820 --> 00:32:30,450 Sekva. 512 00:32:30,450 --> 00:32:34,290 Kaj se vi ĵus batis Enskribu denove, ĝi malebligos refari la lastan aferon vi faris. 513 00:32:34,290 --> 00:32:36,480 Do mi ne bezonas tajpi sekvanta ĉiufoje. 514 00:32:36,480 --> 00:32:40,100 Do eniri entjero, 13. 515 00:32:40,100 --> 00:32:46,940 Do nun, linio 14, dum i estas granda ol 10, kaj mi devos fari. 516 00:32:46,940 --> 00:32:48,685 Kaj ni vidos ni tuj dekremento i. 517 00:32:48,685 --> 00:32:50,210 Do ni tuj dekremento i denove. 518 00:32:50,210 --> 00:32:53,620 >> Do nun, alia utila komando estas Print. 519 00:32:53,620 --> 00:32:55,750 Do Presi tuj presi La valoro de la variablo. 520 00:32:55,750 --> 00:32:57,825 Ni elirigi la valoro de variablo i. 521 00:32:57,825 --> 00:32:58,705 Ni presas i. 522 00:32:58,705 --> 00:33:00,910 Ĝi estas dironta i estas 11. 523 00:33:00,910 --> 00:33:03,330 Nun ni Sekva denove dum i estas pli granda ol 10. 524 00:33:03,330 --> 00:33:05,590 Do i estas ankoraŭ pli granda ol 10, ĉar ĝi estas 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Ni presas i denove. 527 00:33:08,250 --> 00:33:10,950 Kiel atendita, ĝi estas 10. 528 00:33:10,950 --> 00:33:12,510 >> Do nun, proksima. 529 00:33:12,510 --> 00:33:16,250 Ĝi okazas reen al la kondiĉo, i estas pli granda ol 10, sed i estas nun 10, tiel 530 00:33:16,250 --> 00:33:20,040 ĝi ne estas pli granda ol 10, do ni atendas ĝin fali el la tempo buklo. 531 00:33:20,040 --> 00:33:22,220 Kaj nun ni estas sub tiu linio de kodo. 532 00:33:22,220 --> 00:33:28,750 Kaj alia ordono, Listo, estas nur irante por montri la antaŭa kaj sekva 533 00:33:28,750 --> 00:33:31,240 paro de linioj de kodo, en kazo vi perdis vin. 534 00:33:31,240 --> 00:33:35,420 Do ni simple ĝi eliris ĉi dum buklo, kaj nun ni jam eniris tiun 535 00:33:35,420 --> 00:33:37,080 dum buklo, linio 18. 536 00:33:37,080 --> 00:33:39,860 Do, dum mi ne egalas 0. 537 00:33:39,860 --> 00:33:46,570 Kaj, tuj poste, i egalas i minus 3, kaj ni rimarki, ĉi devos nur plu iri. 538 00:33:46,570 --> 00:33:48,270 Kaj ni povas presi i. 539 00:33:48,270 --> 00:33:49,990 >> Ĉiu komando ia havas rektajn alirojn. 540 00:33:49,990 --> 00:33:51,720 Do p estas mallonga por Print. 541 00:33:51,720 --> 00:33:53,400 Do ni povas p i. 542 00:33:53,400 --> 00:33:57,550 Nur gardu tenante n, aŭ daŭre fari Sekva. 543 00:33:57,550 --> 00:33:58,340 Presi i denove. 544 00:33:58,340 --> 00:34:00,380 Vi vidas nun ĝi estas negativa 167. 545 00:34:00,380 --> 00:34:06,030 Do tio devos daŭrigi eterne, sed ne vere eterne, ĉar vi ĵus vidis, ke 546 00:34:06,030 --> 00:34:09,330 efektive finos je iu punkto. 547 00:34:09,330 --> 00:34:15,699 >> Do kiu estas Komencante GDB. 548 00:34:15,699 --> 00:34:19,504 Sed ni faru pli aferon en GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, erarserĉilo. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Do, en tiu aparta kazo, la senfina iteracio okazis esti interne de 552 00:34:28,534 --> 00:34:30,050 la ĉefa funkcio. 553 00:34:30,050 --> 00:34:35,779 Kaj nuntempe, simple akcepti ke tio mi estas tuj movu la senfina iteracio en 554 00:34:35,779 --> 00:34:37,029 la foo funkcio. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Nur memoru ke, ĉe la fino de tiu programo, nu, tiu estis originale 557 00:34:43,730 --> 00:34:46,210 nomante foo, kiu estis nur tuj presi i. 558 00:34:46,210 --> 00:34:51,880 Sed nun ni petas foo, kiu estas tuj dekremento i ĝis ĝi estas 0, kaj 559 00:34:51,880 --> 00:34:54,548 tiam presi tiu variablo. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Savi. 562 00:34:57,970 --> 00:35:00,175 Faru erarserĉilo. 563 00:35:00,175 --> 00:35:03,310 Kaj nun, gdb erarserĉilo. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Do, se mi ĝuste Kuru do mi ne tuj povos reale step per mia 566 00:35:10,580 --> 00:35:11,730 programo linio-per-linio. 567 00:35:11,730 --> 00:35:19,820 Do ni rompos ĉe ĉefa, kaj tiam tajpi run. 568 00:35:19,820 --> 00:35:28,160 Do iri tra ĉi tiu, printf, eniri entjera, akiru la entjero, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Do ni tuj teni decrementing ĝis mi estas pli granda ol 10. 571 00:35:37,490 --> 00:35:42,840 Tiam ni iras por fali tra la dum buklo, kaj instigi al la linio - 572 00:35:42,840 --> 00:35:44,364 ni malfermas gxin en apartan fenestron. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Do ni decremented ĝis mi ne plu pli granda ol 10, kaj poste ni 575 00:35:53,300 --> 00:35:55,700 vokis la funkcio, foo. 576 00:35:55,700 --> 00:36:01,340 >> Do, kio okazis kiam mi trafis funkcio foo, bone, mi alvokis foo, kaj 577 00:36:01,340 --> 00:36:04,030 tiam mi ne plu havis kontrolon super GDB. 578 00:36:04,030 --> 00:36:10,230 Tuj, kiam mi batis Sekva ĉe ĉi tiu linio, tion sekvis ĝis tiu okazis, 579 00:36:10,230 --> 00:36:12,400 kie la programo ĝi eliris, kiam - 580 00:36:12,400 --> 00:36:14,450 supozi ne ekzistis iam. 581 00:36:14,450 --> 00:36:16,390 Vi vidis lin paŭzi por iom kvankam. 582 00:36:16,390 --> 00:36:22,040 Do, kial mi perdos la kontrolon super la programo je tiu punkto? 583 00:36:22,040 --> 00:36:27,540 Nu, kiam mi tajpas proksima, kiu iras al la laŭvorta sekva linio de kodo ke 584 00:36:27,540 --> 00:36:28,850 Mi faros. 585 00:36:28,850 --> 00:36:35,950 Do post linio 21, la sekvanta linio de kodo ke estos ekzekuti estas linio 22, 586 00:36:35,950 --> 00:36:38,520 kio estas, elirante el ĉefaj. 587 00:36:38,520 --> 00:36:43,810 Do mi ne volas ĝuste iri al la sekvanta linio de kodo. 588 00:36:43,810 --> 00:36:48,170 Mi volas iri en la funkcio, foo, kaj tiam ankaŭ treti tra 589 00:36:48,170 --> 00:36:49,830 tiuj linioj de kodo. 590 00:36:49,830 --> 00:36:53,726 >> Do pro tio, ni havas alternativon. 591 00:36:53,726 --> 00:36:56,770 Ni lasis tion denove. 592 00:36:56,770 --> 00:36:58,020 Break ĉefa. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, proksima, sekva, 13, proksima, proksima, sekvanta, zorgeme, 595 00:37:06,370 --> 00:37:09,820 antaŭ ol ni batis linio foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Do nun, ni estas ĉe linio 21, kie ni nomas foo. 598 00:37:13,700 --> 00:37:17,100 Ni ne volas tajpi proksima, char tio Mi simple vokas la funkcion foo, kaj 599 00:37:17,100 --> 00:37:18,710 iri al la sekvanta linio de kodo. 600 00:37:18,710 --> 00:37:20,840 Kion ni volas uzi estas Ŝtupo. 601 00:37:20,840 --> 00:37:25,690 Do tie estas diferenco inter Ŝtupo kaj Venonta, kie Ŝtupo paŝas en la 602 00:37:25,690 --> 00:37:28,190 funkcii, kaj Sekva iras super la funkcio. 603 00:37:28,190 --> 00:37:32,830 Ĝi simple ekzekutu la tuteco de la funkcio kaj konservas iras. 604 00:37:32,830 --> 00:37:37,210 >> Do Ŝtupo tuj venigi nin en la funkcio, foo. 605 00:37:37,210 --> 00:37:41,160 Kaj ni vidas tie, nun, ni estas denove en tiu dum buklo tio, en teorio, 606 00:37:41,160 --> 00:37:44,190 daŭros ĉiam. 607 00:37:44,190 --> 00:37:50,420 Kaj se vi batis Ŝtupo, kiam tio estas eĉ ne funkcio por voki, ĉar ĝi estas 608 00:37:50,420 --> 00:37:51,720 identa al Next. 609 00:37:51,720 --> 00:37:55,320 Do estas nur kiam vi estas en linion kiu vokas funkcio kiu Ŝtupo 610 00:37:55,320 --> 00:37:56,970 tuj diferencigas Sekva. 611 00:37:56,970 --> 00:37:57,930 Do Ŝtupo venigos nin tien. 612 00:37:57,930 --> 00:38:02,100 Paŝo, step, ŝtupo, paŝo, step, ŝtupo, kaj Ni simple senfina iteracio ĉiam. 613 00:38:02,100 --> 00:38:06,810 >> Do vi povus alkutimiĝi al tio, kiel via manieron de identigo senfina masxojn, estas 614 00:38:06,810 --> 00:38:08,960 nur tenante ĉi Eniga klavo por rigardu, kie vi akiras ŝtopita. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Esas bona manieroj por fari tion, sed cxar nun, tio estas perfekte sufiĉa. 617 00:38:14,780 --> 00:38:17,967 Kaj stile, konformi Stilo 50, mi devus esti farinta tion. 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 >> Do unu lastan komandon enkonduki. 621 00:38:28,400 --> 00:38:30,810 Nu, ni GDB elpurigi in 622 00:38:30,810 --> 00:38:35,580 Do anstataux rompi en ĉefa, se mi konas la foo funkcio estas ankaŭ la 623 00:38:35,580 --> 00:38:39,230 problemo, tiam mi povus havi nur diris, rompi ĉe foo, anstataŭe. 624 00:38:39,230 --> 00:38:42,310 Diru Mi rompos cxe ambaŭ ĉefaj kaj foo. 625 00:38:42,310 --> 00:38:45,390 Do vi povas difini kiel multaj breakpoints kiel vi volas. 626 00:38:45,390 --> 00:38:49,230 Kiam mi tajpas kuri, tio okazas halti ĉe la - 627 00:38:49,230 --> 00:38:52,180 ooh, ni rekompili, ekde Mi ŝanĝis tion. 628 00:38:52,180 --> 00:38:55,950 Vi vidos ĉi linion, Warning, fonto dosiero estas pli freŝa ol plenumebla. 629 00:38:55,950 --> 00:38:59,680 Do tio signifas ke mi nur envenis ĉi tien kaj sxangxis tiujn konformi Stilo 630 00:38:59,680 --> 00:39:03,100 50, sed mi ne rekompili la programo. 631 00:39:03,100 --> 00:39:04,870 Do GDB igas min konscias pri tio. 632 00:39:04,870 --> 00:39:10,130 Mi rezignis, fari elpurigi denove, batis gdb erarserĉilo. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Do nun, reen al kion mi faras. 635 00:39:12,800 --> 00:39:15,720 Break ĉefa, rompo foo. 636 00:39:15,720 --> 00:39:20,680 Nun, se mi kuros al la programo, tiel ĝi estas tuj pluiri ĝis kolizias kun 637 00:39:20,680 --> 00:39:21,320 Haltpunkto. 638 00:39:21,320 --> 00:39:24,680 Tio Haltpunkto okazas al esti la unua en ĉefa. 639 00:39:24,680 --> 00:39:28,630 Nun, anstataŭ fari proksima, sekvanta, sekva, proksima, sekvanta, ĝis mi trafis foo, mi 640 00:39:28,630 --> 00:39:35,230 povas tajpi daŭrigi, kio sekvos ĝis vi batis la sekvanta Haltpunkto. 641 00:39:35,230 --> 00:39:37,200 Mi devas eniri la entjera unue. 642 00:39:37,200 --> 00:39:40,570 Daŭrigu daŭrigos ĝis mi trafis la sekvanta Haltpunkto, kio estas tio 643 00:39:40,570 --> 00:39:43,320 funkcio de foo. 644 00:39:43,320 --> 00:39:50,130 >> Do Run kuros, ĝis vi trafi Haltpunkto, sed vi nur tajpi run kiam 645 00:39:50,130 --> 00:39:54,060 vi komenci la programon, kaj poste, de tiam, ĝi estas daŭrigi. 646 00:39:54,060 --> 00:40:01,950 Se mi ĝuste faris rompi ĉefa kaj tiam kuris gxi rompos cxe 647 00:40:01,950 --> 00:40:03,670 ĉefa, kaj tiam daŭrigu. 648 00:40:03,670 --> 00:40:10,050 Ĉar mi ne havas ripozon punkto je foo, eniri la entjero, tiam nun mi estas 649 00:40:10,050 --> 00:40:11,380 Ne tuj rompos ĉe foo. 650 00:40:11,380 --> 00:40:16,318 Ĝi estas ĝuste tuj infinito buklo ĝis tiu. 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 >> Do jen Intro al GDB. 654 00:40:24,420 --> 00:40:27,790 Vi devus ekuzi gxin en via problemo aroj. 655 00:40:27,790 --> 00:40:30,550 Ĝi povas esti tre utila identigi cimojn. 656 00:40:30,550 --> 00:40:35,280 Se vi fakte ĝuste, linio-per-linio, iru tra via kodo, kaj kompari kio estas 657 00:40:35,280 --> 00:40:39,740 efektive okazas kun kion vi atendas okazi, tiam estas sufiĉe 658 00:40:39,740 --> 00:40:41,060 malfacile perdi vian cimojn. 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 >> Do pasintsemajne David alportis tiun sekretajn-ŝlosila ĉifriko ajxojn la 663 00:40:54,040 --> 00:40:59,350 unua fojo, kie ni ne volas pasvortojn nur esti stokita en nia 664 00:40:59,350 --> 00:41:03,210 komputilo en iu simpla teksto-dosiero, kie iu povas veni kaj justa 665 00:41:03,210 --> 00:41:04,660 malfermu ĝin supren kaj legi ilin. 666 00:41:04,660 --> 00:41:07,530 Ideale, oni devus esti ĉifrita iel. 667 00:41:07,530 --> 00:41:13,340 Kaj en Problemo Ara 2, vi estos kontraktanta kun unu metodo de ĉifrado, 668 00:41:13,340 --> 00:41:16,520 aŭ, bone, du metodoj, sed ili ne estas tiom granda. 669 00:41:16,520 --> 00:41:20,050 Se vi faras la hacker eldono, vi estas ankaŭ tuj estos kontraktanta kun 670 00:41:20,050 --> 00:41:22,150 decrypting kelkaj aĵoj. 671 00:41:22,150 --> 00:41:29,770 >> Do la demando nun estas, nu, eĉ se ni havas la plej fortan ĉifradon 672 00:41:29,770 --> 00:41:34,830 algoritmo en la mondo, se vi elektos aparte malriĉaj pasvorton, tiam 673 00:41:34,830 --> 00:41:37,720 ne helpos vin tre multe, ĉar la homo plu povos ekkompreni gxin. 674 00:41:37,720 --> 00:41:41,530 Eĉ se vidante la ĉifrita kordo kaj ĝi aspektas kiel salato de rubo 675 00:41:41,530 --> 00:41:44,760 tio signifas nenion al ili, se ili ankoraŭ devas nur provu kelkaj pasvortoj 676 00:41:44,760 --> 00:41:50,560 ekkompreni gxin, tiam vi ne estas tre sekura. 677 00:41:50,560 --> 00:41:55,890 Do rigardante video kiu faras tiun punkton. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO reprodukto] 680 00:42:00,970 --> 00:42:02,100 >> -Kasko, vi Fiend. 681 00:42:02,100 --> 00:42:03,370 Kio okazas? 682 00:42:03,370 --> 00:42:05,170 Kion vi faras kun mia filino? 683 00:42:05,170 --> 00:42:09,910 >> -Permesu al mi prezenti la genian juna plasto kirurgo, D-ro Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, la plej granda nazo job viro en la tuta 685 00:42:13,730 --> 00:42:16,080 universo, kaj Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Via Moŝto. 687 00:42:17,210 --> 00:42:18,070 >> -Nazo job? 688 00:42:18,070 --> 00:42:18,670 Mi ne komprenas. 689 00:42:18,670 --> 00:42:20,090 Ŝi jam havis nazon laboron. 690 00:42:20,090 --> 00:42:21,910 Estis dolĉa dekses ĉeestas. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Ĝi ne estas kion vi pensas. 693 00:42:23,690 --> 00:42:25,420 Ĝi estas multe, multe pli malbonaj. 694 00:42:25,420 --> 00:42:30,300 Se vi ne donos al mi la kombino de la aero ŝildo, Dr Schlotkin volo 695 00:42:30,300 --> 00:42:34,226 donu vian filinon reen sian malnovan nazo. 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 Kie vi trovis tion? 699 00:42:40,516 --> 00:42:41,440 >> -Bone. 700 00:42:41,440 --> 00:42:42,180 Mi diros. 701 00:42:42,180 --> 00:42:43,381 Mi diros. 702 00:42:43,381 --> 00:42:44,263 Ne, paĉjo. 703 00:42:44,263 --> 00:42:45,590 Ne, vi ne devas. 704 00:42:45,590 --> 00:42:46,860 >> -Vi pravas, mia kara. 705 00:42:46,860 --> 00:42:48,450 Mi mankos via nova nazo. 706 00:42:48,450 --> 00:42:52,090 Sed mi ne diros al li la ĉifro, negrave kion. 707 00:42:52,090 --> 00:42:53,680 >> -Tre bone. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, faru vian malbonan. 709 00:42:55,685 --> 00:42:56,914 >> -Mia plezuro. 710 00:42:56,914 --> 00:43:00,690 >> [Iloj Estulo akrigita] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Atendu. 713 00:43:02,520 --> 00:43:03,836 Atendu. 714 00:43:03,836 --> 00:43:05,300 Mi diros. 715 00:43:05,300 --> 00:43:06,880 Mi diros. 716 00:43:06,880 --> 00:43:09,130 >> -Mi sciis, ke tio funkcios. 717 00:43:09,130 --> 00:43:09,900 Ĉiuj pravas. 718 00:43:09,900 --> 00:43:12,850 Donu ĝin al mi. 719 00:43:12,850 --> 00:43:16,918 >> -La kombinaĵo estas unu. 720 00:43:16,918 --> 00:43:17,406 >> -Unu. 721 00:43:17,406 --> 00:43:18,382 >> -Unu. 722 00:43:18,382 --> 00:43:19,358 >> -Du. 723 00:43:19,358 --> 00:43:19,846 >> -Du. 724 00:43:19,846 --> 00:43:20,822 >> -Du. 725 00:43:20,822 --> 00:43:21,310 >> -Tri. 726 00:43:21,310 --> 00:43:21,798 >> -Tri. 727 00:43:21,798 --> 00:43:22,774 >> -Tri. 728 00:43:22,774 --> 00:43:23,262 >> -Kvar. 729 00:43:23,262 --> 00:43:23,750 >> -Kvar. 730 00:43:23,750 --> 00:43:26,150 >> -Kvar. 731 00:43:26,150 --> 00:43:27,010 >> -Kvin. 732 00:43:27,010 --> 00:43:27,670 >> -Kvin. 733 00:43:27,670 --> 00:43:29,010 >> -Kvin. 734 00:43:29,010 --> 00:43:34,770 >> -Do la kombino estas unu, du, tri, kvar, kvin. 735 00:43:34,770 --> 00:43:37,460 Tio estas la stupidest kombinaĵo Mi iam aŭdis en mia vivo. 736 00:43:37,460 --> 00:43:39,710 Tio estas la speco de afero idioto havus sur lian pakaĵon. 737 00:43:39,710 --> 00:43:42,000 >> -Dankon, via Moŝto. 738 00:43:42,000 --> 00:43:43,530 >> -Kion vi faras? 739 00:43:43,530 --> 00:43:44,490 >> -Mi elŝaltis la muro. 740 00:43:44,490 --> 00:43:45,420 >> -Ne vi ne faris tion. 741 00:43:45,420 --> 00:43:45,840 Vi elŝaltis la tuta filmo. 742 00:43:45,840 --> 00:43:46,930 >> -Mi devas premis malĝustan butonon. 743 00:43:46,930 --> 00:43:48,265 >> -Nu, remetis ĝin sur. 744 00:43:48,265 --> 00:43:49,110 Metu la filmon dorson. 745 00:43:49,110 --> 00:43:49,510 >> -Jes, sinjoro. 746 00:43:49,510 --> 00:43:49,917 Jes, sinjoro. 747 00:43:49,917 --> 00:43:50,324 >> -Ni iru, Arnold. 748 00:43:50,324 --> 00:43:51,140 Venu, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Kompreneble, vi konas min timige ankoraŭ devas fakturojn vi pro tio. 750 00:43:53,060 --> 00:43:53,440 >> [FINO VIDEO reprodukto] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: Bone. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Do nun, ke ni jam parolas pri sekureco en kelkaj manieroj, agrablaj 754 00:44:08,430 --> 00:44:16,050 iom movie poster, do en la lastaj tagoj, tiuj temoj kun la NSA 755 00:44:16,050 --> 00:44:17,300 vigladon ĉion. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Ĝi povas esti malfacile sentas kiel vi havas ian intimecon en la 758 00:44:26,930 --> 00:44:34,540 interreta mondo, kvankam mi ne povus diri vi plejparto de la detaloj de PRISM. 759 00:44:34,540 --> 00:44:42,130 Do moviĝas preter PRISM, ni ne tuj por paroli pri tio, nun 760 00:44:42,130 --> 00:44:44,030 pensas pri via tekkomputilo. 761 00:44:44,030 --> 00:44:48,360 Do ĝis ĉi tie, mi volas ŝanĝi al mia aktuala konto, 762 00:44:48,360 --> 00:44:50,370 kun mia eta pingveno. 763 00:44:50,370 --> 00:44:57,310 Do mi havas pasvorton aro, kaj tiu pasvorto estas kion mi volas esti. 764 00:44:57,310 --> 00:45:02,430 >> Sed memoru, ke kion mi ensalutante kun tiel ĉi ensaluto 765 00:45:02,430 --> 00:45:04,850 prompto, estas iu programo. 766 00:45:04,850 --> 00:45:07,910 Estas iuj programo kiu estis skribita de iu persono. 767 00:45:07,910 --> 00:45:13,250 Kaj tiel, ke persono, se ili estas aparte malica, ili povis 768 00:45:13,250 --> 00:45:17,780 ili diris: Tute bone, do se la pasvorto ke mi eniras estas egala al mia 769 00:45:17,780 --> 00:45:22,800 reala pasvorton, aŭ ĝi estas egala iuj specialaj pasvorto - 770 00:45:22,800 --> 00:45:25,550 David estas timinda aŭ io - 771 00:45:25,550 --> 00:45:27,190 tiam tiuj, in 772 00:45:27,190 --> 00:45:33,760 Do malica programisto povus havi aliro al cxio de via Mac, aŭ 773 00:45:33,760 --> 00:45:36,150 Fenestroj, aŭ nenion. 774 00:45:36,150 --> 00:45:41,980 >> Por ke ne estas multa de maltrankvilo, ekde, Mi volas diri, ĉi tiu estas ensaluto programo 775 00:45:41,980 --> 00:45:48,720 tio estas senditaj kun OS X, centoj aŭ miloj da homoj havas 776 00:45:48,720 --> 00:45:50,020 recenzis tiun kodon. 777 00:45:50,020 --> 00:45:55,330 Kaj do, se, en via kodo ie, vi diri, se tiu linio egalas egaluloj 778 00:45:55,330 --> 00:45:58,860 David estas timinda, ensalutu, tiam iu estas tuj estos, kiel, atendu. 779 00:45:58,860 --> 00:45:59,800 Ĉi tio ne estas prava. 780 00:45:59,800 --> 00:46:01,790 Tio ne devus esti tie. 781 00:46:01,790 --> 00:46:06,650 Do jen unu maniero ni preni aĵojn esti speco de sekura. 782 00:46:06,650 --> 00:46:10,300 >> Sed pensi eĉ programoj ke vi skribas. 783 00:46:10,300 --> 00:46:13,000 Imagu ke vi verkis la ensaluto programo. 784 00:46:13,000 --> 00:46:20,440 Do tiu ensaluto programo kiun vi skribis, do evidente, vi estas bona 785 00:46:20,440 --> 00:46:21,210 programisto. 786 00:46:21,210 --> 00:46:25,610 Vi ne tuj metu ajnan malica se x egalas egalas David estas timinda 787 00:46:25,610 --> 00:46:27,860 en via kodo. 788 00:46:27,860 --> 00:46:31,930 Sed tiu programo, kion fari vin uzi kompili tiun programon? 789 00:46:31,930 --> 00:46:34,180 Io kiel tin. 790 00:46:34,180 --> 00:46:38,460 Do kio okazos se la persono kiu okazis skribi tin specialaj cased en tin 791 00:46:38,460 --> 00:46:44,310 io kiel, se mi estas kompili la ensaluti programon, do eniri ĉi kodo 792 00:46:44,310 --> 00:46:49,720 en la saluta programo kiu diras, se x egalas egalas David estas timinda? 793 00:46:49,720 --> 00:46:59,890 Do ne tute ankoraŭ, sed ni havas la saman ekspedi ĉi tie, kie tin bone, 794 00:46:59,890 --> 00:47:03,790 milojn, se ne dekojn da miloj de homoj, kiuj rigardis tin havas 795 00:47:03,790 --> 00:47:07,160 rigardis liajn liniojn de kodo kaj diris: ĉiuj pravas, nenio estas malbona ĉi tie. 796 00:47:07,160 --> 00:47:10,680 Evidente, neniu estas faranta ion ĉi malica. 797 00:47:10,680 --> 00:47:15,780 >> Sed kio estas tin mem, kiel, kio se mi kompilos tin? 798 00:47:15,780 --> 00:47:20,900 Kio, se mi havas iun tradukilon ke kompilanto tin kiuj enmetas en tin 799 00:47:20,900 --> 00:47:25,610 tiu speciala hack kiu diras, ĉiuj pravas, kiam mi kompilas tin, tiam la 800 00:47:25,610 --> 00:47:31,290 plenumebla mi get devus speciale rigardu interne de la ensaluto programo kaj insert 801 00:47:31,290 --> 00:47:34,230 tiun pasvorton, egalas egaluloj Dave estas timinda? 802 00:47:34,230 --> 00:47:37,990 Do memoru, ke via tradukilo mem tio devas esti kompilita je iu punkto. 803 00:47:37,990 --> 00:47:42,810 Do, se kion vi elektas por kompili tin kun, mem estas malica, tiam vi 804 00:47:42,810 --> 00:47:45,580 povus esti ŝraŭbitaj la tuta lauxlonge de la linio. 805 00:47:45,580 --> 00:47:49,630 >> Do jen, ni havas Ken Thompson kaj Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Do tiu estas ikono foto. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie estas dekstre. 808 00:47:55,470 --> 00:47:58,740 Li estas grava - 809 00:47:58,740 --> 00:48:03,640 bela multe skribis C. Do vi povas danki lin por ĉi tiu klaso. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson estas maldekstre. 811 00:48:04,840 --> 00:48:07,780 La du el ili esence skribis Unikso. 812 00:48:07,780 --> 00:48:10,140 Nu, ili estis grandaj kontribuantoj en Unikso. 813 00:48:10,140 --> 00:48:11,310 Tie estis iuj aliaj. 814 00:48:11,310 --> 00:48:16,240 Do Ken Thompson, en iu punkto, li gajnas la Turing Award. 815 00:48:16,240 --> 00:48:20,860 Kaj la Turing-premio, mi ĉiam aŭdis ĝi referencita tiamaniere, ĝi estas la 816 00:48:20,860 --> 00:48:23,100 Nobel-Premio pri komputiko. 817 00:48:23,100 --> 00:48:27,500 >> Do, je la Premio Turing, li devas donu lian paroladon. 818 00:48:27,500 --> 00:48:31,790 Kaj ĝi donas ĉi tre fama parolado Nun, alvokis Reflections on Konfidante 819 00:48:31,790 --> 00:48:35,620 Fidu, kion ni kunligis To je la kurso retejo. 820 00:48:35,620 --> 00:48:41,670 Kaj en ĉi tiu parolado, li diras, ĉiuj pravas, do mi skribis UNIX, kaj nun ĉiuj 821 00:48:41,670 --> 00:48:43,320 vi personoj uzas UNIX. 822 00:48:43,320 --> 00:48:46,960 Nun, memoru nun, ke Linukso estas rekta posteulo de Unikso. 823 00:48:46,960 --> 00:48:50,140 OS X rekte uzas UNIX. 824 00:48:50,140 --> 00:48:53,810 Vindozo ne tiom multe, sed multe de ideoj estis prenitaj de Unikso. 825 00:48:53,810 --> 00:48:59,220 >> Do li iros sur la scenejo kaj diras: Enorde, mi skribis Unikso. 826 00:48:59,220 --> 00:49:03,940 Kaj ĝuste tial vi uloj scias, mi estas povos ensaluti en ĉiun 827 00:49:03,940 --> 00:49:05,590 sola unu de viaj komputiloj. 828 00:49:05,590 --> 00:49:14,280 Ekde mi metis unu el tiuj specialaj se x egalas egalas Ken Thomson estas timinda, 829 00:49:14,280 --> 00:49:16,350 tiam mi rajtas ensaluti. 830 00:49:16,350 --> 00:49:18,370 Do homoj estas kiel, tiel, Kiel vi faras tion? 831 00:49:18,370 --> 00:49:21,090 Ni rigardis la ensaluto programo kaj nenio estas tie. 832 00:49:21,090 --> 00:49:24,700 Li estas kiel, bone, mi modifis la tradukilo por ensaluti en la saluta programo 833 00:49:24,700 --> 00:49:30,490 tiel ke la ensaluto programo nun havos ke x egalas egalas Ken Thompson 834 00:49:30,490 --> 00:49:31,700 estas timinda. 835 00:49:31,700 --> 00:49:33,120 >> Kaj oni diras, nu, tio ne estas vera. 836 00:49:33,120 --> 00:49:35,740 Ni rigardis la tradukilo kaj la tradukilo ne havas ajnan liniojn de 837 00:49:35,740 --> 00:49:36,400 kodo ŝatas tion. 838 00:49:36,400 --> 00:49:40,540 Li estas kiel, nu bone, sed kio estas vi kompili la tradukilo per? 839 00:49:40,540 --> 00:49:44,810 Kaj ili pensas, kaj li estas, kiel, tiel, Mi estas tiu, kiu donis al vi la tradukilo 840 00:49:44,810 --> 00:49:50,580 vi uzas por kompili la tradukilo, tiel vi estas kompilante tradukilon, ke 841 00:49:50,580 --> 00:49:56,390 sin estas malicaj, kaj volo rompi la ensaluto programo. 842 00:49:56,390 --> 00:49:59,360 Do esence, je tiu punkto, estas neniel vi povus rigardi la fonto 843 00:49:59,360 --> 00:50:02,450 kodo de la ensaluto programo por vidi, kio estas malbone. 844 00:50:02,450 --> 00:50:04,220 Vi ecx ne povis rigardi en la fonta kodo de la tradukilo 845 00:50:04,220 --> 00:50:06,790 por vidi, kio estas malbone. 846 00:50:06,790 --> 00:50:11,940 >> Vi bezonus rigardi la maŝino kodo, la efektiva duuma de la 847 00:50:11,940 --> 00:50:16,760 kompilita tradukilo por vidi, atendu, tiuj linioj de kodo ne devus esti tie. 848 00:50:16,760 --> 00:50:22,130 Sed Ken Thompson prenis unu paŝo tie kaj diris: Bone, estas 849 00:50:22,130 --> 00:50:25,980 tiujn specialajn programojn kiuj reale helpi vin legi la duuma de programoj, 850 00:50:25,980 --> 00:50:29,340 kaj do se iu uzas tiun programon al legi la duuma, ili vidus tiujn 851 00:50:29,340 --> 00:50:30,490 linioj de kodo. 852 00:50:30,490 --> 00:50:34,020 Li modifita tiujn programojn diri, ĉiuj Bone, se vi rigardas la 853 00:50:34,020 --> 00:50:38,460 tradukilo, mi ne montras tiun apartan aro de duuma. 854 00:50:38,460 --> 00:50:42,830 >> Do tiam vi bezonos preni tiun ŝtupon pli kaj esence, kiu povis havi 855 00:50:42,830 --> 00:50:46,210 prenitaj multaj niveloj de indirección, kaj en iu momento, neniu estas vere 856 00:50:46,210 --> 00:50:47,990 tuj estos checking. 857 00:50:47,990 --> 00:50:52,590 Do la moralo de la rakonto estas, vi estas Ne tuj skribos 858 00:50:52,590 --> 00:50:54,340 Tin en ĉi tiu kategorio. 859 00:50:54,340 --> 00:50:57,020 Vi tuj povas uzi grimpadon Tin multon en tiu klaso. 860 00:50:57,020 --> 00:51:00,490 Por ĉiuj vi scias, tin estas malica programo kiu saboteando ĉiu 861 00:51:00,490 --> 00:51:03,520 sola programo vi iam kompilitaj. 862 00:51:03,520 --> 00:51:08,206 Kaj lasos vin sur tiu tre malbonaŭgura rimarku, vidi vin je merkredo. 863 00:51:08,206 --> 00:51:10,030 >> [Aplaŭdo] 864 00:51:10,030 --> 00:51:12,935 >> SPEAKER 2: En la sekvanta CS50. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Ĉu vi ne kuraĝas diri, ke. 866 00:51:14,580 --> 00:51:15,930 Vi povas fari ĉi tion. 867 00:51:15,930 --> 00:51:19,440 Vi jam faris tion antaŭe, vi povas fari tion hodiaŭ, vi povas fari tion morgaŭ. 868 00:51:19,440 --> 00:51:20,930 Ke vi estis faranta tion por jaroj. 869 00:51:20,930 --> 00:51:22,790 Nur iru tie kaj fari tion. 870 00:51:22,790 --> 00:51:24,310 Vi povas fari ĉi tion. 871 00:51:24,310 --> 00:51:26,102 >> [MUZIKO Ludanta]