1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUSIC Playing] 3 00:00:11,210 --> 00:00:12,100 >> Rob BODEN: Në rregull. 4 00:00:12,100 --> 00:00:15,620 Pra, gjëja e parë e parë, të video nga një fytyrë e njohur. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO Playback] 7 00:00:22,560 --> 00:00:23,370 >> -Në rregull. 8 00:00:23,370 --> 00:00:27,150 Kjo është CS50, dhe kjo është Fillimi i javës tre. 9 00:00:27,150 --> 00:00:29,980 Më vjen keq unë nuk mund të jetë atje me ju sot, por më lejoni të prezantoj 10 00:00:29,980 --> 00:00:32,880 Vet Rob Boden CS50-së. 11 00:00:32,880 --> 00:00:33,872 >> [END VIDEO rishikim] 12 00:00:33,872 --> 00:00:39,340 >> [Duartrokitje DHE Cheers] 13 00:00:39,340 --> 00:00:41,277 >> Rob BODEN: filmografi në që video është fantastike. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Dakord. 16 00:00:47,770 --> 00:00:50,960 Pra, së pari, ka një tjetër drekë. 17 00:00:50,960 --> 00:00:52,330 Kjo është nesër at 1:15. 18 00:00:52,330 --> 00:00:54,480 Nuk ka drekë kjo e premte. 19 00:00:54,480 --> 00:00:55,810 Është me Quora. 20 00:00:55,810 --> 00:01:00,190 Dhe Tommy nuk është këtu, por një nga populli nuk është ish-kreu CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Kështu që ai është një djalë fun. 23 00:01:02,730 --> 00:01:04,819 Ju duhet të vijnë. 24 00:01:04,819 --> 00:01:05,900 >> Dakord. 25 00:01:05,900 --> 00:01:11,360 Pra, javën e kaluar, kemi filluar duke thyer përveç për atë që një varg të vërtetë është. 26 00:01:11,360 --> 00:01:14,830 Ne e kemi njohur që në fillim se kjo është një sekuencë e karaktere. 27 00:01:14,830 --> 00:01:18,130 Por javën e kaluar, ne delved në faktin se ajo që është me të vërtetë një sekuencë e 28 00:01:18,130 --> 00:01:22,110 karaktere, edhe, ne tani kemi vargjeve të karaktereve. 29 00:01:22,110 --> 00:01:26,450 Dhe ne e dimë se një varg, është një koleksion e karaktereve, në fund, 30 00:01:26,450 --> 00:01:30,920 ne e kemi këtë bajt veçantë null, kjo backslash 0, që tregon fundin e 31 00:01:30,920 --> 00:01:32,230 string. 32 00:01:32,230 --> 00:01:36,970 >> Dhe kështu një varg është një koleksion i karaktere, por ne mund të kemi më shumë se 33 00:01:36,970 --> 00:01:39,530 vetëm një grup të karaktereve, ne mund të kemi një rrjet të çdo 34 00:01:39,530 --> 00:01:40,890 lloji i gjë që ne duam. 35 00:01:40,890 --> 00:01:51,570 Pra, nëse ju kujtohet nga java e fundit, Program Moshat që Davidi futur 36 00:01:51,570 --> 00:01:53,560 me të vërtetë shpejt. 37 00:01:53,560 --> 00:01:57,010 Pra gjëja e parë që ne jemi duke shkuar për të bërë është kërkojë nga shfrytëzuesi për një numër të plotë, 38 00:01:57,010 --> 00:01:58,800 Numri i njerëzve në dhomë. 39 00:01:58,800 --> 00:02:01,260 Pasi të kemi këtë numër të plotë, ne jemi duke deklaruar një rrjet. 40 00:02:01,260 --> 00:02:02,890 Vini re këtë sintaksë kllapa. 41 00:02:02,890 --> 00:02:04,540 Ju jeni do të mësohen me këtë. 42 00:02:04,540 --> 00:02:09,430 >> Pra, ne jemi duke deklaruar një rrjet të numrave të plotë quajtur moshave, dhe ka n 43 00:02:09,430 --> 00:02:12,080 integers në këtë grup. 44 00:02:12,080 --> 00:02:16,480 Kështu që ky model të drejtë këtu, kjo int 4 i është 0, i është më pak se n, i plus 45 00:02:16,480 --> 00:02:20,580 plus, që është gjithashtu do të jetë një model që ju të merrni shumë të përdorur për të. 46 00:02:20,580 --> 00:02:24,000 Sepse kjo është shumë e shumë si ju jeni gjithmonë do të iterate mbi vargjeve. 47 00:02:24,000 --> 00:02:26,330 Pra, mos harroni se është n Gjatësia e array tonë. 48 00:02:26,330 --> 00:02:32,120 Dhe kështu këtu, ne jemi duke kërkuar në mënyrë të përsëritur për moshën e personit i në dhomë. 49 00:02:32,120 --> 00:02:36,640 >> Pas kësaj, ne do të shkojmë poshtë, dhe për çfarëdo arsye arbitrare, ne pastaj 50 00:02:36,640 --> 00:02:40,220 shtypura nga sa e vjetër ata do të jetë një vit nga tani. 51 00:02:40,220 --> 00:02:49,980 Dhe drejtimin atë program, le të të bëjë moshave, dot moshave çaj. 52 00:02:49,980 --> 00:02:53,010 Pra, numri i njerëzve në dhomë, le të themi ka tre. 53 00:02:53,010 --> 00:02:59,880 Dhe thonë, personi i parë është 13, tjetër është 26, dhe i fundit është 30. 54 00:02:59,880 --> 00:03:05,080 Pra, atëherë ajo do të iterate gjatë atyre tre njerëz, të shtypura nga 14, 27, dhe 31. 55 00:03:05,080 --> 00:03:16,060 >> Pra, mos harroni se kur ne të deklarojë një sërë madhësi n, indekset në se 56 00:03:16,060 --> 00:03:19,950 array, array ka vlera dhe Indekset 0, 1, 2, gjatë gjithë rrugës 57 00:03:19,950 --> 00:03:21,680 deri n minus 1. 58 00:03:21,680 --> 00:03:26,255 Pra, kur ne tha se kishte tre persona në dhomë, dhe ne kemi vënë në këtu 59 00:03:26,255 --> 00:03:29,850 përsëritje e parë përmes kësaj loop, unë do të jetë 0. 60 00:03:29,850 --> 00:03:31,650 Pra, në indeks 0. 61 00:03:31,650 --> 00:03:34,540 Ne jemi caktimin e parë moshe përdorues hyn. 62 00:03:34,540 --> 00:03:38,870 Pastaj në një tjetër, ne jemi duke hyrë dytë n përdoruesi hyn, dhe në 63 00:03:38,870 --> 00:03:40,580 pranë dy, n fundit. 64 00:03:40,580 --> 00:03:44,200 >> Pra të vini re se një grup i madhësisë tre nuk ka asgjë 65 00:03:44,200 --> 00:03:46,040 në indeksin e tre. 66 00:03:46,040 --> 00:03:49,036 Kjo nuk është e vlefshme. 67 00:03:49,036 --> 00:03:50,250 Dakord. 68 00:03:50,250 --> 00:03:55,136 Pra, duke shkuar prapa këtu. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Pra, tani që ne e kemi trajtuar me vargjeve, ne kemi disa familjaritet. 71 00:04:01,590 --> 00:04:03,780 Tani ne do të lëvizin për në komandën Argumentet e linjës, të cilat do të jenë të 72 00:04:03,780 --> 00:04:05,890 shumë e rëndësishme për këtë grup problemit. 73 00:04:05,890 --> 00:04:09,670 >> Pra, deri tani, sa herë që ju keni deklaruar funksionin tuaj kryesor, ne kemi 74 00:04:09,670 --> 00:04:11,230 tha pavlefshëm kryesore int. 75 00:04:11,230 --> 00:04:14,070 Pra pavlefshme vetëm do të thotë se ne nuk jemi duke kaluar çdo 76 00:04:14,070 --> 00:04:16,440 Argumentet për këtë funksion. 77 00:04:16,440 --> 00:04:19,190 Tani ne jemi duke shkuar për të parë atë Main mund të marrë disa argumente. 78 00:04:19,190 --> 00:04:22,470 Këtu ne i quajmë ato int argc dhe string ARGV kllapa. 79 00:04:22,470 --> 00:04:26,930 Kllapa, edhe një herë, duke treguar se ne jemi që kanë të bëjnë me të vargjeve. 80 00:04:26,930 --> 00:04:31,850 Kështu që këtu, kllapa string ARGV, ne jemi që kanë të bëjnë me grupe prej vargjesh. 81 00:04:31,850 --> 00:04:35,360 Pra argc, që do të tregojë sa argumente ne kemi 82 00:04:35,360 --> 00:04:37,580 kaluar në këtë program. 83 00:04:37,580 --> 00:04:46,050 Dhe për të parë se çka do të thotë, le të mbyllë këtë. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Pra, deri tani, ne kemi drejtuar çdo program si moshave dot slash. 86 00:04:50,790 --> 00:04:55,250 Ne gjithashtu mund të, në rreshtin e komandave, e kaluara kalojë argumente, pra termi, komanda 87 00:04:55,250 --> 00:04:56,550 Argumentet linjë. 88 00:04:56,550 --> 00:04:59,760 Pra, argumenti i parë, përshëndetje botë. 89 00:04:59,760 --> 00:05:03,350 Kështu që këtu, argc do të jetë tre. 90 00:05:03,350 --> 00:05:07,720 Është numërimin e argumenteve në rreshtin e komandave. 91 00:05:07,720 --> 00:05:12,840 Argc është gjithmonë në të paktën 1, që pikë çaj moshave, veten, akuza si një nga 92 00:05:12,840 --> 00:05:14,490 argumentet command line. 93 00:05:14,490 --> 00:05:17,010 >> Pastaj përshëndetje është i pari. 94 00:05:17,010 --> 00:05:20,460 Nëse moshave dot Slash është 0, atëherë përshëndetje është i pari, dhe bota është 95 00:05:20,460 --> 00:05:22,830 dytë command line argumenti. 96 00:05:22,830 --> 00:05:29,490 Pra ARGV string, ne jemi duke shkuar për të parë, përmban vargjet, dot plagë 97 00:05:29,490 --> 00:05:33,830 moshave, hello, dhe bota. 98 00:05:33,830 --> 00:05:38,945 Dhe, me kërkesën e Davidit, ne jemi duke shkuar për të luajtur një video futjen këtë. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO Playback] 101 00:05:43,890 --> 00:05:46,240 >> -Deri tani në programet ne kemi me shkrim, ne kemi të deklarojë 102 00:05:46,240 --> 00:05:48,500 kryesor i pavlefshëm si int kryesore. 103 00:05:48,500 --> 00:05:51,170 Dhe të gjithë këtë kohë, që ka pavlefshëm thjesht është specifikuar se 104 00:05:51,170 --> 00:05:54,430 Programi nuk ka marrë ndonjë argumente të komandës. 105 00:05:54,430 --> 00:05:57,750 Me fjalë të tjera, kur një përdorues shkon një program, ai ose ajo mund të sigurojë komandën 106 00:05:57,750 --> 00:06:01,710 Argumentet e linjës nga shkrim shtesë fjalët ose frazat pasi programi të 107 00:06:01,710 --> 00:06:03,000 të përmendur në ftim. 108 00:06:03,000 --> 00:06:06,550 >> E pra, në qoftë se ju doni programin tuaj për të marrë argumente command line, një ose 109 00:06:06,550 --> 00:06:10,540 më shumë fjalë të tilla, ne kemi nevojë për të zëvendësuar të pavlefshme me një çift të argumenteve. 110 00:06:10,540 --> 00:06:12,200 Pra, le ta bëjmë atë. 111 00:06:12,200 --> 00:06:15,750 Përfshi CS50.h. 112 00:06:15,750 --> 00:06:19,360 Përfshi io.h. standarde 113 00:06:19,360 --> 00:06:20,760 Kryesore int. 114 00:06:20,760 --> 00:06:26,330 Dhe tani, në vend të pavlefshëm, unë jam duke shkuar për specifikoni një int quajtur argc, dhe një 115 00:06:26,330 --> 00:06:28,780 Grup vargjesh quajtur ARGV. 116 00:06:28,780 --> 00:06:31,820 Tani, argc dhe ARGV janë thjesht konventat. 117 00:06:31,820 --> 00:06:34,000 >> Ne mund të kanë quajtur këto argumente më çdo gjë që duam. 118 00:06:34,000 --> 00:06:37,630 Por ajo që është e rëndësishme është se argc është një int sepse, sipas definicionit, është e 119 00:06:37,630 --> 00:06:41,360 do të përmbajë numërimin argumentin, numri i fjalëve në total që 120 00:06:41,360 --> 00:06:43,380 përdoruesi ka shtypur në ftim tij ose të saj. 121 00:06:43,380 --> 00:06:47,910 ARGV, ndërkohë, argumenti vektor, është do të jetë në fakt një grup magazinimin e 122 00:06:47,910 --> 00:06:52,020 të gjitha fjalët që përdoruesi ka shtypur në ftim tij ose të saj. 123 00:06:52,020 --> 00:06:54,500 >> Le të vazhdojë të bëjë diçka tani me një ose më shumë nga këto 124 00:06:54,500 --> 00:06:55,660 argumente të komandës. 125 00:06:55,660 --> 00:07:00,070 Në veçanti, le të shkojnë përpara dhe të shtypura pavarësisht fjala lloje përdorues 126 00:07:00,070 --> 00:07:03,960 emrin e programit në ftim. 127 00:07:03,960 --> 00:07:04,730 Kllapa e hapur. 128 00:07:04,730 --> 00:07:06,240 Mbylle kllapa. 129 00:07:06,240 --> 00:07:10,510 Printf përqind s backslash dhe presje. 130 00:07:10,510 --> 00:07:14,550 Dhe tani kam nevojë për të të treguar printf çfarë vlerë në prizë në atë placeholder. 131 00:07:14,550 --> 00:07:18,600 Dua fjalën e parë që përdoruesi ka shtypur emrin e programit, 132 00:07:18,600 --> 00:07:23,130 dhe kështu që unë jam duke shkuar për të specifikuar ARGV kllapa 1, në afërsi 133 00:07:23,130 --> 00:07:24,830 kllapë, pikëpresje. 134 00:07:24,830 --> 00:07:27,290 >> Tani, pse kllapa 1 dhe jo kllapa 0? 135 00:07:27,290 --> 00:07:30,990 E pra, ajo rezulton, ruhen automatikisht në ARGV 0 do të jetë 136 00:07:30,990 --> 00:07:32,620 Emri aktual programit. 137 00:07:32,620 --> 00:07:36,180 Pra, fjala e parë që lloje përdorues pas emri i programit është, duke 138 00:07:36,180 --> 00:07:38,990 konventë, do të jetë ruhet në ARGV 1. 139 00:07:38,990 --> 00:07:42,380 Le tani përpilojnë dhe të drejtuar këtë program. 140 00:07:42,380 --> 00:07:47,780 >> Bëni ARGV 0, dot çaj ARGV 0. 141 00:07:47,780 --> 00:07:50,520 Dhe tani një fjalë si përshëndetje. 142 00:07:50,520 --> 00:07:51,670 Shkruani. 143 00:07:51,670 --> 00:07:53,520 Dhe nuk kemi atë, përshëndetje. 144 00:07:53,520 --> 00:07:55,750 >> [END VIDEO rishikim] 145 00:07:55,750 --> 00:07:57,000 >> Rob BODEN: Në rregull. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Mbylle këtë. 148 00:08:01,230 --> 00:08:16,730 Pra, duke marrë një sy në atë program që ne vetëm futur për ne, dhe, vetëm 149 00:08:16,730 --> 00:08:24,710 për të treguar, në qoftë se ne të shtypura ARGV 0, të bëjë, tani çfarë është ajo, ARGV 0, dot plagë ARGV 0. 150 00:08:24,710 --> 00:08:30,440 Pra, siç pritet, ajo e shtypjes jashtë emrin e programit, pasi ARGV 0 është 151 00:08:30,440 --> 00:08:32,970 gjithmonë do të jetë emrin e programit. 152 00:08:32,970 --> 00:08:35,640 Por le të bëjmë diçka pak më shumë interesante. 153 00:08:35,640 --> 00:08:42,080 >> Pra, në grupin e problemeve, ju do të jetë futur në këtë funksion, atoi. 154 00:08:42,080 --> 00:08:44,440 Pra, çfarë ne përdorim atoi për? 155 00:08:44,440 --> 00:08:48,550 Kjo do të kthyer një string në një numër të plotë. 156 00:08:48,550 --> 00:08:53,280 Pra, nëse unë të kalojë string, një dy tre, për atoi, që do të konvertohet se 157 00:08:53,280 --> 00:08:56,910 me numër i plotë, një dy tre. 158 00:08:56,910 --> 00:09:01,480 Pra, ne jemi duke shkuar për të kthyer parë command line argumenti për një numër të plotë, 159 00:09:01,480 --> 00:09:05,690 dhe pastaj vetëm të shtypura atë numër të plotë. 160 00:09:05,690 --> 00:09:09,680 >> Pra, në thelb, ne jemi lloj reimplementing getint, vetëm 161 00:09:09,680 --> 00:09:12,350 numër i plotë është futur në komandën Linja sesa në programin e 162 00:09:12,350 --> 00:09:14,560 interaktive. 163 00:09:14,560 --> 00:09:23,170 Prandaj, duke e bërë ARGV 0, le të bëjë ajo në këtu, dhe të mbyllë atë. 164 00:09:23,170 --> 00:09:27,670 Pra, duke ARGV 0, dhe le të hyjë numër i plotë, një dy tre katër e dy. 165 00:09:27,670 --> 00:09:30,840 Pra, kjo do të shtypura numër i plotë, një dy tre katër e dy. 166 00:09:30,840 --> 00:09:35,500 Ka disa hollësitë për atoi që ai do të ndalet të kujdeseni për ndonjë gjë 167 00:09:35,500 --> 00:09:39,040 përtej një karakter të vlefshme numerike, por kjo nuk ka rëndësi. 168 00:09:39,040 --> 00:09:42,870 >> Pra, çfarë mendoni ju ndodh po e bëra këtë? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Faji Segmentimi. 171 00:09:47,050 --> 00:09:50,410 Pra, pse është se? 172 00:09:50,410 --> 00:09:56,060 Nëse ju shikoni mbrapa në programin tonë, ne jemi konvertimin ARGV 1, argumentin e parë 173 00:09:56,060 --> 00:09:59,610 pas emrin e programit, për një numër të plotë. 174 00:09:59,610 --> 00:10:03,350 Por nuk ka asnjë argument kaluar me emrin e programit. 175 00:10:03,350 --> 00:10:08,060 Kështu që këtu, ne shohim se kjo është një buggy program, pasi që, në qoftë se ne të përpiqemi për të drejtuar atë 176 00:10:08,060 --> 00:10:10,530 pa argumente, ai thjesht do të rrëzimit. 177 00:10:10,530 --> 00:10:16,950 >> Pra, një tjetër model i zakonshëm ju do të shihni është diçka si, nëse argc është më pak 178 00:10:16,950 --> 00:10:21,100 shumë se dy, duke treguar se nuk ka pasur paktën emri program dhe a 179 00:10:21,100 --> 00:10:29,100 Argumenti i parë, atëherë ne do të bëjmë diçka si printf, nuk mjafton 180 00:10:29,100 --> 00:10:31,190 argumente të komandës. 181 00:10:31,190 --> 00:10:33,170 Kjo ndoshta nuk është një e mirë për të shtypur, kjo është ndoshta diçka, si 182 00:10:33,170 --> 00:10:35,440 ju duhet të shkoni në një numër të plotë në rreshtin e komandave. 183 00:10:35,440 --> 00:10:37,450 Unë vetëm do të përfundojë atë atje. 184 00:10:37,450 --> 00:10:39,600 Dhe pastaj kthehen 1. 185 00:10:39,600 --> 00:10:44,740 Pra, mos harroni që në fund të tonë Programi, në qoftë se do të kthehemi 0, atë gjë e 186 00:10:44,740 --> 00:10:47,060 tregon sukses. 187 00:10:47,060 --> 00:10:50,940 Dhe kryesor gjithashtu automatikisht kthehet 0 në qoftë se ju nuk e bëni. 188 00:10:50,940 --> 00:10:55,800 >> Pra këtu, ne jemi retuning 1 për të treguar se kjo nuk është sukses. 189 00:10:55,800 --> 00:11:01,000 Dhe ju mund të ktheheni çfarë të doni, vetëm, 0 tregon sukses, dhe 190 00:11:01,000 --> 00:11:03,390 çdo gjë tjetër që tregon dështim. 191 00:11:03,390 --> 00:11:04,855 Pra, le të drejtuar këtë version të gjërave. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Deri tani, në qoftë se ne nuk do të hyjë në një command line Argumenti, ajo do të tregoj saktë 194 00:11:16,600 --> 00:11:18,290 na, nuk command line mjaftueshme. 195 00:11:18,290 --> 00:11:20,610 Nuk e kishte përfunduar dënimin. 196 00:11:20,610 --> 00:11:24,950 Tjetër, në qoftë se ne të vërtetë të kalojë atë një të tillë, ajo mund të përfunduar programin. 197 00:11:24,950 --> 00:11:27,920 Pra, kjo është se si ju do të përdorni argc në mënyrë për të vërtetuar numrin e 198 00:11:27,920 --> 00:11:30,630 argumente command line që janë miratuar në të vërtetë. 199 00:11:30,630 --> 00:11:39,360 >> Pra, le të bëjmë këtë program pak më të komplikuar, dhe të kërkoni në të dytin 200 00:11:39,360 --> 00:11:42,180 përsëritje e gjërave. 201 00:11:42,180 --> 00:11:46,310 Deri tani, ne jemi jo vetëm shtypjen parë command line argumenti. 202 00:11:46,310 --> 00:11:51,210 Këtu, ne jemi iterating nga barabartëve int 0, i është më pak se argc, i plus 203 00:11:51,210 --> 00:11:55,280 plus, dhe shtypje ARGV, indeksi i. 204 00:11:55,280 --> 00:11:59,300 Pra ky model, përsëri, kjo është e njëjta model si më parë, me përjashtim në vend 205 00:11:59,300 --> 00:12:02,600 i quajtur variablin n, ne jemi duke përdorur argc. 206 00:12:02,600 --> 00:12:09,520 >> Pra, kjo është iterating mbi çdo indeks në rrjet, dhe shtypjen e çdo 207 00:12:09,520 --> 00:12:11,910 element në atë rrjet. 208 00:12:11,910 --> 00:12:20,300 Dhe kështu, kur ne të drejtuar këtë program, mirë, Unë nuk hyjë në çdo command line 209 00:12:20,300 --> 00:12:22,540 argumente, kështu që vetëm kopje Emri i programit. 210 00:12:22,540 --> 00:12:26,053 Nëse unë të hyjë në një bandë e gjëra, kjo do të printoni një, secili në linjën e vet. 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 Pra, le të marrin këtë hap më tej. 214 00:12:34,770 --> 00:12:38,890 Dhe në vend të shtypjes çdo argument të në linjën e vet, le të shtypura çdo 215 00:12:38,890 --> 00:12:42,590 Karakteri i çdo argumenti në linjën e vet. 216 00:12:42,590 --> 00:12:46,700 Pra, mos harroni se ARGV është një koleksion të strings. 217 00:12:46,700 --> 00:12:50,960 Pra, çfarë është një varg, por një grup të karaktereve? 218 00:12:50,960 --> 00:12:57,140 Pra kjo do të thotë se ARGV është me të vërtetë një array e një grup të karaktereve. 219 00:12:57,140 --> 00:13:04,920 Pra, duke përfituar nga kjo, le të injorojë këtë tani për tani. 220 00:13:04,920 --> 00:13:08,190 Le të konsiderojmë vetëm të string ARGV 0. 221 00:13:08,190 --> 00:13:14,170 >> Pra, nëse ne duam të sjellë çdo karakter të ARGV 0 në linjën e vet, atëherë unë dua 222 00:13:14,170 --> 00:13:19,500 për të bërë model ne jemi duke përdorur për të, i është pak se gjatësia e vektorit, 223 00:13:19,500 --> 00:13:23,990 e cila këtu, është strlen të, kjo është jo atë që unë dua të bëj, string 224 00:13:23,990 --> 00:13:26,450 s është e barabartë ARGV 0. 225 00:13:26,450 --> 00:13:30,390 Kështu që i është më pak se gjatësia e tona array, e cila në këtë rast është një koleksion 226 00:13:30,390 --> 00:13:34,410 i karaktereve, i plus plus. 227 00:13:34,410 --> 00:13:41,040 Dhe kështu, siç e pamë javën e kaluar, kjo është ideale në qoftë se ne shkojmë se strlen jashtë 228 00:13:41,040 --> 00:13:45,210 e gjendjes, pasi n do të jetë duke shtuar strlen e s çdo herë që ne shkojmë 229 00:13:45,210 --> 00:13:47,720 përmes lak, dhe është e nuk do të jetë ndryshuar. 230 00:13:47,720 --> 00:13:50,230 Pra, ne do të vënë atë të barabartë me n mbi këtu. 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 Deri tani, ne jemi duke iterating mbi çdo tregues në rrjet. 234 00:14:01,320 --> 00:14:05,630 Dhe kështu, në qoftë se ne duam të shtypura çdo karakteri në atë array, c qind është 235 00:14:05,630 --> 00:14:06,880 flamuri ne duam të përdorim për karaktere. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Dhe tani një i kllapa do të jetë string, indeksi i karakterit, kështu që nëse 238 00:14:19,770 --> 00:14:20,970 string ishin përshëndetje. 239 00:14:20,970 --> 00:14:27,530 atëherë s 0 do të jetë h, s kllapa 1 do të jetë e, dhe kështu me radhë. 240 00:14:27,530 --> 00:14:30,800 >> Pra, tani ne duam të kombinuar këto dy gjëra. 241 00:14:30,800 --> 00:14:35,440 Ne duam për të shtypur çdo karakter e çdo argumenti command line. 242 00:14:35,440 --> 00:14:38,950 Pra, ne do të kemi një mbivendosur për lak. 243 00:14:38,950 --> 00:14:47,480 Dhe konvencionale, numëruesi i parë është i, e ardhshëm do të jetë j, n 244 00:14:47,480 --> 00:14:54,450 do të jetë strlen i ARGV i, i është më pak se n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Dhe tani në vend të shtypjes ARGV i, kështu që ARGV kllapa unë do të indeksit - 247 00:15:06,870 --> 00:15:14,280 që do të jetë komandë të vijë i-th Argumenti, ARGV i, j do të 248 00:15:14,280 --> 00:15:16,925 të jetë karakteri i jth argumenti i-th. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Unë do të të shpëtoj nga kjo e deri këtu tani pasi ne kemi vënë atë në këtë lak. 251 00:15:24,810 --> 00:15:33,900 Pra, është e barabartë me String s barabartëve ARGV I, dhe pastaj s kllapa j. 252 00:15:33,900 --> 00:15:36,980 >> E pra, ne nuk kemi nevojë për të deklaruar kjo s variabël. 253 00:15:36,980 --> 00:15:44,530 Në vend të kësaj, ne do të kombinohen vetëm këto dy në atë që kemi pasur, ARGV i, j. 254 00:15:44,530 --> 00:15:45,780 >> Gjuha 1: [padëgjueshme]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> Rob BODEN: thirrje e mirë. 257 00:15:49,680 --> 00:15:52,936 Pra, kjo është e thyer. 258 00:15:52,936 --> 00:15:55,510 Nëse unë në fakt u zhvillua atë, ne do të kanë kuptuar këtë. 259 00:15:55,510 --> 00:16:01,210 Kështu counter më intereson në këtë të veçantë për 260 00:16:01,210 --> 00:16:05,410 loop është j, iterator. 261 00:16:05,410 --> 00:16:08,560 Pra, ju do të kandidojë në çështjet, ndoshta një loop pafund, në qoftë se ne 262 00:16:08,560 --> 00:16:09,540 nuk e kishte fiksuar atë. 263 00:16:09,540 --> 00:16:12,220 Kjo është arsyeja pse ne jemi edhe duke folur për debugging sot. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Pra, le të drejtuar këtë program. 266 00:16:15,240 --> 00:16:21,200 Dhe le të të vërtetë të shtoni një printf veçantë drejtë këtu që vetëm do të shtypura 267 00:16:21,200 --> 00:16:27,480 një tjetër linjë, pasi që kjo do të thotë, kur kemi drejtuar programin, do të ketë një bosh 268 00:16:27,480 --> 00:16:31,830 vijë në mes të çdo karakter të çdo komandë linjë argumenti. 269 00:16:31,830 --> 00:16:33,448 E pra, ne do të shohim se çfarë do të thotë. 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 Mori disa bug. 273 00:16:39,870 --> 00:16:42,860 Gabim implicite deklaruar Funksioni Biblioteka strlen. 274 00:16:42,860 --> 00:16:51,630 >> Pra, duke shkuar prapa në programin tonë, unë harruar të hash përfshijë string. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Pra string do të jetë header fotografi që deklaron 277 00:16:57,730 --> 00:16:58,980 funksioni strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, ajo harton. 280 00:17:06,060 --> 00:17:09,109 Tani, le të drejtuar atë. 281 00:17:09,109 --> 00:17:10,930 Pra, vetëm atë. 282 00:17:10,930 --> 00:17:17,790 Ajo do të shtypura nga tonë Emri i programit, përshëndetje botë. 283 00:17:17,790 --> 00:17:23,510 Ajo do të shtypura çdo gjë, çdo karakter, në linjën e vet. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Pra, le të vërtetë të marrë këtë një hap më tej. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Dhe në vend të përdorimit string, le të mendoni se si ne do të zbatojë vetë tonë 288 00:17:39,700 --> 00:17:41,420 funksion strlen. 289 00:17:41,420 --> 00:17:45,600 Kështu që unë do të jap menjëherë një nënshkrim funksion. 290 00:17:45,600 --> 00:17:52,900 Pra, le të thërrasë në my_strlen, dhe kjo është do të marrë një varg si argument, 291 00:17:52,900 --> 00:17:57,220 dhe ne presim që të kthehen Gjatësia e atë varg. 292 00:17:57,220 --> 00:18:03,430 Pra, ku është ai tipi? 293 00:18:03,430 --> 00:18:04,990 Po. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Pra mbani mend nga rrëshqitje më parë se ishte gjithashtu nga java e fundit, që një 296 00:18:12,900 --> 00:18:18,890 grup të karaktereve, mirë, një varg, kështu që le të thonë se kjo është string tonë s. 297 00:18:18,890 --> 00:18:29,870 Pra, nëse është string, hello, atëherë, H-E-L-L-O, ne memorie, që do të 298 00:18:29,870 --> 00:18:35,610 të jetë, dhe atëherë kjo backslash 0 karakter. 299 00:18:35,610 --> 00:18:39,170 >> Deri sa nuk kemi marrë gjatësinë e s? 300 00:18:39,170 --> 00:18:43,190 E pra, mashtrim është duke kërkuar për këtë reagim i ashpër në 0 karakter, këtë null 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Pra algorithm është duke shkuar të jetë diçka si pak 303 00:18:50,270 --> 00:18:51,510 mjaft karaktere se - 304 00:18:51,510 --> 00:18:56,180 le të kemi këtë dorë përbëjnë disa counter, le të quajmë këtë gjatësi int. 305 00:18:56,180 --> 00:19:00,060 Pra, duke filluar nga këtu, ne jemi do të iterate mbi vargun tonë. 306 00:19:00,060 --> 00:19:04,100 >> Pra, karakteri i parë, është e H, dhe kjo nuk është kthyer çaj 0, kështu që 307 00:19:04,100 --> 00:19:05,170 gjatësia është 1. 308 00:19:05,170 --> 00:19:08,050 Iterate të karakterit tjetër, E, dhe kjo nuk është backslash 0. 309 00:19:08,050 --> 00:19:09,630 Gjatësi është 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 Dhe së fundi, ne kemi arritur backslash 0, dhe kështu që do të thotë, mirë, 314 00:19:16,690 --> 00:19:17,780 ky varg është e gjatë. 315 00:19:17,780 --> 00:19:20,130 Pra, le të kthehen 5. 316 00:19:20,130 --> 00:19:33,630 >> Pra, në fakt zbatimin që, së pari, Gjatësia ime n është e barabartë me 0, dora ime e djathtë. 317 00:19:33,630 --> 00:19:36,088 Dhe ne jemi duke shkuar për iterate - 318 00:19:36,088 --> 00:19:38,000 >> Gjuha 1: [padëgjueshme] 319 00:19:38,000 --> 00:19:38,640 >> Rob BODEN: Oh, të xhiruar. 320 00:19:38,640 --> 00:19:39,870 Thirrje e mirë. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Pra Gjatësia n është e barabartë me 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Deri tani, ndërsa s gjatësia nuk ka të barabartë dhe më pas, backslash 0. 325 00:19:58,310 --> 00:20:04,660 Pra mbani mend, këtë backslash 0, ajo është një karakter aktuale, dhe kjo tregon 326 00:20:04,660 --> 00:20:05,820 fundi i vargut. 327 00:20:05,820 --> 00:20:09,850 Ashtu si, gjithashtu, backslash n është një personazh faktik. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 do të tregojë fundi i vargut tonë. 329 00:20:14,040 --> 00:20:15,414 Unë nuk dua të vënë atë atje. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Dhe ndërsa e indeksuara nga gjatësia nuk është barabartë me terminator zero, atëherë 332 00:20:25,620 --> 00:20:27,130 ne jemi vetëm do të ardhura gjatësi. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Kështu pra, në fund të programit tonë, Gjatësia është përfundimisht do të 335 00:20:34,880 --> 00:20:37,610 jetë 5 në këtë rast. 336 00:20:37,610 --> 00:20:39,210 Dhe ne do të kthehemi vetëm gjatësi. 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 Deri tani këtu poshtë, unë nuk e bëj të bëjë my_strlen. 340 00:20:48,290 --> 00:20:50,700 Le të përpiloj atë për të siguruar çdo gjë shkon pa probleme. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 U kam bërë në 2? 343 00:20:58,210 --> 00:21:00,565 Apo ishte se 1? 344 00:21:00,565 --> 00:21:01,940 Kjo duhet të bëjë. 345 00:21:01,940 --> 00:21:02,690 Dakord. 346 00:21:02,690 --> 00:21:08,490 Pra, kjo është ARGV 2. 347 00:21:08,490 --> 00:21:11,585 Punon ashtu siç ishte parashikuar, edhe pse ishte se e kam bërë atë në? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Po. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Ky version i gjërave nuk kanë Linja printf ri pas, por kjo 352 00:21:21,820 --> 00:21:22,910 nuk e bën asnjë ndryshim. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Pra, ka punuar ashtu siç pritet. 355 00:21:25,780 --> 00:21:34,750 >> Tani ne mund të kombinoni këtë hap më më tej, ku njoftimi këtu, mirë, 356 00:21:34,750 --> 00:21:38,920 së pari, ne jemi duke grabbing strlen e ARGV i, dhe pastaj ne jemi iterating mbi 357 00:21:38,920 --> 00:21:41,450 çdo karakter në atë varg. 358 00:21:41,450 --> 00:21:47,480 Pra, në vend të bërë që, ajo që në qoftë se ne vetëm të kombinuar këtë logjikë e pritjes 359 00:21:47,480 --> 00:21:50,740 deri sa ne goditi backslash 0 drejtën në këtë për lak? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Kështu iterate ndërsa ARGV i, j bën backslash jo të barabartë 0. 362 00:22:07,490 --> 00:22:10,680 Pra, le të kandidojë atë më parë. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Dakord. 365 00:22:21,180 --> 00:22:27,655 Kështu që këtu, kjo gjendje është duke thënë - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 le të qartë këtë. 368 00:22:40,060 --> 00:22:49,140 Deri tani, kjo të jetë ARGV tonë. 369 00:22:49,140 --> 00:22:55,290 Kështu që, kur unë vetëm u zhvillua atë program para, ARGV është një koleksion të strings. 370 00:22:55,290 --> 00:23:03,100 Dhe kështu, në qoftë se unë të drejtuar atë me dot ARGV çaj 2, hello world, atëherë ARGV 371 00:23:03,100 --> 00:23:07,650 vetvete është gjatësi 3, për ARGV zero, hello, dhe bota. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Dhe brenda secilit prej këtyre treguesve është, në vetvete një grup, ku kjo do të jetë 374 00:23:19,660 --> 00:23:23,780 dot, kjo do të jetë plagë, unë nuk e di në qoftë se ka qenë drejtimin e duhur, unë 375 00:23:23,780 --> 00:23:25,680 nuk mendoj se ishte. 376 00:23:25,680 --> 00:23:30,110 A-R-V dash, duhet më shumë hapësirë. 377 00:23:30,110 --> 00:23:32,570 Le të prerë në këtë grup. 378 00:23:32,570 --> 00:23:38,230 A-R-V dash 0, dhe pastaj backslash 0. 379 00:23:38,230 --> 00:23:43,160 Dhe pastaj në rrëmujë do të jetë përshëndetje. 380 00:23:43,160 --> 00:23:45,910 Le të thonë, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 Dhe së fundi, W-O backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> Kështu algorithm që ne vetëm shkruar, mbivendosur për sythe, atë që ata janë të 383 00:23:59,730 --> 00:24:07,321 duke bërë është, ne së pari duhet kundërvënë i dhe pastaj j. 384 00:24:07,321 --> 00:24:15,206 Kjo do të jetë më e lehtë me kodin në ekran, Le të kthehemi në këtë. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Kështu që të vëreni se unë është iterator kjo është iterating mbi çdo komandë 387 00:24:24,600 --> 00:24:25,610 linjë argumenti. 388 00:24:25,610 --> 00:24:28,870 Dhe j është iterating iterator mbi çdo karakter në të cilat 389 00:24:28,870 --> 00:24:30,410 command line argumenti. 390 00:24:30,410 --> 00:24:46,755 Pra, çfarë është duke bërë këtë printf thellë po, ne kemi printf ARGV 0 0, printf 391 00:24:46,755 --> 00:24:58,680 ARGV 0 1, printf ARGV 0 2, 3 0, 0 4, 0 5, 6 0, por tani, ARGV 0 7 do të 392 00:24:58,680 --> 00:25:00,670 backslash barabartë 0. 393 00:25:00,670 --> 00:25:05,730 >> Pra, atëherë ne të dalë që për lak, dhe tani i iterates në 1. 394 00:25:05,730 --> 00:25:10,910 Dhe tani ne jemi duke shkuar për shtyp ARGV 1 0, ARGV 1 1 - 395 00:25:10,910 --> 00:25:17,040 mirë, tani, pasi që unë prerë përshëndetje të shkurtër, ARGV 1 2 është sërish do të jetë 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 Dhe kështu, rritje i dhe të vazhdojë, dhe kështu me radhë, deri sa të shtypura nga të gjitha 398 00:25:25,050 --> 00:25:28,580 botërore, dhe ato janë tre command line argumente, dhe ne do të dalë jashtë 399 00:25:28,580 --> 00:25:31,670 loop outermost, dhe të përfunduar programin tonë. 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 >> Pra, le të kthehen këtu. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Pra, ju do të fituar disa familjaritet me argumente command line në këtë 406 00:25:52,370 --> 00:25:54,460 problem i veçantë vendosur. 407 00:25:54,460 --> 00:25:56,630 >> Tani, debugging. 408 00:25:56,630 --> 00:26:01,680 Pra, ju ndoshta e keni pasur për të bërë disa debugging me previous tuaj 409 00:26:01,680 --> 00:26:03,120 Problemi vendosur. 410 00:26:03,120 --> 00:26:08,420 Dhe një mënyrë shumë e lehtë për debugging, së pari, le të shohim në një program buggy. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 E pra, duke ecur nëpër këtë program, ne do të kërkojë nga shfrytëzuesi për një 413 00:26:23,830 --> 00:26:29,350 numër i plotë, kap se numër i plotë, dhe më pas, në mënyrë arbitrare, ne kemi një lak, ndërsa që 414 00:26:29,350 --> 00:26:32,280 është vetëm do të pakësim i është i barabartë deri në 10. 415 00:26:32,280 --> 00:26:35,820 Le të supozojmë që unë jam duke hyrë një numër i plotë më i madh se 10. 416 00:26:35,820 --> 00:26:38,700 Kështu pakësim i deri sa është e barabartë me 10. 417 00:26:38,700 --> 00:26:42,630 >> Dhe pastaj ne kemi një tjetër lak, ndërsa që, ndërsa unë nuk të barabartë 0, ne jemi 418 00:26:42,630 --> 00:26:44,540 do të pakësim i nga 3. 419 00:26:44,540 --> 00:26:49,790 Pra, nëse ju shihni qëllimin e bug këtu, është se kjo do pakësim i të 420 00:26:49,790 --> 00:26:57,010 të jetë 10, dhe pastaj ky lak, ndërsa vullneti pakësim i nga 10, në 7, në 4, ne 1 421 00:26:57,010 --> 00:27:02,880 në negative 2, të negative 5, etj, në pafundësi negative, pasi që unë do të 422 00:27:02,880 --> 00:27:05,920 kurrë nuk të vërtetë të barabartë 0. 423 00:27:05,920 --> 00:27:08,610 Dhe pastaj në fund të këtij programi, ne kemi funksionin foo që është 424 00:27:08,610 --> 00:27:12,130 ndodh shtyp se i. 425 00:27:12,130 --> 00:27:16,520 >> Pra, ky është një program i shkurtër dhe i parëndësishëm, dhe bug është e qartë, 426 00:27:16,520 --> 00:27:18,790 sidomos pas unë vetëm tha se ajo ishte bug. 427 00:27:18,790 --> 00:27:24,840 Por qëllimi këtu është, mirë, kjo mund në të vërtetë duken si disa nga tuaj 428 00:27:24,840 --> 00:27:30,040 zgjidhje nga pangopur nga ata të fundit Problemi vendosur, dhe ndoshta ju keni 429 00:27:30,040 --> 00:27:32,800 disa loop pafund në programin tuaj, dhe ju nuk keni ide 430 00:27:32,800 --> 00:27:34,100 çfarë është duke shkaktuar atë. 431 00:27:34,100 --> 00:27:38,690 Pra, një teknikë shumë të dobishme debugging është që të vetëm të shtoni printfs 432 00:27:38,690 --> 00:27:40,180 të gjithë kodin tuaj. 433 00:27:40,180 --> 00:27:49,200 >> Kështu që këtu unë dua një printf jashtë loop e parë ndërsa. 434 00:27:49,200 --> 00:27:53,155 Dhe këtu unë dua një printf, dhe unë do të vetëm të shtypura i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Unë do të bëj edhe më parë, ndërsa loop, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Jashtë, të dytë ndërsa loop. 439 00:28:09,040 --> 00:28:12,170 Edhe një herë, të shtypura brenda e këtu, vlera i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 Dhe le të drejtuar këtë. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Debug Pra dot çaj. 444 00:28:24,800 --> 00:28:25,610 Shkruani një numër të plotë. 445 00:28:25,610 --> 00:28:28,150 Le të bëjmë 13. 446 00:28:28,150 --> 00:28:28,760 Dhe bum. 447 00:28:28,760 --> 00:28:33,300 Ne e shohim se jemi looping pafund brenda lak të dytë, ndërsa. 448 00:28:33,300 --> 00:28:36,305 Deri tani ne e dimë se çfarë është bug. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Por printf debugging është krejtësisht e madhe, por një herë programet tuaja të merrni 451 00:28:45,610 --> 00:28:50,560 më të gjatë dhe më të komplikuara, ka zgjidhje më të sofistikuara të 452 00:28:50,560 --> 00:28:51,705 duke u punuar gjëra. 453 00:28:51,705 --> 00:28:52,955 Pra, le të hequr të gjitha këto printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Dhe le të sigurohemi se nuk e kam thyejnë ndonjë gjë. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Pra, programi ne do për të futur quhet 458 00:29:14,180 --> 00:29:16,715 Gdb, për GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 E pra, në të vërtetë, le të hiqni debug për një të dytë, dhe të bëjë debug përsëri. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 E pra, në fakt e parë, një mësim i mirë në argumentet e linjës komanduese. 463 00:29:34,440 --> 00:29:37,780 Vini re se kjo komandë tingëllimë që është hartimin e çdo gjë është duke u kaluar 464 00:29:37,780 --> 00:29:41,300 në rreshtin e komandave, këto argumente të komandës. 465 00:29:41,300 --> 00:29:46,250 Pra, saktësisht se si ju do të jetë duke përdorur argumente command line, si ne 466 00:29:46,250 --> 00:29:51,500 e bëri para, dhe si ju do në PSET 2, kjo është se si tingëllimë është për përdorimin e tyre. 467 00:29:51,500 --> 00:30:00,070 >> Pra, vini re se ky flamur i parë, dash ggdb3, ajo që është thënë është, tingëllimë, 468 00:30:00,070 --> 00:30:03,790 ju duhet të hartojnë me këtë fotografi qëllim që ne do përfundimisht 469 00:30:03,790 --> 00:30:05,380 duhet të korrigjoj atë. 470 00:30:05,380 --> 00:30:13,840 Pra, për aq kohë sa ju keni se flamurin, atëherë ne mund të gdb debug. 471 00:30:13,840 --> 00:30:17,380 Dhe kjo do të hapur deri të Korrigjuesit GNU. 472 00:30:17,380 --> 00:30:22,920 >> Pra, ka shumë të komandave që ju duhet të mësohen për të. 473 00:30:22,920 --> 00:30:27,100 E para që ju do të ndoshta menjëherë duhet është drejtuar. 474 00:30:27,100 --> 00:30:28,200 Pra, çfarë është e drejtuar do të bëni? 475 00:30:28,200 --> 00:30:30,910 Ajo do të fillojë programin tonë. 476 00:30:30,910 --> 00:30:36,180 Vraponi në mënyrë, duke filluar programin, programin na kërkon një numër të plotë, 13. 477 00:30:36,180 --> 00:30:39,170 Dhe atëherë është looping pafund si pritej, përveç unë hequr 478 00:30:39,170 --> 00:30:40,500 printfs, kështu që ne as nuk e shihni se. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Exited normalisht. 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 Është e mundur që ajo përfundoi të gjitha mënyrë rreth, përsëri në - duke injoruar atë. 484 00:30:53,640 --> 00:30:55,170 Supozojmë ajo nuk ka dalë normalisht. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Ka një përgjigje e komplikuar për këtë. 487 00:31:03,370 --> 00:31:07,890 >> Deri tani, kjo nuk është shumë i dobishëm. 488 00:31:07,890 --> 00:31:11,480 Pra, vetëm drejtimin programin tonë brenda kjo Rregullues nuk na ndihmojnë në ndonjë 489 00:31:11,480 --> 00:31:15,610 mënyrë, pasi ne mund të kemi bërë vetëm dot zvogëlojë debug nga jashtë gdb. 490 00:31:15,610 --> 00:31:21,250 Pra, një komandë që ju do të ndoshta - 491 00:31:21,250 --> 00:31:22,970 dhe unë do të lë këtë. 492 00:31:22,970 --> 00:31:25,850 Kontrolli-d ose të të lë, të dy punë. 493 00:31:25,850 --> 00:31:29,550 Pra, le të hapur atë përsëri. 494 00:31:29,550 --> 00:31:31,130 >> Një tjetër komandë që ju do të ndoshta menjëherë duan të 495 00:31:31,130 --> 00:31:33,600 të mësohen për të është Pushim. 496 00:31:33,600 --> 00:31:37,120 Pra, ne do të thyejnë në kryesore tani për tani, dhe pastaj unë do të shpjegojë se. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 E pra, këtu ne shohim ne kemi ngritur një Breakpoint në këtë linjë në debug.c. 499 00:31:46,370 --> 00:31:50,160 Pra, çfarë do të thotë pushim është se kur unë shkruani drejtuar, programi do të 500 00:31:50,160 --> 00:31:53,560 vazhdojnë duke ecur deri I goditi një Breakpoint. 501 00:31:53,560 --> 00:31:59,390 Pra, kur i goditi të kandidojë, programi fillon, dhe pastaj ai e thyen sa më shpejt që të 502 00:31:59,390 --> 00:32:01,940 hyn funksionin kryesor. 503 00:32:01,940 --> 00:32:06,930 Pushim kryesor do të jetë diçka ju mjaft zakonisht bëni. 504 00:32:06,930 --> 00:32:11,340 >> Dhe tani, të prezantoj për disa komandat më shumë. 505 00:32:11,340 --> 00:32:14,330 Vini re këtu, se është e thënë ne theu në përputhje 11, e cila është 506 00:32:14,330 --> 00:32:16,230 printf, të hyjë një numër të plotë. 507 00:32:16,230 --> 00:32:21,260 Pra komanda tjetër do të jetë se si ne do të shkojmë në linjë tjetër e kodit. 508 00:32:21,260 --> 00:32:24,810 Kjo do të na lejojë të hap përmes linjës tonë të programit nga linjë. 509 00:32:24,810 --> 00:32:26,260 Pra ardhshëm. 510 00:32:26,260 --> 00:32:29,820 >> Tani linjë 12, ne do për të marrë numër të plotë. 511 00:32:29,820 --> 00:32:30,450 Next. 512 00:32:30,450 --> 00:32:34,290 Dhe në qoftë se ju vetëm hit Enter përsëri, ajo do të bëj sërish gjëja e fundit që keni kryer. 513 00:32:34,290 --> 00:32:36,480 Kështu që unë nuk kam nevojë të tipit tjetër çdo herë. 514 00:32:36,480 --> 00:32:40,100 Pra, të hyjë një numër të plotë, 13. 515 00:32:40,100 --> 00:32:46,940 Deri tani, linjë 14, ndërsa unë është më e madhe se 10, dhe unë do të bëjë tjetër. 516 00:32:46,940 --> 00:32:48,685 Dhe ne shohim ne jemi duke shkuar për pakësim i. 517 00:32:48,685 --> 00:32:50,210 Pra, ne jemi duke shkuar për pakësim i përsëri. 518 00:32:50,210 --> 00:32:53,620 >> Deri tani, një tjetër të dobishme komanda është Print. 519 00:32:53,620 --> 00:32:55,750 Pra Printo do të shtypura nga vlera e variablit. 520 00:32:55,750 --> 00:32:57,825 Le të sjellë nga vlera i i ndryshueshëm. 521 00:32:57,825 --> 00:32:58,705 Le të shtypura i. 522 00:32:58,705 --> 00:33:00,910 Ajo do të them unë është 11. 523 00:33:00,910 --> 00:33:03,330 Tani ne Next përsëri, ndërsa i është më e madhe se 10. 524 00:33:03,330 --> 00:33:05,590 Kështu që unë ende e madhe se 10, që nga ajo e 11. 525 00:33:05,590 --> 00:33:06,920 i minus minus. 526 00:33:06,920 --> 00:33:08,250 Le të shtypura i përsëri. 527 00:33:08,250 --> 00:33:10,950 Siç pritej, është 10. 528 00:33:10,950 --> 00:33:12,510 >> Deri tani, të ardhshëm. 529 00:33:12,510 --> 00:33:16,250 Është kthim në gjendjen, i është madh se 10, por i është tashmë 10, kështu 530 00:33:16,250 --> 00:33:20,040 ajo nuk është më i madh se 10, kështu presim ajo të bjerë nga lak, ndërsa. 531 00:33:20,040 --> 00:33:22,220 Dhe tani ne jemi poshtë atë linjë të kodit. 532 00:33:22,220 --> 00:33:28,750 Dhe një tjetër komandë, Lista, është vetëm do për të shfaqur mëparshëm dhe të ardhshëm 533 00:33:28,750 --> 00:33:31,240 disa rreshta të kodit, në rast ju ka humbur veten. 534 00:33:31,240 --> 00:33:35,420 Pra, ne vetëm të dalë këtë lak, ndërsa, dhe tani ne kemi hyrë në këtë 535 00:33:35,420 --> 00:33:37,080 ndërsa loop, linjë 18. 536 00:33:37,080 --> 00:33:39,860 Kështu, ndërsa unë nuk të barabartë 0. 537 00:33:39,860 --> 00:33:46,570 Dhe, tjetër, i barabartë i minus 3, dhe ne do të vini re, ky vetëm do të mbajë. 538 00:33:46,570 --> 00:33:48,270 Dhe ne mund të shtypura i. 539 00:33:48,270 --> 00:33:49,990 >> Çdo komandë lloj ka shkurtore. 540 00:33:49,990 --> 00:33:51,720 Pra, p është e shkurtër për Print. 541 00:33:51,720 --> 00:33:53,400 Pra, ne mund të p i. 542 00:33:53,400 --> 00:33:57,550 Vetëm mbani mbajtjen n, ose të vazhdojmë të bëjmë Next. 543 00:33:57,550 --> 00:33:58,340 Print i përsëri. 544 00:33:58,340 --> 00:34:00,380 Ju shikoni tani është negative 167. 545 00:34:00,380 --> 00:34:06,030 Pra, kjo do të zgjasë përjetë, por jo me të vërtetë përgjithmonë, pasi që ju vetëm e pa, ajo 546 00:34:06,030 --> 00:34:09,330 në të vërtetë do të përfundojë në një pikë. 547 00:34:09,330 --> 00:34:15,699 >> Kështu që është filluar gdb. 548 00:34:15,699 --> 00:34:19,504 Por le të bëjmë një gjë më shumë në gdb. 549 00:34:19,504 --> 00:34:20,754 Uh, debug. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Pra, në këtë rast të veçantë, loop pafund ka ndodhur të jetë brenda 552 00:34:28,534 --> 00:34:30,050 Funksioni kryesor. 553 00:34:30,050 --> 00:34:35,779 Dhe tani për tani, vetëm të pranojë atë që unë jam duke shkuar për të lëvizur lak pafund në 554 00:34:35,779 --> 00:34:37,029 funksioni foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Vetëm mos harroni se, në fund të këtij program, mirë, kjo ishte fillimisht 557 00:34:43,730 --> 00:34:46,210 duke e quajtur foo, e cila ishte vetëm duke shkuar për të shkruar i. 558 00:34:46,210 --> 00:34:51,880 Por tani ne jemi duke bërë thirrje foo, e cila është shkuar për pakësim i deri sa është 0, dhe 559 00:34:51,880 --> 00:34:54,548 pastaj të shtypura atë ndryshore. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Ruaj këtë. 562 00:34:57,970 --> 00:35:00,175 Bëni debug. 563 00:35:00,175 --> 00:35:03,310 Dhe tani, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Pra, nëse unë vetëm drejtuar atëherë unë nuk jam do të të jetë në gjendje që në fakt hap nëpërmjet tim 566 00:35:10,580 --> 00:35:11,730 Programi linjë-nga-line. 567 00:35:11,730 --> 00:35:19,820 Pra, le të thyejnë në kryesore, dhe pastaj shtypni kandidojë. 568 00:35:19,820 --> 00:35:28,160 Kështu që kalojnë nëpër këtë, printf, të hyjë një numër i plotë, të merrni numër i plotë, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Pra, ne jemi duke shkuar për të mbajtur decrementing derisa i është më e madhe se 10. 571 00:35:37,490 --> 00:35:42,840 Pastaj ne do të bien me ndërsa loop, dhe të marrë të vijë - 572 00:35:42,840 --> 00:35:44,364 le të hapur atë në një dritare të veçantë. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Pra, ne decremented deri sa unë nuk ishte më madh se 10, dhe pastaj ne 575 00:35:53,300 --> 00:35:55,700 quajtur funksionin, foo. 576 00:35:55,700 --> 00:36:01,340 >> Pra, çfarë ka ndodhur sa më shpejt që unë goditi funksion foo, mirë, unë quajtur foo, dhe 577 00:36:01,340 --> 00:36:04,030 atëherë unë nuk kishte kontroll mbi gdb. 578 00:36:04,030 --> 00:36:10,230 Pra, sa më shpejt që unë goditi Next në këtë linjë, gjëra vazhdoi deri kjo ka ndodhur, 579 00:36:10,230 --> 00:36:12,400 ku programi exited kur - 580 00:36:12,400 --> 00:36:14,450 supozojmë se nuk ka ekzistuar përfundimisht. 581 00:36:14,450 --> 00:36:16,390 Ti e ke parë atë pauzë për një grimë pse. 582 00:36:16,390 --> 00:36:22,040 Pra, pse nuk kam humbur kontrollin mbi programi në atë pikë? 583 00:36:22,040 --> 00:36:27,540 E pra, kur unë lloji tjetër, që shkon në literal linjë tjetër e kodit që 584 00:36:27,540 --> 00:36:28,850 do të ekzekutojë. 585 00:36:28,850 --> 00:36:35,950 Pra pas 21 linja, linja tjetër e kodit që do të kryejë është linjë 22, 586 00:36:35,950 --> 00:36:38,520 që është, daljes nga kryesore. 587 00:36:38,520 --> 00:36:43,810 Kështu që unë nuk dua të shkojnë vetëm në linjë tjetër e kodit. 588 00:36:43,810 --> 00:36:48,170 Unë dua të shkoj në funksion, foo, dhe pastaj edhe hap përmes 589 00:36:48,170 --> 00:36:49,830 këto rreshta të kodit. 590 00:36:49,830 --> 00:36:53,726 >> Pra, për këtë, ne kemi një alternativë. 591 00:36:53,726 --> 00:36:56,770 Le të lënë atë përsëri. 592 00:36:56,770 --> 00:36:58,020 Pushim kryesore. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, next, next, 13, next, tjetër, tjetër, me kujdes, 595 00:37:06,370 --> 00:37:09,820 para se goditi linjë foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Deri tani, ne jemi në linjë 21, ku ne e quajmë foo. 598 00:37:13,700 --> 00:37:17,100 Ne nuk duam të tipit tjetër, pasi që vetëm do të telefononi foo funksion, dhe 599 00:37:17,100 --> 00:37:18,710 shkojnë në vijën e ardhshme të kodit. 600 00:37:18,710 --> 00:37:20,840 Ajo që ne duam të përdorim është Hapi. 601 00:37:20,840 --> 00:37:25,690 Pra, ka një dallim në mes Hapi dhe Next, ku Hapi hapa në 602 00:37:25,690 --> 00:37:28,190 funksionojnë, dhe shkon Next mbi funksionin. 603 00:37:28,190 --> 00:37:32,830 Ajo vetëm ekzekuton tërësinë e funksioni dhe mban sipër. 604 00:37:32,830 --> 00:37:37,210 >> Pra Hapi do të na sjellë në funksion, foo. 605 00:37:37,210 --> 00:37:41,160 Dhe ne shohim këtu, tani, ne jemi mbrapa në kjo loop ndërsa kjo është, në teori, 606 00:37:41,160 --> 00:37:44,190 do të vazhdojë përgjithmonë. 607 00:37:44,190 --> 00:37:50,420 Dhe në qoftë se ju goditi Hapi, kur ajo nuk është edhe një funksion për të thirrur, atëherë është 608 00:37:50,420 --> 00:37:51,720 identike me Next. 609 00:37:51,720 --> 00:37:55,320 Pra, është vetëm kur ju jeni në një linjë që është duke bërë thirrje një funksion atë hap 610 00:37:55,320 --> 00:37:56,970 do të ndryshojnë nga Next. 611 00:37:56,970 --> 00:37:57,930 Pra Hapi do të na sjellë këtu. 612 00:37:57,930 --> 00:38:02,100 Hap, hap, hap, hap, hap, hap, dhe ne vetëm do të loop pafund përgjithmonë. 613 00:38:02,100 --> 00:38:06,810 >> Kështu që ju mund të merrni përdorur për të se si tuaj mënyrë për të identifikuar sythe pafund, është 614 00:38:06,810 --> 00:38:08,960 vetëm mbajtjen këtë kyç ENTER për të shih ku ju merrni mbërthyer. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Ka mënyra më të mirë për të bërë këtë, por tani për tani, kjo është krejtësisht e mjaftueshme. 617 00:38:14,780 --> 00:38:17,967 Dhe stilistikisht, në përputhje me Style 50, unë duhet të ketë bërë këtë. 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 >> Pra, një komandë e fundit për të futur. 621 00:38:28,400 --> 00:38:30,810 E pra, le të gdb debug in 622 00:38:30,810 --> 00:38:35,580 Pra, në vend të thyer në kryesore, në qoftë se unë e di funksionin foo është edhe 623 00:38:35,580 --> 00:38:39,230 Problemi, atëherë unë mund të ketë vetëm tha: pushim në foo, në vend të kësaj. 624 00:38:39,230 --> 00:38:42,310 Le të thonë se unë të thyer në të dy kryesore dhe foo. 625 00:38:42,310 --> 00:38:45,390 Kështu që ju mund të vendosni sa më shumë breakpoints si ju dëshironi. 626 00:38:45,390 --> 00:38:49,230 Kur unë lloji të kandidojë, kjo do për të ndaluar në - 627 00:38:49,230 --> 00:38:52,180 ooh, le të përpiluar, që nga I ndryshuar gjërat. 628 00:38:52,180 --> 00:38:55,950 Ju do të shihni këtë linjë, Paralajmërimit, burim Skeda është më e fundit se ekzekutues. 629 00:38:55,950 --> 00:38:59,680 Kështu që do të thotë se unë vetëm shkoi në këtu dhe ndryshuar këto të jenë në përputhje me Style 630 00:38:59,680 --> 00:39:03,100 50, por nuk e kam përpiluar programi. 631 00:39:03,100 --> 00:39:04,870 Pra Gdb më bën të vetëdijshëm për këtë. 632 00:39:04,870 --> 00:39:10,130 Unë do të të lë, të bëjë debug përsëri, goditi gdb debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Deri tani, përsëri në atë që bëja. 635 00:39:12,800 --> 00:39:15,720 Pushim kryesore, foo pushim. 636 00:39:15,720 --> 00:39:20,680 Tani në qoftë se unë të drejtuar programin, kështu që është e do të vazhdojë deri hits një 637 00:39:20,680 --> 00:39:21,320 Breakpoint. 638 00:39:21,320 --> 00:39:24,680 Kjo Breakpoint ndodh me të jetë i pari në kryesore. 639 00:39:24,680 --> 00:39:28,630 Tani, në vend që të bëjnë tjetër, tjetër, tjetër, tjetër, tjetër, deri sa unë goditi foo, unë 640 00:39:28,630 --> 00:39:35,230 mund të shtypni të vazhdojë, e cila do të vazhdojë deri sa ju goditi Breakpoint ardhshëm. 641 00:39:35,230 --> 00:39:37,200 Më duhet të hyjë në numër të plotë të parë. 642 00:39:37,200 --> 00:39:40,570 Vazhdo do të vazhdojë deri sa të goditur Breakpoint tjetër, e cila është se 643 00:39:40,570 --> 00:39:43,320 Funksioni i foo. 644 00:39:43,320 --> 00:39:50,130 >> Pra Run do të kandidojë deri sa ju goditi një Breakpoint, por ju vetëm shtypni kandidojë kur 645 00:39:50,130 --> 00:39:54,060 ju jeni duke filluar programin, dhe më pas, prej atëherë e tutje, është të vazhdojë. 646 00:39:54,060 --> 00:40:01,950 Nëse unë vetëm e bëri të thyer kryesor dhe pastaj u zhvillua, ajo do të thyer në 647 00:40:01,950 --> 00:40:03,670 kryesore, dhe pastaj të vazhdojë. 648 00:40:03,670 --> 00:40:10,050 Që unë nuk kam një pikë pushim në foo, të hyjë në numër i plotë, atëherë tani unë jam i 649 00:40:10,050 --> 00:40:11,380 nuk do të thyer në foo. 650 00:40:11,380 --> 00:40:16,318 Është vetëm do të pafund loop deri në atë. 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 >> Pra, kjo është Intro të gdb. 654 00:40:24,420 --> 00:40:27,790 Ju duhet të filloni duke e përdorur atë në grupe tuaja me probleme. 655 00:40:27,790 --> 00:40:30,550 Ajo mund të jetë shumë e dobishme për të identifikuar mete. 656 00:40:30,550 --> 00:40:35,280 Në qoftë se ju në të vërtetë vetëm, linjë-nga-line, shko me anë të kodit tuaj, dhe të krahasojnë atë që është e 657 00:40:35,280 --> 00:40:39,740 në të vërtetë ndodh me atë që ju presin të ndodhë, atëherë kjo është goxha e 658 00:40:39,740 --> 00:40:41,060 vështirë të humbasë mete tuaj. 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 >> Pra, javën e kaluar Davidi solli këtë sende sekret-kyç Kriptografia për 663 00:40:54,040 --> 00:40:59,350 hera e parë, ku ne nuk duam Fjalëkalimet vetëm të ruhen në tonë 664 00:40:59,350 --> 00:41:03,210 kompjuter në një skedar teksti të thjeshtë, ku dikush mund të vijnë mbi dhe vetëm 665 00:41:03,210 --> 00:41:04,660 hapur atë dhe lexoni ato. 666 00:41:04,660 --> 00:41:07,530 Në mënyrë ideale, ata do të jenë të koduara në një farë mënyre. 667 00:41:07,530 --> 00:41:13,340 Dhe në Problem Set 2, ju do të jetë që kanë të bëjnë me një metodë të encryption, 668 00:41:13,340 --> 00:41:16,520 apo, edhe, dy metoda, por ata nuk janë aq të mëdha. 669 00:41:16,520 --> 00:41:20,050 Nëse ju bëni edicionin e hacker, ju jeni gjithashtu do të merret me 670 00:41:20,050 --> 00:41:22,150 decrypting disa gjëra. 671 00:41:22,150 --> 00:41:29,770 >> Pra, çështja tani është, mirë, edhe në qoftë se ne kemi encryption fortë 672 00:41:29,770 --> 00:41:34,830 algorithm në botë, në qoftë se ju zgjidhni një regjistrohu veçanërisht i dobët, atëherë ajo 673 00:41:34,830 --> 00:41:37,720 nuk do të ju ndihmojë shumë, pasi njerëzit do të jenë ende në gjendje të kuptoj atë. 674 00:41:37,720 --> 00:41:41,530 Edhe në qoftë se duke parë të vargut të koduara dhe kjo duket si një rrëmujë e mbeturinave 675 00:41:41,530 --> 00:41:44,760 që do të thotë asgjë për ta, në qoftë se ata ende vetëm duhet të provoni një fjalëkalime pak 676 00:41:44,760 --> 00:41:50,560 të kuptoj atë, atëherë ju nuk janë shumë të sigurt. 677 00:41:50,560 --> 00:41:55,890 Pra, shikuar një video që e thotë. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO Playback] 680 00:42:00,970 --> 00:42:02,100 >> -Helmetë, ti dreq. 681 00:42:02,100 --> 00:42:03,370 Çfarë po ndodh? 682 00:42:03,370 --> 00:42:05,170 Çfarë jeni duke bërë për vajzën time? 683 00:42:05,170 --> 00:42:09,910 >> -Më lejoni të prezantoj shkëlqyer kirurg plastike të rinj, Dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, hundë e madhe punë dikush në të gjithë 685 00:42:13,730 --> 00:42:16,080 universit, dhe Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Madhëria juaj. 687 00:42:17,210 --> 00:42:18,070 >> -Nose punë? 688 00:42:18,070 --> 00:42:18,670 Nuk të kuptoj. 689 00:42:18,670 --> 00:42:20,090 Ajo tashmë kishte një punë hundë. 690 00:42:20,090 --> 00:42:21,910 Kjo ishte një e ëmbël gjashtëmbëdhjetë të pranishëm. 691 00:42:21,910 --> 00:42:22,140 >> -Jo. 692 00:42:22,140 --> 00:42:23,690 Kjo nuk është ajo që ju mendoni. 693 00:42:23,690 --> 00:42:25,420 Është shumë, shumë më keq. 694 00:42:25,420 --> 00:42:30,300 Nëse ju nuk e jepni kombinim të mburojë e ajrit, Dr Schlotkin do 695 00:42:30,300 --> 00:42:34,226 jepni vajzën tuaj të kthehet hundën e saj të vjetër. 696 00:42:34,226 --> 00:42:35,476 >> -Jo. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Ku e keni marrë këtë? 699 00:42:40,516 --> 00:42:41,440 >> -Në rregull. 700 00:42:41,440 --> 00:42:42,180 Do ta tregoj. 701 00:42:42,180 --> 00:42:43,381 Do ta tregoj. 702 00:42:43,381 --> 00:42:44,263 Jo, babi. 703 00:42:44,263 --> 00:42:45,590 Jo, ju nuk duhet. 704 00:42:45,590 --> 00:42:46,860 >> -Ti je e drejtë, e dashur. 705 00:42:46,860 --> 00:42:48,450 Unë do të humbasë hundën tuaj të re. 706 00:42:48,450 --> 00:42:52,090 Por unë nuk do të them atij kombinim, pa marrë parasysh çfarë. 707 00:42:52,090 --> 00:42:53,680 >> -Shumë mirë. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, të bëjë më të keq e juaj. 709 00:42:55,685 --> 00:42:56,914 >> -Ime kënaqësi. 710 00:42:56,914 --> 00:43:00,690 >> [Tools duke u mprehur] 711 00:43:00,690 --> 00:43:01,910 >> -Jo. 712 00:43:01,910 --> 00:43:02,520 Prisni. 713 00:43:02,520 --> 00:43:03,836 Prisni. 714 00:43:03,836 --> 00:43:05,300 Do ta tregoj. 715 00:43:05,300 --> 00:43:06,880 Do ta tregoj. 716 00:43:06,880 --> 00:43:09,130 >> -E dija se do të punojë. 717 00:43:09,130 --> 00:43:09,900 Dakord. 718 00:43:09,900 --> 00:43:12,850 Ma jep mua. 719 00:43:12,850 --> 00:43:16,918 >> -Kombinim është një. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> -Dy. 723 00:43:19,358 --> 00:43:19,846 >> -Dy. 724 00:43:19,846 --> 00:43:20,822 >> -Dy. 725 00:43:20,822 --> 00:43:21,310 >> -Tre. 726 00:43:21,310 --> 00:43:21,798 >> -Tre. 727 00:43:21,798 --> 00:43:22,774 >> -Tre. 728 00:43:22,774 --> 00:43:23,262 >> -Katër. 729 00:43:23,262 --> 00:43:23,750 >> -Katër. 730 00:43:23,750 --> 00:43:26,150 >> -Katër. 731 00:43:26,150 --> 00:43:27,010 >> -Pesë. 732 00:43:27,010 --> 00:43:27,670 >> -Pesë. 733 00:43:27,670 --> 00:43:29,010 >> -Pesë. 734 00:43:29,010 --> 00:43:34,770 >> -So kombinim është një, dy, tre, katër, pesë. 735 00:43:34,770 --> 00:43:37,460 Kjo është kombinimi budalla Kam dëgjuar ndonjëherë në jetën time. 736 00:43:37,460 --> 00:43:39,710 Kjo është lloj gjë një idiot do të ketë në bagazhin e tij. 737 00:43:39,710 --> 00:43:42,000 >> Ju-Faleminderit, Madhëria juaj. 738 00:43:42,000 --> 00:43:43,530 >> -Çfarë keni bërë? 739 00:43:43,530 --> 00:43:44,490 >> -I fikur murin. 740 00:43:44,490 --> 00:43:45,420 >> -Jo ju nuk e keni. 741 00:43:45,420 --> 00:43:45,840 Ju fikur të gjithë filmin. 742 00:43:45,840 --> 00:43:46,930 >> -Unë duhet të ketë presion butonin e gabuar. 743 00:43:46,930 --> 00:43:48,265 >> -E pra, e vënë atë përsëri në. 744 00:43:48,265 --> 00:43:49,110 Vendos filmin prapa. 745 00:43:49,110 --> 00:43:49,510 >> -Po, zotëri. 746 00:43:49,510 --> 00:43:49,917 Po, zotëri. 747 00:43:49,917 --> 00:43:50,324 >> -Le të shkojmë, Arnold. 748 00:43:50,324 --> 00:43:51,140 Ejani, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Sigurisht, ju e dini se unë do ende duhet të ju faturën për këtë. 750 00:43:53,060 --> 00:43:53,440 >> [END VIDEO rishikim] 751 00:43:53,440 --> 00:43:54,690 >> Rob BODEN: Në rregull. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Pra, tani që ne jemi tashmë duke folur për sigurisë në disa mënyra, e bukur 754 00:44:08,430 --> 00:44:16,050 pak poster film, kështu që në kohëve të fundit ditë, këto çështje me NSA 755 00:44:16,050 --> 00:44:17,300 monitorimin e çdo gjë. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Ajo mund të jetë e vështirë për të ndjehen si ju kanë një lloj të privatësisë në 758 00:44:26,930 --> 00:44:34,540 Online botë, edhe pse unë nuk mund të them ju shumica e detajet e Prism. 759 00:44:34,540 --> 00:44:42,130 Pra, duke lëvizur përtej prizëm, ne nuk do për të folur për këtë, tani 760 00:44:42,130 --> 00:44:44,030 mendoni për laptopë tuaj. 761 00:44:44,030 --> 00:44:48,360 Pra deri këtu, unë dua të kaloni në llogarinë time aktuale, 762 00:44:48,360 --> 00:44:50,370 me pinguin tim të vogël. 763 00:44:50,370 --> 00:44:57,310 Kështu që unë kam një password caktuar, dhe se regjistrohu është çdo gjë që unë dua që ajo të jetë. 764 00:44:57,310 --> 00:45:02,430 >> Por mos harroni se ajo që unë jam duke prerje-transportim trupash në me të, kështu që kjo login 765 00:45:02,430 --> 00:45:04,850 të shpejtë, është një program. 766 00:45:04,850 --> 00:45:07,910 Është një program i cili ishte i shkruar nga ndonjë person. 767 00:45:07,910 --> 00:45:13,250 Dhe kështu, ai person, nëse ato janë të veçanërisht me qëllim të keq, që të kishte 768 00:45:13,250 --> 00:45:17,780 kanë thënë, të gjithë të drejtë, kështu që nëse fjalëkalimi që unë të hyjë është e barabartë me tim 769 00:45:17,780 --> 00:45:22,800 regjistrohu aktuale, apo është e barabartë deri në një fjalëkalim të veçantë - 770 00:45:22,800 --> 00:45:25,550 David është awesome apo diçka - 771 00:45:25,550 --> 00:45:27,190 atëherë le ato in 772 00:45:27,190 --> 00:45:33,760 Pra, një programues me qëllim të keq mund të ketë qasje në të gjitha Macs tuaj, ose 773 00:45:33,760 --> 00:45:36,150 Dritaret, apo ndonjë gjë. 774 00:45:36,150 --> 00:45:41,980 >> Kështu që nuk është shumë i një shqetësim, pasi, Unë do të thotë, ky është program login 775 00:45:41,980 --> 00:45:48,720 që është dërguar me OS X, qindra ose mijëra njerëz kanë 776 00:45:48,720 --> 00:45:50,020 shqyrtuar këtë kod. 777 00:45:50,020 --> 00:45:55,330 Dhe kështu, në qoftë se, në kodin tuaj diku, ju thonë se nëse kjo është e barabartë me string është e barabartë me 778 00:45:55,330 --> 00:45:58,860 David is awesome, login, atëherë dikush është do të jetë, si, prisni. 779 00:45:58,860 --> 00:45:59,800 Kjo nuk është e drejtë. 780 00:45:59,800 --> 00:46:01,790 Kjo nuk duhet të jetë këtu. 781 00:46:01,790 --> 00:46:06,650 Pra, kjo është një mënyrë që ne të merrni gjërat të jetë lloj i sigurt. 782 00:46:06,650 --> 00:46:10,300 >> Por mendoj se për edhe programet e që ju shkruani. 783 00:46:10,300 --> 00:46:13,000 Le të thonë se ju ka shkruajtur programin login. 784 00:46:13,000 --> 00:46:20,440 Pra, ky program login që ju ka shkruajtur, kështu natyrisht, ju jeni një të mirë 785 00:46:20,440 --> 00:46:21,210 programues. 786 00:46:21,210 --> 00:46:25,610 Ju nuk do të jeni për të vënë ndonjë qëllim të keq nëse x është e barabartë e barabartë me David është awesome 787 00:46:25,610 --> 00:46:27,860 në kodin tuaj. 788 00:46:27,860 --> 00:46:31,930 Por ky program, çfarë bëni ju përdorin për të hartuar këtë program? 789 00:46:31,930 --> 00:46:34,180 Diçka si tingëllimë. 790 00:46:34,180 --> 00:46:38,460 Pra, çfarë nëse personi i cili ka ndodhur të shkruani tingëllimë Speciale cased në tingëllimë 791 00:46:38,460 --> 00:46:44,310 diçka si, në qoftë se unë jam hartimin login program, pastaj futni këtë kod 792 00:46:44,310 --> 00:46:49,720 në programin e hyrjes që thotë se, në qoftë se x është e barabartë e barabartë me David është awesome? 793 00:46:49,720 --> 00:46:59,890 Pra, nuk mjaft ende, por ne kemi të njëjtën nxjerrë këtu, ku tingëllimë, mirë, 794 00:46:59,890 --> 00:47:03,790 mijëra, në mos dhjetëra mijëra njerëzit, e kanë shikuar në tingëllimë, kanë 795 00:47:03,790 --> 00:47:07,160 shikuar në linjat e saj të kodit dhe tha: të gjithë të drejtë, nuk ka asgjë të keqe këtu. 796 00:47:07,160 --> 00:47:10,680 Natyrisht, askush nuk është duke bërë gjë kjo me qëllim të keq. 797 00:47:10,680 --> 00:47:15,780 >> Por ajo që është tingëllimë veten, si, çfarë nëse unë përpilojnë tingëllimë? 798 00:47:15,780 --> 00:47:20,900 Çka nëse unë kam disa përpilues që harton tingëllimë që e fut në tingëllimë 799 00:47:20,900 --> 00:47:25,610 kjo hack veçantë që thotë, të gjithë të drejtë, kur unë përpilojnë tingëllimë, atëherë 800 00:47:25,610 --> 00:47:31,290 ekzekutueshëm të shkoj duhet posaçërisht të shikoni brenda programit login dhe insert 801 00:47:31,290 --> 00:47:34,230 kjo fjalëkalimin, është e barabartë me të barabartëve Dave është awesome? 802 00:47:34,230 --> 00:47:37,990 Pra mos harroni se compiler tuaj vetë duhet të përpilohet në një pikë. 803 00:47:37,990 --> 00:47:42,810 Pra, në qoftë se ajo që ju zgjidhni për të hartuar tingëllimë me, në vetvete është me qëllim të keq, atëherë ju 804 00:47:42,810 --> 00:47:45,580 do të mund të dehur të gjithë Mënyra më poshtë vijës. 805 00:47:45,580 --> 00:47:49,630 >> Kështu që këtu, ne kemi Ken Thompson dhe Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Pra, kjo është një foto portreti. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie është në të djathtë. 808 00:47:55,470 --> 00:47:58,740 Ai është një i madh - 809 00:47:58,740 --> 00:48:03,640 shumë e shumë të shkruajtur C. Pra, ju mund të falënderoj atë për këtë klasë. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson është në të majtë. 811 00:48:04,840 --> 00:48:07,780 Dy prej tyre në thelb ka shkruajtur UNIX. 812 00:48:07,780 --> 00:48:10,140 E pra, ata kanë qenë kontribuuesit kryesor në UNIX. 813 00:48:10,140 --> 00:48:11,310 Ka pasur disa të tjerë. 814 00:48:11,310 --> 00:48:16,240 Pra Ken Thompson, në një pikë, ai fiton Çmimin Turing. 815 00:48:16,240 --> 00:48:20,860 Dhe çmimin Turing, unë kam dëgjuar gjithmonë kjo i referohet në këtë mënyrë, është e 816 00:48:20,860 --> 00:48:23,100 Çmimin Nobel e shkencave kompjuterike. 817 00:48:23,100 --> 00:48:27,500 >> Pra, në Çmimin Turing, ai ka për japë fjalimin e tij të pranimit. 818 00:48:27,500 --> 00:48:31,790 Ai jep këtë fjalim shumë i njohur tani, i quajtur Reflektime mbi besuar 819 00:48:31,790 --> 00:48:35,620 Trust, të cilat ne e kanë lidhur për të në faqen e internetit të kursit. 820 00:48:35,620 --> 00:48:41,670 Dhe në këtë fjalim, thotë ai, të gjithë të drejtë, kështu që kam shkruar UNIX, dhe tani të gjithë 821 00:48:41,670 --> 00:48:43,320 ju njerëzit janë duke përdorur UNIX. 822 00:48:43,320 --> 00:48:46,960 Tani, mos harroni sot se Linux është një pasardhës i drejtpërdrejtë i UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X direkt përdor UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows-i nuk e bën aq shumë, por shumë e ideve janë marrë nga UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Pra se të ngjitet në skenë dhe thotë, të gjithë të drejtë, kam shkruar UNIX. 826 00:48:59,220 --> 00:49:03,940 Dhe vetëm kështu që ju djema e di, unë jam i gjendje të hyni në çdo 827 00:49:03,940 --> 00:49:05,590 një të vetme nga kompjuterat tuaj. 828 00:49:05,590 --> 00:49:14,280 Që unë vënë një nga këto të veçantë në qoftë se x është e barabartë barabartë Ken Thomson është awesome, 829 00:49:14,280 --> 00:49:16,350 atëherë unë jam i lejuar të identifikoheni. 830 00:49:16,350 --> 00:49:18,370 Pra, njerëzit janë si, mirë, Si do të bëni këtë? 831 00:49:18,370 --> 00:49:21,090 Ne shikuar në programin e hyrjes dhe asgjë nuk është atje. 832 00:49:21,090 --> 00:49:24,700 Ai është si, mirë, unë ndryshuar për herë përpiluesit të hyni në program login 833 00:49:24,700 --> 00:49:30,490 në mënyrë që programi login tani do të ketë se x është e barabartë është e barabartë me Ken Thompson 834 00:49:30,490 --> 00:49:31,700 është awesome. 835 00:49:31,700 --> 00:49:33,120 >> Dhe ata thonë, mirë, kjo nuk është e vërtetë. 836 00:49:33,120 --> 00:49:35,740 Ne jemi duke kërkuar në përpiluesit, dhe përpilues nuk ka ndonjë vijë të 837 00:49:35,740 --> 00:49:36,400 Kodi si kjo. 838 00:49:36,400 --> 00:49:40,540 Ai është si, rregull, por ajo që jeni hartimin përpiluesit me? 839 00:49:40,540 --> 00:49:44,810 Dhe ata mendojnë, dhe ai është, si, dhe, Unë jam ai që ta dha përpiluesit 840 00:49:44,810 --> 00:49:50,580 ju jeni duke përdorur për të hartuar përpiluesit, kështu ju jeni hartimin e një përpilues, që 841 00:49:50,580 --> 00:49:56,390 në vetvete është me qëllim të keq, dhe do të thyejnë programin login. 842 00:49:56,390 --> 00:49:59,360 Pra, në thelb, në atë pikë, nuk ka asnjë mënyrë ju mund të shikoni në burim 843 00:49:59,360 --> 00:50:02,450 Kodi i programit login për të parë se çfarë është e gabuar. 844 00:50:02,450 --> 00:50:04,220 Ju nuk mund të shikoni edhe në Kodi burimor i përpiluesit 845 00:50:04,220 --> 00:50:06,790 për të parë se çfarë është e gabuar. 846 00:50:06,790 --> 00:50:11,940 >> Ju do të duhet të shohim në makinë Kodi, binar aktuale e 847 00:50:11,940 --> 00:50:16,760 compiler hartuar për të parë, prisni, këto rreshta të kodit nuk duhet të jetë këtu. 848 00:50:16,760 --> 00:50:22,130 Por Ken Thompson e mori atë një hap më tej dhe tha, mirë, ka 849 00:50:22,130 --> 00:50:25,980 këto programe të veçanta që në fakt ndihmojë të lexoni binare e programeve, 850 00:50:25,980 --> 00:50:29,340 dhe kështu që nëse dikush përdorur këtë program për të lexoni binare, ata do të shohin këto 851 00:50:29,340 --> 00:50:30,490 rreshta të kodit. 852 00:50:30,490 --> 00:50:34,020 Ai modifikuar ato programe për të thënë, të gjithë e drejtë, nëse ju jeni duke kërkuar në 853 00:50:34,020 --> 00:50:38,460 përpilues, nuk e tregojnë këtë të veçantë set binar. 854 00:50:38,460 --> 00:50:42,830 >> Pra, atëherë ju duhet të marrë atë një hap më tej dhe në thelb, që mund të ketë 855 00:50:42,830 --> 00:50:46,210 Nivelet e marra të shumta të tërthortë, dhe në një moment, askush nuk është në të vërtetë 856 00:50:46,210 --> 00:50:47,990 do të jetë i kontrolluar. 857 00:50:47,990 --> 00:50:52,590 Pra, morale e tregimit është, ju jeni nuk do të jetë me shkrim 858 00:50:52,590 --> 00:50:54,340 Tingëllimë në këtë klasë. 859 00:50:54,340 --> 00:50:57,020 Ju jeni do të jetë duke përdorur ngjitje Tingëllimë shumë në këtë klasë. 860 00:50:57,020 --> 00:51:00,490 Për të gjithë ju e dini, tingëllimë është një qëllim të keq program që është sabotimin e çdo 861 00:51:00,490 --> 00:51:03,520 programi i vetëm që ju keni hartuar ndonjëherë. 862 00:51:03,520 --> 00:51:08,206 Dhe të largohet nga ju më shumë se ogurzi vini re, shihemi të mërkurën. 863 00:51:08,206 --> 00:51:10,030 >> [Duartrokitje] 864 00:51:10,030 --> 00:51:12,935 >> Gjuha 2: Në CS50 ardhshëm. 865 00:51:12,935 --> 00:51:14,580 >> Gjuha 3: A nuk ju guxoj të them se. 866 00:51:14,580 --> 00:51:15,930 Ju mund ta bëni këtë. 867 00:51:15,930 --> 00:51:19,440 Ju keni bërë këtë më parë, ju mund ta bëni këtë sot, ju mund ta bëni këtë nesër. 868 00:51:19,440 --> 00:51:20,930 Ju keni qenë bërë këtë për vite me rradhë. 869 00:51:20,930 --> 00:51:22,790 Vetëm të shkojnë deri atje dhe të bëjë këtë. 870 00:51:22,790 --> 00:51:24,310 Ju mund ta bëni këtë. 871 00:51:24,310 --> 00:51:26,102 >> [MUSIC Playing]