1 00:00:00,000 --> 00:00:02,860 [Powered by Google Translate] [Wythnos 5] 2 00:00:02,860 --> 00:00:04,860 [David J. Malan - Harvard University] 3 00:00:04,860 --> 00:00:07,260 [Mae hyn yn CS50. - CS50.TV] 4 00:00:07,260 --> 00:00:09,740 >> Mae hyn yn CS50, Wythnos 5. 5 00:00:09,740 --> 00:00:12,900 Heddiw, a'r wythnos hon, byddwn yn cyflwyno ychydig o fyd fforensig 6 00:00:12,900 --> 00:00:14,850 yng nghyd-destun y Broblem Set 4. 7 00:00:14,850 --> 00:00:18,480 Heddiw, bydd yn ddarlith gryno oherwydd bod digwyddiad arbennig yma wedyn. 8 00:00:18,480 --> 00:00:21,940 Felly, byddwn yn cymryd cip a canfod myfyrwyr a rhieni fel ei gilydd heddiw 9 00:00:21,940 --> 00:00:24,600 gyda rhai o'r pethau sydd ar y gorwel. 10 00:00:24,600 --> 00:00:29,050 >> Yn eu plith, o ddydd Llun, bydd gennych gyd-ddisgyblion ychydig mwy. 11 00:00:29,050 --> 00:00:32,980 EDX, Harvard a MIT menter newydd ar-lein ar gyfer OpenCourseWare a mwy, 12 00:00:32,980 --> 00:00:36,730 yn lansio ar gampws Harvard ddydd Llun, sy'n golygu dod Dydd Llun 13 00:00:36,730 --> 00:00:40,930 Bydd gennych chi, fel y cyfrif diwethaf, 86,000 cyd-ddisgyblion ychwanegol 14 00:00:40,930 --> 00:00:43,680 a fydd yn dilyn, ynghyd â CS50 yn darlithoedd ac adrannau 15 00:00:43,680 --> 00:00:45,890 a walkthroughs a setiau problem. 16 00:00:45,890 --> 00:00:51,870 Ac fel rhan o hyn, byddwch yn dod yn aelodau o'r dosbarth cyntaf CS50 ac yn awr CS50x. 17 00:00:51,870 --> 00:00:56,150 Fel rhan o hyn yn awr, yn sylweddoli y bydd rhai upsides yn ogystal. 18 00:00:56,150 --> 00:01:00,620 I baratoi ar gyfer hyn, ar gyfer y nifer enfawr o fyfyrwyr, 19 00:01:00,620 --> 00:01:03,820 digon yw dweud bod hyd yn oed er mae gennym 108 o TFS a MD, 20 00:01:03,820 --> 00:01:07,560 nid yw'n eithaf y gorau myfyriwr-athro ar ôl i ni gyrraedd 80,000 y myfyrwyr. 21 00:01:07,560 --> 00:01:09,830 Nid ydym yn mynd i gael ei graddio problem cymaint yn gosod â llaw, 22 00:01:09,830 --> 00:01:13,050 Bydd cyflwyno hyd yr wythnos hon yn y set broblem fod CS50 Gwirio, 23 00:01:13,050 --> 00:01:15,410 sydd yn mynd i fod yn cyfleustodau gorchymyn-lein o fewn yr offer 24 00:01:15,410 --> 00:01:17,880 y byddwch yn ei gael unwaith y byddwch yn ei ddiweddaru yn nes ymlaen y penwythnos hwn. 25 00:01:17,880 --> 00:01:21,030 Byddwch yn gallu rhedeg gorchymyn, check50, ar eich pset hun, 26 00:01:21,030 --> 00:01:24,770 a byddwch yn cael adborth ar unwaith y bydd eich rhaglen yn gywir neu'n anghywir 27 00:01:24,770 --> 00:01:27,980 yn unol â manylebau dylunio amrywiol yr ydym wedi darparu. 28 00:01:27,980 --> 00:01:30,310 Mwy o wybodaeth am hynny yn y set problem fanyleb. 29 00:01:30,310 --> 00:01:34,220 Bydd y cyd-ddisgyblion CS50x yn defnyddio hyn yn ogystal. 30 00:01:34,220 --> 00:01:36,170 >> 4 Set Problem yn ymwneud fforensig, 31 00:01:36,170 --> 00:01:38,630 ac mae hyn yn pset ei ysbrydoli mewn gwirionedd gan rai pethau go iawn 32 00:01:38,630 --> 00:01:41,210 lle pan oeddwn yn yr ysgol i raddedigion I chaethiwo am gyfnod 33 00:01:41,210 --> 00:01:45,270 gyda swyddfa Middlesex Sir Dosbarth Twrnai gwneud gwaith fforensig 34 00:01:45,270 --> 00:01:47,660 gyda'u prif ymchwilydd fforensig. 35 00:01:47,660 --> 00:01:50,280 Beth mae hyn yn gyfystyr â, fel y credaf imi grybwyll ychydig wythnosau diwethaf, 36 00:01:50,280 --> 00:01:52,720 yn cael ei byddai'r Heddlu Offeren y Wladwriaeth neu eraill ddod i mewn, 37 00:01:52,720 --> 00:01:56,150 byddent yn gollwng pethau fel 'n anawdd drives a CDs a disgiau llipa ac yn y blaen, 38 00:01:56,150 --> 00:01:58,770 ac yna y nod y swyddfa fforensig oedd canfod 39 00:01:58,770 --> 00:02:01,470 a oedd neu nad oedd tystiolaeth o ryw fath. 40 00:02:01,470 --> 00:02:04,730 Roedd hyn yn yr Uned Ymchwiliadau Arbennig, felly roedd yn wyn-coler drosedd. 41 00:02:04,730 --> 00:02:10,949 Roedd yn fath mwy trafferthus o droseddau, unrhyw beth sy'n ymwneud rhyw fath o gyfryngau digidol. 42 00:02:10,949 --> 00:02:16,450 Mae'n troi allan nad bod llawer o bobl ysgrifennu e-bost yn dweud, "Yr wyf yn gwneud hynny." 43 00:02:16,450 --> 00:02:20,490 Felly, yn eithaf aml, nid yw hyn chwiliadau fforensig yn troi i fyny bob un sy'n ffrwyth lawer, 44 00:02:20,490 --> 00:02:22,820 ond weithiau byddai pobl yn ysgrifennu negeseuon e-bost o'r fath. 45 00:02:22,820 --> 00:02:25,240 Felly, weithiau, yr ymdrechion yn cael eu gwobrwyo. 46 00:02:25,240 --> 00:02:31,210 >> Ond i arwain i fyny at y pset fforensig, byddwn yn cyflwyno mewn pset4 ychydig o graffeg. 47 00:02:31,210 --> 00:02:35,410 Mae'n debyg y byddwch yn cymryd y pethau hyn yn ganiataol - JPEG, GIFs, ac ati - y dyddiau hyn. 48 00:02:35,410 --> 00:02:38,320 Ond os ydych yn wir yn meddwl am y peth, delwedd, yn debyg iawn Rob wyneb, 49 00:02:38,320 --> 00:02:41,270 gellid ei modelu fel cyfres o ddotiau neu picsel. 50 00:02:41,270 --> 00:02:43,380 Yn achos Rob wyneb, mae pob math o liwiau, 51 00:02:43,380 --> 00:02:46,760 ac rydym yn dechrau gweld y dotiau unigol, a elwir fel arall yn picsel, 52 00:02:46,760 --> 00:02:48,610 unwaith y byddwn wedi dechrau i chwyddo i mewn 53 00:02:48,610 --> 00:02:54,660 Ond os ydym yn symleiddio'r byd dipyn a dim ond dweud bod hyn yma yw Rob mewn du a gwyn, 54 00:02:54,660 --> 00:02:57,490 i gynrychioli du a gwyn, gallwn jyst arfer deuaidd. 55 00:02:57,490 --> 00:03:01,660 Ac os ydym yn mynd i ddefnyddio ddeuaidd, 1 neu 0, gallwn fynegi y ddelwedd hon yr un 56 00:03:01,660 --> 00:03:06,140 o Rob wyneb yn gwenu â'r patrwm o ddarnau. 57 00:03:06,140 --> 00:03:12,100 11000011 cynrychioli gwyn, gwyn, du, du, du, du, gwyn, gwyn. 58 00:03:12,100 --> 00:03:16,150 Ac felly nid yw'n naid enfawr yna i ddechrau siarad am ffotograffau lliwgar, 59 00:03:16,150 --> 00:03:18,600 pethau y byddech yn gweld ar Facebook neu gymryd gyda chamera digidol. 60 00:03:18,600 --> 00:03:21,410 Ond yn sicr pan ddaw i liwiau, mae angen mwy o ddarnau. 61 00:03:21,410 --> 00:03:25,690 Ac yn eithaf cyffredin yn y byd o luniau yw defnyddio na 1-did lliw, 62 00:03:25,690 --> 00:03:29,560 gan fod hyn yn awgrymu, ond 24-bit lliw, lle rydych mewn gwirionedd yn cael miliynau o liwiau. 63 00:03:29,560 --> 00:03:32,250 Felly, fel yn yr achos pan fyddwn yn chwyddo i mewn ar Rob yn llygad, 64 00:03:32,250 --> 00:03:36,370 a oedd unrhyw nifer o filiynau o bosibiliadau lliwgar gwahanol. 65 00:03:36,370 --> 00:03:39,040 Felly, byddwn yn cyflwyno hyn mewn 4 Set Problem yn ogystal ag yn y walkthrough, 66 00:03:39,040 --> 00:03:43,370 a fydd yn heddiw am 3:30 yn hytrach na'r 2:30 arferol oherwydd ddydd Gwener ddarlith yma. 67 00:03:43,370 --> 00:03:46,620 Ond bydd fideo ar-lein fel arfer yfory. 68 00:03:46,620 --> 00:03:48,820 >> Byddwn hefyd yn eich cyflwyno i un arall fformat ffeil. 69 00:03:48,820 --> 00:03:51,270 Mae hyn yn golygu fwriadol i edrych frawychus ar y dechrau, 70 00:03:51,270 --> 00:03:55,670 ond mae hyn yn dim ond rhai dogfennau ar gyfer strwythur C. 71 00:03:55,670 --> 00:03:58,940 Mae'n troi allan bod blynyddoedd yn ôl, Microsoft helpu i boblogeiddio'r y fformat hwn 72 00:03:58,940 --> 00:04:05,150 a elwir yn y fformat ffeil bitmap, bmp, ac roedd hyn yn super syml, fformat ffeil graffigol lliwgar 73 00:04:05,150 --> 00:04:10,150 a ddefnyddiwyd ers peth amser ac weithiau hyd ar gyfer papur wal ar gyfrifiaduron. 74 00:04:10,150 --> 00:04:14,760 Os ydych yn meddwl yn ôl at Ffenestri XP a bryniau tonnog a'r awyr las, 75 00:04:14,760 --> 00:04:17,170 a oedd yn nodweddiadol ddelwedd BMP neu didfap. 76 00:04:17,170 --> 00:04:19,959 Bitmaps yn hwyl i ni oherwydd bod ganddynt cymhlethdod ychydig yn fwy. 77 00:04:19,959 --> 00:04:22,610 Dyw hi ddim mor syml â hyn grid o 0au ac 1. 78 00:04:22,610 --> 00:04:27,510 Yn lle hynny, mae gennych bethau fel pennawd ar ddechrau'r ffeil. 79 00:04:27,510 --> 00:04:31,990 Felly, mewn geiriau eraill, y tu mewn a. Ffeil BMP yn criw cyfan o 0au ac 1, 80 00:04:31,990 --> 00:04:34,910 ond mae rhywfaint o 0au ychwanegol ac 1 mewn 'na. 81 00:04:34,910 --> 00:04:38,220 Ac mae'n troi allan bod yr hyn yr ydym wedi cymryd yn ôl pob tebyg yn ganiataol ers blynyddoedd - 82 00:04:38,220 --> 00:04:45,170 fformatau ffeil fel. doc neu. xls neu. mp3,. mp4, beth bynnag y fformatau ffeil 83 00:04:45,170 --> 00:04:48,480 eich bod yn gyfarwydd â nhw - beth mae'n ei hyd yn oed yn ei olygu i fod yn fformat ffeil, 84 00:04:48,480 --> 00:04:52,480 oherwydd ar ddiwedd y dydd pob un o'r ffeiliau hyn yr ydym yn defnyddio yr union 0s a 1s. 85 00:04:52,480 --> 00:04:56,810 Ac efallai y rhai 0s a 1s cynrychioli ABC drwy ASCII neu yn y blaen, 86 00:04:56,810 --> 00:04:58,820 ond ar ddiwedd y dydd, mae'n dal i fod dim ond 0s a 1s. 87 00:04:58,820 --> 00:05:02,100 Felly, dim ond pobl o bryd i'w gilydd yn penderfynu i ddyfeisio fformat ffeil newydd 88 00:05:02,100 --> 00:05:06,420 lle maent yn safoni'r hyn y bydd patrymau o ddarnau olygu mewn gwirionedd. 89 00:05:06,420 --> 00:05:09,220 Ac yn yr achos hwn yma, mae'r Folks a gynlluniodd y fformat ffeil bitmap 90 00:05:09,220 --> 00:05:15,620 Dywedodd bod ar y beit cyntaf mewn ffeil bitmap, a nodir fel gan 0 gwrthbwyso yno, 91 00:05:15,620 --> 00:05:18,940 mae mynd i fod yn rhai a enwir yn gryptig bfType a elwir yn amrywiol, 92 00:05:18,940 --> 00:05:23,080 a dim ond yn sefyll ar gyfer y math ffeil bitmap, pa fath o ffeil bitmap yw hwn. 93 00:05:23,080 --> 00:05:27,700 Gallwch gasglu efallai o'r ail reng erbyn y troedbrint carbon 2, rhif 2 beit, 94 00:05:27,700 --> 00:05:33,740 Mae patrwm o 0s a 1s sy'n cynrychioli beth? Mae maint o rywbeth. 95 00:05:33,740 --> 00:05:35,310 Ac mae'n mynd ymlaen o'r fan honno. 96 00:05:35,310 --> 00:05:37,410 Felly, mewn 4 Set Problem, byddwch yn cerdded drwy rai o'r pethau hyn. 97 00:05:37,410 --> 00:05:39,520 Ni fyddwn yn y pen draw gofalu am bob un ohonynt. 98 00:05:39,520 --> 00:05:47,510 Ond sylwi ei fod yn dechrau cael diddorol o amgylch beit 54: rgbtBlue, Green, a Red. 99 00:05:47,510 --> 00:05:52,110 Os ydych chi wedi clywed erioed y acronym RGB - coch, gwyrdd, glas - mae hon yn gyfeiriad at yr 100 00:05:52,110 --> 00:05:54,610 oherwydd ei fod yn troi allan gallwch paent holl liwiau'r enfys 101 00:05:54,610 --> 00:05:58,180 gyda rhyw gyfuniad o goch a glas a gwyrdd. 102 00:05:58,180 --> 00:06:03,320 Ac yn wir, gallai rhieni yn yr ystafell yn cofio rhai o'r taflunyddion cynharaf. 103 00:06:03,320 --> 00:06:05,890 Y dyddiau hyn, 'ch jyst yn gweld un golau llachar yn dod allan o lens, 104 00:06:05,890 --> 00:06:09,800 ond yn ôl yn y diwrnod y byddwch yn cael y lens coch, glas y lens, lens a gwyrdd, 105 00:06:09,800 --> 00:06:13,380 a gyda'i gilydd maent wedi'u hanelu at sgrîn a ffurfio darlun lliwgar. 106 00:06:13,380 --> 00:06:16,270 Ac yn aml iawn, byddai ysgolion canol ac ysgolion uwchradd gael y lensys 107 00:06:16,270 --> 00:06:19,720 erioed felly ychydig Askew, er mwyn i chi yn fath o weld delweddau dwbl neu driphlyg. 108 00:06:19,720 --> 00:06:24,100 Ond dyna oedd y syniad. Cawsoch golau coch a gwyrdd a glas peintio llun. 109 00:06:24,100 --> 00:06:26,590 A dyna un egwyddor yn cael ei ddefnyddio mewn cyfrifiaduron. 110 00:06:26,590 --> 00:06:30,230 >> Felly ymhlith yr heriau yna i chi mewn Problem Set 4 yn mynd i fod ychydig o bethau. 111 00:06:30,230 --> 00:06:34,800 Un yw mewn gwirionedd yn newid maint delwedd, eu cymryd mewn patrwm o 0au ac 1, 112 00:06:34,800 --> 00:06:40,200 chyfrif i maes a darnau o 0s a 1s cynrychioli'r hyn mewn strwythur fel hyn, 113 00:06:40,200 --> 00:06:43,630 ac yna chyfrif i maes sut i ailadrodd y pixels - y wiwer goch, y blues, y lawntiau - 114 00:06:43,630 --> 00:06:46,660 y tu mewn fel bod pan fydd llun yn edrych fel hyn i ddechrau, 115 00:06:46,660 --> 00:06:49,210 gallai fod yn edrych fel hyn yn lle ar ôl hynny. 116 00:06:49,210 --> 00:06:53,640 Ymhlith yr heriau eraill hefyd yn mynd i fod y byddwch yn rhoi delwedd fforensig 117 00:06:53,640 --> 00:06:56,030 o ffeil go iawn o gamera digidol. 118 00:06:56,030 --> 00:06:58,960 Ac ar y camera, ar un adeg, roedd criw cyfan o luniau. 119 00:06:58,960 --> 00:07:03,760 Y broblem yw byddwn, trwy ddamwain ddileu neu a oedd y ddelwedd llygredig rhywsut. 120 00:07:03,760 --> 00:07:05,750 Pethau drwg yn digwydd gyda chamerâu digidol. 121 00:07:05,750 --> 00:07:09,150 Ac felly rydym yn copïo yn gyflym holl oddi 0s a 1s y cerdyn i chi, 122 00:07:09,150 --> 00:07:13,610 arbed nhw i gyd mewn un ffeil fawr, ac yna byddwn yn eu llaw i chi yn Problem Set 4 123 00:07:13,610 --> 00:07:19,320 fel y gallwch ysgrifennu rhaglen yn C y mae adennill y cyfan o'r rhai JPEG, yn ddelfrydol. 124 00:07:19,320 --> 00:07:23,330 Ac mae'n troi allan y JPEG, er eu bod yn dipyn o fformat ffeil cymhleth - 125 00:07:23,330 --> 00:07:26,360 maent yn llawer mwy cymhleth na hyn wyneb yn gwenu yma - 126 00:07:26,360 --> 00:07:31,160 mae'n troi allan bod pob JPEG yn dechrau gyda'r un patrymau o 0au ac 1. 127 00:07:31,160 --> 00:07:35,630 Felly defnyddio, yn y pen draw, mae dolen gyfnod, neu ar gyfer dolen neu debyg, 128 00:07:35,630 --> 00:07:38,880 gallwch ailadrodd dros yr holl 0au ac 1 yn y ddelwedd hon fforensig, 129 00:07:38,880 --> 00:07:43,150 a phob tro y byddwch yn gweld y patrwm arbennig sy'n ei ddiffinio yn y set problem fanyleb, 130 00:07:43,150 --> 00:07:47,880 gallwch gymryd yn ganiataol yma, gyda thebygolrwydd uchel iawn, dechrau a JPEG. 131 00:07:47,880 --> 00:07:51,230 A chyn gynted ag y byddwch yn dod o hyd i'r un patrwm ryw nifer o bytes 132 00:07:51,230 --> 00:07:55,430 neu kilobytes neu megabeit yn ddiweddarach, gallwch gymryd yn ganiataol yma yn JPEG ail, 133 00:07:55,430 --> 00:07:57,380 y llun yr wyf yn cymryd ar ôl yr un cyntaf. 134 00:07:57,380 --> 00:08:01,370 Gadewch i mi roi'r gorau i ddarllen y ffeil gyntaf, yn dechrau ysgrifennu hyn un newydd, 135 00:08:01,370 --> 00:08:06,310 ac allbwn eich rhaglen ar gyfer pset4 yn mynd i fod cymaint â 50 o JPEG. 136 00:08:06,310 --> 00:08:09,270 Ac os nad yw'n 50 JPEG, mae gennych dipyn o ddolen. 137 00:08:09,270 --> 00:08:12,490 Os oes gennych nifer anfeidrol o JPEG, mae gennych dolen ddiddiwedd. 138 00:08:12,490 --> 00:08:14,910 Felly y bydd hefyd yn dipyn o achos cyffredin. 139 00:08:14,910 --> 00:08:16,600 Felly, dyna beth sydd ar y gorwel. 140 00:08:16,600 --> 00:08:21,310 >> Cwis 0 tu ôl i ni, yn sylweddoli y fy e-bost yn ddieithriad, mae Folks sydd yn ddau yn hapus, 141 00:08:21,310 --> 00:08:23,640 math o niwtral, ac yn drist o gwmpas cwis 0 amser. 142 00:08:23,640 --> 00:08:26,800 Ac os gwelwch yn dda yn cyrraedd allan i mi, y pennaeth TF Zamyla, eich TF eich hun, 143 00:08:26,800 --> 00:08:31,180 neu un y MD eich bod yn gwybod os hoffech drafod sut mae pethau'n mynd. 144 00:08:31,180 --> 00:08:35,539 >> Felly, i greu argraff ar y rhieni yma yn yr ystafell, beth yw'r llyfrgell CS50? 145 00:08:36,429 --> 00:08:40,390 [Chwerthin] swyddi da. 146 00:08:40,390 --> 00:08:48,340 Beth yw'r llyfrgell CS50? Yeah. >> [Myfyrwyr] Mae'n set cyn-ysgrifenedig o god [Anghlywadwy] 147 00:08:48,340 --> 00:08:49,750 Iawn, yn dda. 148 00:08:49,750 --> 00:08:53,240 Mae'n set cyn-ysgrifenedig o god ein bod yn y staff ysgrifennodd, rydym yn darparu i chi, 149 00:08:53,240 --> 00:08:55,030 sy'n rhoi rhywfaint o functionality cyffredin, 150 00:08:55,030 --> 00:08:59,020 pethau fel mynd i mi llinyn, mynd i mi yn int - mae pob un o'r swyddogaethau sy'n cael eu rhestru yma. 151 00:08:59,020 --> 00:09:02,260 >> Dechrau nawr, rydym yn dechrau i wir yn cymryd y olwynion hyfforddiant i ffwrdd. 152 00:09:02,260 --> 00:09:05,050 Rydym yn mynd i ddechrau i fynd i ffwrdd llinyn oddi wrthych, 153 00:09:05,050 --> 00:09:08,870 sy'n galw i gof yn unig oedd yn gyfystyr am ba fath data gwirioneddol? >> [Fyfyrwyr lluosog] Torgoch *. 154 00:09:08,870 --> 00:09:12,730 * Torgoch. I rieni, a oedd yn ôl pob tebyg [yn gwneud sain whooshing]. Mae hynny'n dda. 155 00:09:12,730 --> 00:09:17,550 * Char byddwn yn dechrau ei weld ar y sgrin yn fwy wrth i ni dynnu llinyn o'n geirfa, 156 00:09:17,550 --> 00:09:19,730 o leiaf pan ddaw i mewn gwirionedd yn ysgrifennu cod. 157 00:09:19,730 --> 00:09:22,840 Yn yr un modd, byddwn yn rhoi'r gorau i ddefnyddio rhai o'r swyddogaethau hyn gymaint 158 00:09:22,840 --> 00:09:25,280 oherwydd bod ein rhaglenni yn mynd i gael mwy soffistigedig. 159 00:09:25,280 --> 00:09:28,480 Yn hytrach na dim ond ysgrifennu rhaglenni sy'n eistedd yno gyda amrantu brydlon, 160 00:09:28,480 --> 00:09:31,870 aros ar gyfer y defnyddiwr i deipio rhywbeth i mewn, byddwch yn cael eich mewnbwn o fannau eraill. 161 00:09:31,870 --> 00:09:35,490 Er enghraifft, byddwch yn eu cael gan gyfres o ddarnau ar y disg caled lleol. 162 00:09:35,490 --> 00:09:38,580 Byddwch yn lle hynny eu cael yn y dyfodol o gysylltiad rhwydwaith, 163 00:09:38,580 --> 00:09:40,230 rhywfaint o wefan rhywle. 164 00:09:40,230 --> 00:09:44,110 >> Felly, gadewch i ni croen hwn yn ôl haen am y tro cyntaf a thynnu i fyny 'r Offer CS50 165 00:09:44,110 --> 00:09:49,010 ac mae hyn yn ffeil o'r enw cs50.h, yr ydych wedi bod yn #, gan gynnwys am wythnosau, 166 00:09:49,010 --> 00:09:51,140 ond gadewch i ni mewn gwirionedd weld beth sydd y tu mewn o hyn. 167 00:09:51,140 --> 00:09:54,430 Mae pen uchaf y ffeil mewn glas yn unig yw criw cyfan o sylwadau: 168 00:09:54,430 --> 00:09:57,050 gwybodaeth warant a thrwyddedu. 169 00:09:57,050 --> 00:09:59,050 Mae hwn yn fath o batrwm cyffredin mewn meddalwedd 170 00:09:59,050 --> 00:10:01,580 oherwydd bod llawer o feddalwedd y dyddiau hyn yw hyn a elwir ffynhonnell agored, 171 00:10:01,580 --> 00:10:05,220 sy'n golygu bod rhywun wedi ysgrifennu y cod ac yn ei gwneud yn ar gael am ddim 172 00:10:05,220 --> 00:10:10,470 nid yn unig i redeg ac i ddefnyddio ond mewn gwirionedd yn darllen a newid ac integreiddio i mewn i'ch gwaith eich hun. 173 00:10:10,470 --> 00:10:14,660 Felly dyna beth rydych wedi bod yn defnyddio, meddalwedd ffynhonnell agored, er mewn ffurf fach iawn. 174 00:10:14,660 --> 00:10:18,560 Os byddaf yn sgroliwch i lawr heibio i'r sylwadau, fodd bynnag, byddwn yn dechrau gweld rhai pethau yn fwy cyfarwydd. 175 00:10:18,560 --> 00:10:25,010 Rhybudd ar y brig yma bod y ffeil cs50.h yn cynnwys criw cyfan o ffeiliau header. 176 00:10:25,010 --> 00:10:28,560 Mae'r rhan fwyaf o'r rhain, nid ydym wedi gweld o'r blaen, ond mae un yn gyfarwydd. 177 00:10:28,560 --> 00:10:32,270 Pa un o'r rhain yr ydym wedi gweld, er yn fyr, hyd yn hyn? >> [Myfyrwyr] llyfrgell Safonol. 178 00:10:32,270 --> 00:10:35,810 Yeah, llyfrgell safonol. stdlib.h wedi malloc. 179 00:10:35,810 --> 00:10:38,320 Ar ôl i ni ddechrau siarad am ddyrannu cof deinamig, 180 00:10:38,320 --> 00:10:41,650 y byddwn yn dod yn ôl i wythnos nesaf yn ogystal, rydym yn dechrau cynnwys y ffeil. 181 00:10:41,650 --> 00:10:46,640 Mae'n troi allan nad bool ac yn wir a gau mewn gwirionedd yn bodoli yn C per se 182 00:10:46,640 --> 00:10:49,440 oni bai eich bod yn cynnwys y ffeil yma. 183 00:10:49,440 --> 00:10:52,710 Rydym wedi bod yn am wythnosau, gan gynnwys stdbool.h 184 00:10:52,710 --> 00:10:55,620 fel y gallwch ddefnyddio'r syniad o a. bool, gwir neu anwir 185 00:10:55,620 --> 00:10:58,620 Heb hyn, byddai'n rhaid i chi ddatrys o ffug a'i ddefnyddio yn int 186 00:10:58,620 --> 00:11:02,610 a dim ond fympwyol cymryd yn ganiataol bod 0 yn ffug ac 1 yn wir. 187 00:11:02,610 --> 00:11:07,150 Os byddwn yn sgrolio i lawr ymhellach, dyma yw ein diffiniad o linyn. 188 00:11:07,150 --> 00:11:11,390 Mae'n troi allan, fel yr ydym wedi dweud o'r blaen, nad yw lle mae'r seren yn oes llawer o bwys. 189 00:11:11,390 --> 00:11:13,720 Gallwch hyd yn oed o le o amgylch. 190 00:11:13,720 --> 00:11:16,740 Rydym semester hwn wedi bod yn hyrwyddo fel hyn i wneud yn glir 191 00:11:16,740 --> 00:11:18,620 bod y seren wedi ei wneud gyda math, 192 00:11:18,620 --> 00:11:21,700 ond yn sylweddoli yr un mor gyffredin, os nad ychydig yn fwy cyffredin, 193 00:11:21,700 --> 00:11:24,430 yw rhoi yno, ond swyddogaethol 'i' yr un peth. 194 00:11:24,430 --> 00:11:27,720 Ond yn awr os ydym yn darllen i lawr ymhellach, gadewch i ni edrych ar GetInt 195 00:11:27,720 --> 00:11:32,190 oherwydd ydym yn defnyddio hynny efallai yn gyntaf cyn unrhyw beth arall y semester. 196 00:11:32,190 --> 00:11:37,440 Dyma GetInt. Dyma beth? >> [Myfyrwyr] Mae prototeip. >> Mae hyn yn unig yw prototeip. 197 00:11:37,440 --> 00:11:41,410 Yn aml, rydym wedi rhoi prototeipiau ar gopaon ein. Ffeiliau c, 198 00:11:41,410 --> 00:11:46,690 ond gallwch hefyd roi prototeipiau mewn ffeiliau pennawd,. ffeiliau h, fel yr un yma yma 199 00:11:46,690 --> 00:11:50,840 felly pan fyddwch yn ysgrifennu rhai swyddogaethau yr ydych am i bobl eraill i fod yn gallu defnyddio, 200 00:11:50,840 --> 00:11:53,550 sydd yn union yn wir am y llyfrgell CS50, 201 00:11:53,550 --> 00:11:57,040 chi nid yn unig yn gweithredu eich swyddogaethau mewn rhywbeth fel cs50.c, 202 00:11:57,040 --> 00:12:02,790 byddwch hefyd yn rhoi'r prototeipiau nid ar frig y ffeil, ond ar ben ffeil header. 203 00:12:02,790 --> 00:12:07,170 Yna y ffeil pennawd yn yr hyn y ffrindiau a chydweithwyr yn cynnwys 204 00:12:07,170 --> 00:12:09,760 gyda # gynnwys yn eu cod eu hunain. 205 00:12:09,760 --> 00:12:12,210 Felly, yr holl amser hwn, rydych wedi bod yn cynnwys pob un o'r prototeipiau, 206 00:12:12,210 --> 00:12:16,580 effeithiol ar frig eich ffeil ond drwy hyn yn cynnwys mecanwaith #, 207 00:12:16,580 --> 00:12:20,070 sydd yn eu hanfod gopïau a pastau y ffeil i mewn eich pen eich hun. 208 00:12:20,070 --> 00:12:23,070 Dyma rhai dogfennau eithaf manwl. 209 00:12:23,070 --> 00:12:25,640 Rydym wedi 'n bert lawer gymryd yn ganiataol bod GetInt cael yn int, 210 00:12:25,640 --> 00:12:27,640 ond mae'n troi allan bod rhai achosion cornel. 211 00:12:27,640 --> 00:12:31,810 Beth os yw'r defnyddiwr mathau mewn nifer sy'n ffordd rhy fawr, a quintillion, 212 00:12:31,810 --> 00:12:35,490 na all dim ond ffitio y tu o int? Beth yw yr ymddygiad a ddisgwylir? 213 00:12:35,490 --> 00:12:38,020 Yn ddelfrydol, mae'n rhagweladwy. 214 00:12:38,020 --> 00:12:40,280 Felly, yn yr achos hwn, os ydych mewn gwirionedd yn darllen y print mân, 215 00:12:40,280 --> 00:12:44,500 byddwch mewn gwirionedd yn gweld bod os na all y llinell gael ei ddarllen, ffurflenni INT_MAX hyn. 216 00:12:44,500 --> 00:12:48,320 Nid ydym erioed wedi siarad am hyn, ond yn seiliedig ar ei gyfalafu, beth yw mae'n debyg y? 217 00:12:48,320 --> 00:12:50,640 [Myfyrwyr] Mae gyson. >> Mae'n gyson. 218 00:12:50,640 --> 00:12:54,770 Mae'n rhywfaint o gyson arbennig sydd wedi datgan yn ôl pob tebyg yn un o'r rhai ffeiliau pennawd 219 00:12:54,770 --> 00:13:00,090 sy'n uwch i fyny yn y ffeil, ac INT_MAX yn ôl pob tebyg rhywbeth fel tua 2 biliwn, 220 00:13:00,090 --> 00:13:04,990 y syniad yw am fod angen i ni rywsut yn arwyddo fod rhywbeth wedi mynd o'i le, 221 00:13:04,990 --> 00:13:10,700 yr ydym ni, ie, yn cael 4000000000 niferoedd yn ein gwaredu: -2 biliwn ar hyd at 2 biliwn, rhoi neu gymryd. 222 00:13:10,700 --> 00:13:14,710 Wel, yr hyn sy'n gyffredin mewn rhaglenni yw i chi ddwyn dim ond un o'r niferoedd hynny, 223 00:13:14,710 --> 00:13:18,920 efallai 0, efallai 2 biliwn, efallai -2000000000, 224 00:13:18,920 --> 00:13:23,280 felly byddwch yn treulio un o'ch gwerthoedd posib fel y gallwch ymrwymo i'r byd 225 00:13:23,280 --> 00:13:26,820 os bydd rhywbeth yn mynd o'i le, byddaf yn dychwelyd y gwerth mawr super. 226 00:13:26,820 --> 00:13:31,030 Ond nid ydych am i'r defnyddiwr deipio rhywbeth cryptig fel 234 ..., mae nifer fawr iawn. 227 00:13:31,030 --> 00:13:34,060 Byddwch yn cyffredinoli yn lle fel gyson. 228 00:13:34,060 --> 00:13:38,060 Felly mewn gwirionedd, os ydych yn cael rhefrol yr wythnosau diwethaf, unrhyw tro y byddwch yn galw GetInt, 229 00:13:38,060 --> 00:13:42,900 dylech fod wedi bod yn gwirio gyda os yw cyflwr y gwnaeth y math o ddefnyddiwr yn INT_MAX, 230 00:13:42,900 --> 00:13:46,590 neu, yn fwy penodol, gwnaeth INT_MAX dychwelyd GetInt, oherwydd os oedd, 231 00:13:46,590 --> 00:13:51,830 sydd mewn gwirionedd yn golygu nad oeddent yn ei deipio. Aeth rhywbeth o'i le yn yr achos hwn. 232 00:13:51,830 --> 00:13:56,080 Felly, mae hyn yn beth a elwir yn gyffredinol fel, gwerth sentinel a dim ond yn golygu arbennig. 233 00:13:56,080 --> 00:13:58,120 >> Gadewch i ni nawr yn troi i mewn i'r. Ffeil c. 234 00:13:58,120 --> 00:14:01,340 Mae'r ffeil C wedi bodoli yn y peiriant am beth amser. 235 00:14:01,340 --> 00:14:06,840 Ac yn wir, yr offer wedi ei cyn-llunio i chi i mewn i'r peth byddem ni'n ei alw cod gwrthrych, 236 00:14:06,840 --> 00:14:09,540 ond nid yn unig yn bwysig i chi lle mae'n oherwydd bod y system yn gwybod 237 00:14:09,540 --> 00:14:11,730 yn yr achos hwn: os yw'r ddyfais. 238 00:14:11,730 --> 00:14:17,400 Gadewch i ni sgroliwch i lawr yn awr i GetInt a gweld sut mae GetInt wedi bod yn gweithio i gyd y tro hwn. 239 00:14:17,400 --> 00:14:19,460 Yma, mae gennym sylwadau tebyg o'r blaen. 240 00:14:19,460 --> 00:14:21,660 Gadewch i mi chwyddo i mewn ar ddim ond y rhan cod. 241 00:14:21,660 --> 00:14:23,900 A beth sydd gennym ar gyfer GetInt yw'r canlynol. 242 00:14:23,900 --> 00:14:25,700 Mae'n cymryd unrhyw fewnbwn. 243 00:14:25,700 --> 00:14:29,510 Mae'n dychwelyd yn int, tra (yn wir), felly mae gennym dolen ddiddiwedd bwriadol, 244 00:14:29,510 --> 00:14:33,180 ond yn ôl pob tebyg byddwn dorri allan o hyn rywsut neu ddychwelyd o fewn hyn. 245 00:14:33,180 --> 00:14:34,870 >> Gadewch i ni weld sut mae hyn yn gweithio. 246 00:14:34,870 --> 00:14:39,240 Rydym yn ymddangos i fod yn defnyddio GetString yn y llinell gyntaf y tu mewn i'r ddolen, 166. 247 00:14:39,240 --> 00:14:43,780 Mae hwn yn arfer da oherwydd y gallai o dan ba amgylchiadau GetString dychwelyd 248 00:14:43,780 --> 00:14:47,660 y NULL keyword arbennig? >> [Myfyrwyr] Os bydd rhywbeth yn mynd o'i le. 249 00:14:47,660 --> 00:14:51,630 Os oes rhywbeth yn mynd o'i le. A beth allai fynd o'i le pan fyddwch yn ffonio rhywbeth fel GetString? 250 00:14:54,960 --> 00:14:57,640 Yeah. >> [Myfyrwyr] Malloc yn methu i roi y ints. 251 00:14:57,640 --> 00:14:59,150 Yeah. Efallai malloc yn methu. 252 00:14:59,150 --> 00:15:03,190 Rhywle o dan y cwfl, GetString yn galw malloc, sy'n dyrannu cof, 253 00:15:03,190 --> 00:15:06,020 sy'n gadael y siop cyfrifiadur pob un o'r cymeriadau 254 00:15:06,020 --> 00:15:07,750 bod y defnyddiwr mathau i mewn i'r bysellfwrdd. 255 00:15:07,750 --> 00:15:11,590 Ac mae'n debyg y defnyddiwr yn cael llawer gyfan o amser rhydd ac yn teipio mwy, er enghraifft, 256 00:15:11,590 --> 00:15:16,160 na 2 biliwn o gymeriadau mewn, cymeriadau yn fwy nag y cyfrifiadur hyd yn oed wedi RAM. 257 00:15:16,160 --> 00:15:19,250 GetString fod yn gallu i ddangos bod i chi. 258 00:15:19,250 --> 00:15:22,560 Hyd yn oed os yw hyn yn super, achos gornel anghyffredin super, 259 00:15:22,560 --> 00:15:24,340 mae'n rhaid iddo rywsut yn gallu trin hwn, 260 00:15:24,340 --> 00:15:28,750 ac felly GetString, os ydym yn mynd yn ôl a darllen ei dogfennau, ei wneud yn NULL dychwelyd gwirionedd. 261 00:15:28,750 --> 00:15:34,460 Felly, nawr os GetString yn methu drwy ddychwelyd NULL, GetInt yn mynd i fethu drwy ddychwelyd INT_MAX 262 00:15:34,460 --> 00:15:37,690 yn union fel sentinel. Yn unig yw'r rhain confensiynau dynol. 263 00:15:37,690 --> 00:15:41,450 Yr unig ffordd y byddech yn gwybod hyn yn wir yw drwy ddarllen y ddogfennaeth. 264 00:15:41,450 --> 00:15:45,040 >> Gadewch i ni sgroliwch i lawr at ble mae'r int yn cael ei gotten mewn gwirionedd. 265 00:15:45,040 --> 00:15:51,160 Os byddaf yn sgroliwch i lawr ychydig ymhellach, yn unol 170, mae gennym sylw uchod y llinellau hyn. 266 00:15:51,160 --> 00:15:55,100 Yr ydym yn datgan mewn 172 yn int, n, a golosg, c, ac yna roedd y swyddogaeth newydd, 267 00:15:55,100 --> 00:15:58,930 y mae rhai ohonoch wedi baglu ar draws o'r blaen, sscanf. 268 00:15:58,930 --> 00:16:00,870 Mae hyn yn sefyll am scanf llinyn. 269 00:16:00,870 --> 00:16:05,700 Mewn geiriau eraill, yn rhoi i mi llinyn a byddaf yn ei sganio ar gyfer darnau o wybodaeth o ddiddordeb. 270 00:16:05,700 --> 00:16:07,360 Beth mae hynny'n ei olygu? 271 00:16:07,360 --> 00:16:11,800 Gadewch i ni dybio fy mod yn teipio i mewn, yn llythrennol, 123 ar y bysellfwrdd ac yna pwyswch Enter. 272 00:16:11,800 --> 00:16:16,470 Beth yw'r math data o 123 pan ddychwelodd gan GetString? >> [Myfyrwyr] String. 273 00:16:16,470 --> 00:16:18,380 Mae'n amlwg yn llinyn, dde? Ges i linyn. 274 00:16:18,380 --> 00:16:23,220 Felly 123 yn wir, dyfynnwch-unquote, 123 gyda 0 \ ar y diwedd. 275 00:16:23,220 --> 00:16:27,110 Nid yw hynny'n int. Dyw hynny ddim yn rhif. Mae'n edrych fel nifer, ond nid yw'n mewn gwirionedd. 276 00:16:27,110 --> 00:16:29,080 Felly beth mae GetInt rhaid iddynt ei wneud? 277 00:16:29,080 --> 00:16:35,750 Mae'n rhaid iddo sganio y llinyn chwith i'r dde - 123 \ 0 - a rhywsut trosi i gyfanrif gwirioneddol. 278 00:16:35,750 --> 00:16:37,850 Gallech chyfrif i maes sut i wneud hyn. 279 00:16:37,850 --> 00:16:41,450 Os ydych yn meddwl yn ôl i pset2, rydych yn ôl pob tebyg yn cael ychydig yn gyfforddus gyda Cesar 280 00:16:41,450 --> 00:16:44,820 neu Vigenere, fel y gallwch ailadrodd dros llinyn, gallwch droi chars i ints. 281 00:16:44,820 --> 00:16:46,710 Ond Heck, mae'n llawer gyfan o waith. 282 00:16:46,710 --> 00:16:49,860 Pam na wnewch chi alw swyddogaeth fel sscanf sy'n gwneud hynny ar eich cyfer chi? 283 00:16:49,860 --> 00:16:54,230 Felly sscanf yn disgwyl dadl - yn yr achos hwn a elwir yn llinell, sy'n llinyn. 284 00:16:54,230 --> 00:17:01,840 Yna byddwch yn nodi mewn dyfyniadau, yn debyg iawn i printf, yr hyn yr ydych yn disgwyl ei weld yn y llinyn. 285 00:17:01,840 --> 00:17:09,000 A hyn yr wyf i'n ei ddweud yma yw fy mod yn disgwyl gweld nifer degol ac efallai gymeriad. 286 00:17:09,000 --> 00:17:12,000 A byddwn yn gweld pam fod hyn yn wir mewn dim ond hyn o bryd. 287 00:17:12,000 --> 00:17:15,869 Ac mae'n troi allan bod y nodiant bellach yn atgoffa rhywun o bethau i ni ddechrau siarad am 288 00:17:15,869 --> 00:17:17,619 ychydig dros wythnos yn ôl. 289 00:17:17,619 --> 00:17:21,740 Beth yw & n a & c yn ei wneud i ni yma? >> [Myfyrwyr] Cyfeiriad y n a chyfeiriad c. 290 00:17:21,740 --> 00:17:25,400 Yeah. Mae'n rhoi i mi y cyfeiriad n a chyfeiriad c. Pam mor bwysig â hynny? 291 00:17:25,400 --> 00:17:30,220 Rydych yn gwybod bod â swyddogaethau yn C, gallwch chi bob amser yn dychwelyd gwerth neu ddim gwerth o gwbl. 292 00:17:30,220 --> 00:17:34,530 Gallwch ddychwelyd yn int, llinyn, yn arnofio, golosg, beth bynnag, neu gallwch ddychwelyd ddi-rym, 293 00:17:34,530 --> 00:17:38,030 ond gallwch ddychwelyd un peth mwyaf posibl. 294 00:17:38,030 --> 00:17:42,760 Ond yma rydym am sscanf i ddychwelyd i mi efallai yn int, rhif degol, 295 00:17:42,760 --> 00:17:46,220 a hefyd a. golosg, a byddaf yn esbonio pam y mae'r torgoch yn y man 296 00:17:46,220 --> 00:17:51,460 Rydych yn effeithiol am sscanf i ddychwelyd dau beth, ond nad dim ond yn bosibl C. 297 00:17:51,460 --> 00:17:55,200 Gallwch weithio o gwmpas hynny drwy basio mewn dau gyfeiriad 298 00:17:55,200 --> 00:17:57,370 oherwydd cyn gynted ag y byddwch yn llaw swyddogaeth dau gyfeiriad, 299 00:17:57,370 --> 00:18:00,470 beth all swyddogaeth honno wneud â nhw? >> [Myfyrwyr] Ysgrifennwch at y rhai cyfeiriadau. 300 00:18:00,470 --> 00:18:02,010 Gall ysgrifennu at y rhai cyfeiriadau. 301 00:18:02,010 --> 00:18:05,770 Gallwch ddefnyddio'r gweithrediad seren ac yn mynd yno, i bob un o'r cyfeiriadau hynny. 302 00:18:05,770 --> 00:18:11,260 Mae'n fath o mecanwaith hwn drwy'r drws cefn ond yn gyffredin ar gyfer newid y gwerthoedd o newidynnau 303 00:18:11,260 --> 00:18:14,870 mwy na dim ond un lle - yn yr achos hwn, mae dau. 304 00:18:14,870 --> 00:18:21,340 Nawr sylwi Rwy'n chwilio am == 1 ac yna dychwelyd n os nad yw hynny'n, mewn gwirionedd, gwerthuso er mwyn wir. 305 00:18:21,340 --> 00:18:26,170 Felly beth sy'n mynd ymlaen? Yn dechnegol, y cyfan rydym wir eisiau i ddigwydd yn GetInt yw hyn. 306 00:18:26,170 --> 00:18:30,740 Rydym yn awyddus i gramadegu, fel petai, rydym yn awyddus i ddarllen y llinyn - dyfyniad-unquote 123 - 307 00:18:30,740 --> 00:18:34,560 ac os yw'n edrych fel mae nifer yno, beth rydym yn dweud wrth sscanf i wneud 308 00:18:34,560 --> 00:18:38,190 yn cael ei roi y rhif hwnnw - 123 - yn yr amrywiol n i mi. 309 00:18:38,190 --> 00:18:42,090 Felly pam fod yna wnes i mewn gwirionedd yn cael hyn hefyd? 310 00:18:42,090 --> 00:18:48,220 Beth yw rôl sscanf yn dweud efallai y byddwch hefyd yn cael gymeriad yma? 311 00:18:48,220 --> 00:18:53,470 [Ymateb y myfyrwyr Anghlywadwy] >> A pwynt degol gallai gweithio mewn gwirionedd. 312 00:18:53,470 --> 00:18:56,330 Gadewch i ni dal y meddwl am funud. Beth arall? 313 00:18:56,330 --> 00:18:59,270 [Myfyrwyr] Gallai fod yn null. >> Meddwl da. Gallai fod yn null y cymeriad. 314 00:18:59,270 --> 00:19:01,660 Nid yw'n mewn gwirionedd yn yr achos hwn. Yeah. >> [Myfyrwyr] ASCII. 315 00:19:01,660 --> 00:19:04,340 ASCII. Neu gadewch i mi cyffredinoli hyd yn oed ymhellach. 316 00:19:04,340 --> 00:19:06,640 Mae'r c% yn unig sydd am wirio camgymeriadau. 317 00:19:06,640 --> 00:19:09,300 Nid ydym am yno i fod yn gymeriad ar ôl y rhif, 318 00:19:09,300 --> 00:19:11,870 ond beth mae hyn yn caniatáu i mi ei wneud yw y canlynol. 319 00:19:11,870 --> 00:19:18,210 Mae'n troi allan y sscanf, ar wahân i storio gwerthoedd yn n ac c yn yr enghraifft hon yma, 320 00:19:18,210 --> 00:19:24,890 yr hyn y mae hefyd yn ei wneud yw ei fod yn dychwelyd y nifer o newidynnau yn rhoi gwerthoedd mewn 321 00:19:24,890 --> 00:19:30,260 Felly, os ydych ond yn teipio yn 123, yna dim ond y% d yn mynd i gyd-fynd, 322 00:19:30,260 --> 00:19:33,880 a dim ond yn cael ei storio n â gwerth tebyg i 123, 323 00:19:33,880 --> 00:19:35,640 ac nid oes dim yn cael ei rhoi yn c. 324 00:19:35,640 --> 00:19:37,620 C parhau i fod yn werth garbage, fel petai - 325 00:19:37,620 --> 00:19:40,730 garbage oherwydd nid yw byth yn wedi'i ymgychwyn i ryw werth. 326 00:19:40,730 --> 00:19:45,520 Felly, yn yr achos hwnnw, sscanf yn dychwelyd 1 oherwydd fy mod phoblogaeth 1 o hynny awgrymiadau, 327 00:19:45,520 --> 00:19:50,190 ac yn yr achos mawr, mae gennyf int felly rwy'n rhyddhau'r llinell i ryddhau cof 328 00:19:50,190 --> 00:19:54,000 bod GetString a ddyrennir mewn gwirionedd, ac yna dof yn ôl n, 329 00:19:54,000 --> 00:19:58,500 arall os ydych chi erioed wedi meddwl o ble y Ceisio eto datganiad yn dod, mae'n dod o'r dde yma. 330 00:19:58,500 --> 00:20:04,390 Felly, os, ar y llaw arall, yr wyf deipio i mewn 123foo - dim ond rhai dilyniant ar hap o destun - 331 00:20:04,390 --> 00:20:08,490 sscanf yn mynd i weld nifer, rhif, rhif, f, 332 00:20:08,490 --> 00:20:16,410 ac mae'n mynd i roi'r 123 yn n; mae'n mynd i roi'r f yn c ac yna dychwelyd 2. 333 00:20:16,410 --> 00:20:20,640 Felly mae gennym, dim ond yn defnyddio'r diffiniad sylfaenol o sscanf ymddygiad, ffordd syml iawn - 334 00:20:20,640 --> 00:20:23,900 dda, yn gymhleth ar yr olwg gyntaf, ond ar ddiwedd y dydd mecanwaith eithaf syml - 335 00:20:23,900 --> 00:20:28,320 o ddweud a oes int ac os felly, yw mai'r unig beth i mi gael? 336 00:20:28,320 --> 00:20:29,860 Ac y gofod yma yn fwriadol. 337 00:20:29,860 --> 00:20:34,000 Os ydych yn darllen y dogfennau ar gyfer sscanf, mae'n dweud wrthych os ydych yn cynnwys darn o whitespace 338 00:20:34,000 --> 00:20:38,810 ar ddechrau neu ddiwedd, sscanf bydd hefyd yn caniatáu i'r defnyddiwr, am ba bynnag reswm, 339 00:20:38,810 --> 00:20:41,860 i daro 123 bar gofod, a bydd hynny'n gyfreithlon. 340 00:20:41,860 --> 00:20:44,150 Ni fyddwch yn gweiddi ar y defnyddiwr yn unig oherwydd eu bod yn cyrraedd y bar gofod 341 00:20:44,150 --> 00:20:48,640 ar ddechrau neu ar y diwedd, a dim ond ychydig yn fwy defnyddiwr-gyfeillgar. 342 00:20:48,640 --> 00:20:52,300 >> Unrhyw gwestiynau yna ar GetInt? Yeah. >> [Myfyrwyr] Beth os ydych yn unig rhoi mewn golosg? 343 00:20:52,300 --> 00:20:54,030 Da cwestiwn. 344 00:20:54,030 --> 00:20:59,890 Beth os ydych yn teipio yn unig mewn golosg fel f a daro Enter heb erioed teipio 123? 345 00:20:59,890 --> 00:21:02,420 Beth ydych chi'n credu y byddai ymddygiad y llinell o god wedyn? 346 00:21:02,420 --> 00:21:04,730 [Ymateb y myfyrwyr Anghlywadwy] 347 00:21:04,730 --> 00:21:08,790 Yeah, fel y gall sscanf cynnwys hynny hefyd oherwydd yn yr achos hwnnw, nid yw'n mynd i lenwi'r n neu c. 348 00:21:08,790 --> 00:21:15,310 Mae'n mynd i yn hytrach dychwelyd 0, ac yn yr achos Rwyf hefyd yn dal y senario 349 00:21:15,310 --> 00:21:18,750 oherwydd bod y gwerth disgwyliedig rwyf eisiau yw 1. 350 00:21:18,750 --> 00:21:22,000 Dim ond am un a dim ond un peth sydd i'w llenwi. Da cwestiwn. 351 00:21:22,000 --> 00:21:24,290 >> Eraill? Mae pob hawl. 352 00:21:24,290 --> 00:21:26,250 >> Nid Gadewch i ni fynd drwy bob un o'r swyddogaethau yn y fan hon, 353 00:21:26,250 --> 00:21:29,500 ond yr un sy'n ymddangos i fod yn efallai o ddiddordeb sy'n weddill yn GetString 354 00:21:29,500 --> 00:21:32,790 oherwydd ei fod yn troi allan y GetFloat, GetInt, GetDouble, GetLongLong 355 00:21:32,790 --> 00:21:36,260 pob punt llawer o'u swyddogaeth i GetString. 356 00:21:36,260 --> 00:21:39,750 Felly, gadewch i ni edrych ar sut y mae'n gweithredu yma. 357 00:21:39,750 --> 00:21:43,630 Mae hyn yn un yn edrych braidd yn gymhleth, ond mae'n defnyddio'r hanfodion un 358 00:21:43,630 --> 00:21:45,670 ein bod yn dechrau siarad amdano yr wythnos diwethaf. 359 00:21:45,670 --> 00:21:49,490 Yn GetString, heb gymryd unrhyw ddadl yn unol â'r wag hyd yma 360 00:21:49,490 --> 00:21:53,730 ac yn dychwelyd llinyn, yr wyf debyg mod yn datgan llinyn o'r enw byffer. 361 00:21:53,730 --> 00:21:56,270 Dwi ddim yn gwybod beth sy'n mynd i gael ei ddefnyddio ar gyfer eto, ond gawn ni weld. 362 00:21:56,270 --> 00:21:58,390 Mae'n edrych fel gallu yn ddiofyn 0. 363 00:21:58,390 --> 00:22:01,350 Ddim yn hollol siwr lle nad yw hyn yn mynd, yn sicr beth n yn mynd i gael ei ddefnyddio ar gyfer hyd yn hyn, 364 00:22:01,350 --> 00:22:03,590 ond erbyn hyn mae'n mynd ychydig yn fwy diddorol. 365 00:22:03,590 --> 00:22:06,520 Yn unol 243, rydym yn datgan int, c. 366 00:22:06,520 --> 00:22:08,800 Mae hyn yn fath o fanylion dwp. 367 00:22:08,800 --> 00:22:15,820 Mae torgoch yn 8 darnau, a gall 8 did storio faint o werthoedd gwahanol? >> [Myfyrwyr] 256. >> 256. 368 00:22:15,820 --> 00:22:20,730 Y broblem yw os ydych am gael 256 o gymeriadau ASCII gwahanol, y mae 369 00:22:20,730 --> 00:22:23,340 os ydych yn meddwl yn ôl - ac nid yw hyn yn rhywbeth i'w gofio. 370 00:22:23,340 --> 00:22:25,710 Ond os ydych yn meddwl yn ôl at y siart ASCII mawr cawsom wythnosau yn ôl, 371 00:22:25,710 --> 00:22:30,600 oedd yn yr achos hwnnw 128 neu 256 o gymeriadau ASCII. 372 00:22:30,600 --> 00:22:32,940 Rydym yn defnyddio'r holl batrymau o hyd 0s a 1s. 373 00:22:32,940 --> 00:22:36,210 Dyna broblem os ydych am fod yn gallu canfod gwall 374 00:22:36,210 --> 00:22:40,190 oherwydd os ydych chi eisoes yn defnyddio 256 gwerthoedd ar gyfer eich cymeriadau, 375 00:22:40,190 --> 00:22:43,050 nad ydych ddim yn cynllunio ymlaen llaw oherwydd erbyn hyn nad oes gennych unrhyw ffordd o ddweud, 376 00:22:43,050 --> 00:22:46,270 nid yw hyn yn gymeriad legit, mae hyn yn rhywfaint o neges anghywir. 377 00:22:46,270 --> 00:22:50,270 Felly, beth yn y byd yn ei wneud yn eu bod yn defnyddio'r gwerth mwyaf nesaf, rhywbeth fel int, 378 00:22:50,270 --> 00:22:54,720 fel bod gennych nifer crazy o ddarnau, 32, ar gyfer 4000000000 gwerthoedd posib 379 00:22:54,720 --> 00:22:58,860 fel y gallwch yn syml yn y pen draw gan ddefnyddio bôn 257 o ohonynt, 380 00:22:58,860 --> 00:23:01,720 1 ohonynt ryw ystyr arbennig fel gwall. 381 00:23:01,720 --> 00:23:03,120 >> Felly, gadewch i ni weld sut mae hyn yn gweithio. 382 00:23:03,120 --> 00:23:07,760 Yn unol 246, rwyf wedi hyn dolen tra mawr, yn galw fgetc, 383 00:23:07,760 --> 00:23:11,090 f, ffeil ystyr felly getc, ac yna stdin. 384 00:23:11,090 --> 00:23:15,520 Mae'n troi allan yn unig yw hyn ffordd fwy manwl gywir o ddweud darllen mewnbwn gan y bysellfwrdd. 385 00:23:15,520 --> 00:23:19,300 Mewnbwn bysellfwrdd safonol modd, allbwn safonol yn golygu sgrin, 386 00:23:19,300 --> 00:23:23,310 a gwallau safonol, y byddwn yn ei weld yn pset4, yn golygu y sgrîn 387 00:23:23,310 --> 00:23:27,490 ond mae rhan arbennig o'r sgrin fel nad yw'n conflated gydag allbwn gwirioneddol 388 00:23:27,490 --> 00:23:30,750 eich bod yn bwriadu argraffu. Ond mwy am hynny yn y dyfodol. 389 00:23:30,750 --> 00:23:34,440 Felly fgetc yn unig yn golygu darllen un cymeriad o'r bysellfwrdd ac yn ei storio ble? 390 00:23:34,440 --> 00:23:37,350 Ei storio mewn c. 391 00:23:37,350 --> 00:23:41,360 Ac yna gwirio - felly Im 'jyst yn defnyddio rhai cysyllteiriau Boolean yma - 392 00:23:41,360 --> 00:23:46,000 gwirio nad yw'n gyfartal - \ n, felly mae'r defnyddiwr wedi taro Mewnbynnu, rydym am roi'r gorau ar y pwynt hwnnw, 393 00:23:46,000 --> 00:23:49,850 ddiwedd y ddolen - ac rydym hefyd yn awyddus i chwilio am EOF cyson arbennig, 394 00:23:49,850 --> 00:23:53,610 ac os ydych yn gwybod neu'n dyfalu, yr hyn mae'n ei sefyll am? >> [Myfyrwyr] Diwedd y ffeil. Diwedd >> o ffeil. 395 00:23:53,610 --> 00:23:56,560 Mae hyn yn fath o synnwyr oherwydd os wyf i'n teipio ar y bysellfwrdd, 396 00:23:56,560 --> 00:23:58,870 nid 'n sylweddol na ffeil yn rhan o hyn, 397 00:23:58,870 --> 00:24:01,150 ond mae hyn yn unig yw datrys y term cyffredinol a ddefnyddir i olygu 398 00:24:01,150 --> 00:24:04,220 nad oes unrhyw beth arall sy'n dod o fysedd y dynol. 399 00:24:04,220 --> 00:24:06,460 EOF - ddiwedd y ffeil. 400 00:24:06,460 --> 00:24:09,920 Fel o'r neilltu, nid os ydych wedi taro erioed Rheoli D yn eich bysellfwrdd, y byddai gennych eto - 401 00:24:09,920 --> 00:24:15,230 eich bod wedi taro Rheoli C - Rheoli D anfon y cyson arbennig o'r enw EOF. 402 00:24:15,230 --> 00:24:19,850 Felly, nawr rydym yn unig wedi rhywfaint o ddyraniad cof deinamig. 403 00:24:19,850 --> 00:24:23,440 >> Felly, os (n + 1> gallu). Nawr 'n annhymerus' esbonio n. 404 00:24:23,440 --> 00:24:26,100 N yn unig yw faint o bytes ar hyn o bryd yn y byffer, 405 00:24:26,100 --> 00:24:28,620 y llinyn eich bod wrthi'n adeiladu i fyny gan y defnyddiwr. 406 00:24:28,620 --> 00:24:33,450 Os oes gennych cymeriadau mwy yn eich byffer nag oes gennych y galluedd yn y byffer, 407 00:24:33,450 --> 00:24:37,410 reddfol beth sydd angen i ei wneud wedyn yw dyrannu mwy o allu. 408 00:24:37,410 --> 00:24:43,330 Felly, yr wyf i'n mynd i sgimio dros rai o'r rhifyddeg yma ac yn canolbwyntio yn unig ar y swyddogaeth yma. 409 00:24:43,330 --> 00:24:46,070 Rydych yn gwybod beth malloc yn neu o leiaf yn gyffredinol cyfarwydd. 410 00:24:46,070 --> 00:24:48,970 Cymerwch dyfalu pa realloc yn ei wneud. >> [Myfyrwyr] Yn ychwanegu cof. 411 00:24:48,970 --> 00:24:52,920 Dyw hi ddim yn hollol ychwanegu cof. Mae'n ailddyrannu cof fel a ganlyn. 412 00:24:52,920 --> 00:24:57,220 Os oes dal i fod yn ystafell ar ddiwedd y llinyn i roi mwy o hynny cof 413 00:24:57,220 --> 00:25:00,000 nag yn wreiddiol yn rhoi i chi, yna byddwch yn cael bod y cof ychwanegol. 414 00:25:00,000 --> 00:25:03,460 Felly, gallwch chi jyst cadw rhoi cymeriadau y llinyn yn gefn wrth gefn wrth gefn wrth gefn. 415 00:25:03,460 --> 00:25:05,830 Ond os nad yw hynny'n wir oherwydd eich bod yn aros yn rhy hir 416 00:25:05,830 --> 00:25:07,940 a rhywbeth ar hap got plopped er cof yno 417 00:25:07,940 --> 00:25:10,290 ond mae cof ychwanegol i lawr yma, mae hynny'n iawn. 418 00:25:10,290 --> 00:25:13,100 Realloc yn mynd i wneud yr holl codi pethau trwm i chi, 419 00:25:13,100 --> 00:25:16,750 symud y llinyn ydych wedi darllen yn hyd yn hyn oddi yma, rhowch ef i lawr yno, 420 00:25:16,750 --> 00:25:19,460 ac yna rhoi rhedfa rhai yn fwy ar yr adeg honno. 421 00:25:19,460 --> 00:25:22,550 >> Felly, gyda ton y llaw, gadewch i mi ddweud bod yr hyn GetString yn ei wneud 422 00:25:22,550 --> 00:25:26,330 yn cael ei mae'n cychwyn gyda byffer bach, efallai un cymeriad unigol, 423 00:25:26,330 --> 00:25:30,820 ac os bydd y defnyddiwr mathau yn ddau gymeriad, GetString dod i ben i fyny galw realloc ac yn dweud 424 00:25:30,820 --> 00:25:33,150 Nid yw un cymeriad yn ddigon: dyro i mi ddau gymeriad. 425 00:25:33,150 --> 00:25:35,950 Yna, os ydych yn darllen drwy resymeg y ddolen, mae'n mynd i ddweud 426 00:25:35,950 --> 00:25:39,600 y defnyddiwr deipio mewn 3 cymeriadau: dyro i mi yn awr nid 2 ond 4 nod, 427 00:25:39,600 --> 00:25:42,320 Yna, yn rhoi i mi 8, yna rhowch i mi 16 a 32. 428 00:25:42,320 --> 00:25:45,000 Mae'r ffaith fy mod i'n gallu dyblu bob tro 429 00:25:45,000 --> 00:25:48,570 yn golygu nad yw'r byffer yn mynd i dyfu yn araf, mae'n mynd i dyfu'n gyflym super. 430 00:25:48,570 --> 00:25:51,380 A hyn a allai fod yn fanteisiol o ran hynny? 431 00:25:51,380 --> 00:25:54,600 Pam ydw i'n dyblu maint y byffer 432 00:25:54,600 --> 00:25:58,020 er y gallai y defnyddiwr, ond mae angen un cymeriad ychwanegol oddi wrth y bysellfwrdd? 433 00:25:58,020 --> 00:26:01,750 [Ymateb y myfyrwyr Anghlywadwy] >> Beth sy'n bod? >> [Myfyrwyr] Nid oes rhaid i dyfu mor aml. 434 00:26:01,750 --> 00:26:03,300 Yn union. Nid oes rhaid i chi dyfu mor aml. 435 00:26:03,300 --> 00:26:05,510 Ac mae hyn yn unig fath o gwrych eich bod yn eich betiau yma, 436 00:26:05,510 --> 00:26:10,850 y syniad yw nad ydych ddim eisiau eu galw realloc llawer oherwydd ei fod yn tueddu i fod yn araf. 437 00:26:10,850 --> 00:26:12,910 Unrhyw bryd y byddwch yn gofyn y system weithredu ar gyfer cof, 438 00:26:12,910 --> 00:26:16,990 fel y byddwch yn fuan yn gweld mewn set problemau yn y dyfodol, mae'n tueddu i gymryd peth amser. 439 00:26:16,990 --> 00:26:20,010 Felly lleihau'r swm hwnnw o amser, hyd yn oed os ydych yn gwastraffu ychydig o le, 440 00:26:20,010 --> 00:26:21,900 tueddu i fod yn beth da. 441 00:26:21,900 --> 00:26:24,060 >> Ond os ydym yn darllen drwy'r rhan olaf GetString yma - 442 00:26:24,060 --> 00:26:27,950 ac nid eto yn deall pob llinell sengl yma mor bwysig heddiw - 443 00:26:27,950 --> 00:26:30,530 sylwi ei fod yn y pen draw yn galw malloc eto 444 00:26:30,530 --> 00:26:33,880 ac mae'n dyrannu yn union fel bytes llawer ag y mae angen ar gyfer y llinyn 445 00:26:33,880 --> 00:26:38,060 ac yna yn taflu i ffwrdd drwy ffonio rhad ac am ddim y byffer rhy fawr 446 00:26:38,060 --> 00:26:40,080 os yw'n wir got dyblu gormod o weithiau. 447 00:26:40,080 --> 00:26:42,730 Felly, yn fyr, dyna sut GetString wedi bod yn gweithio i gyd y tro hwn. 448 00:26:42,730 --> 00:26:47,060 Mae'r holl mae'n ei wneud yw darllen un cymeriad ar y tro unwaith eto ac eto ac eto, 449 00:26:47,060 --> 00:26:50,750 a bob tro y bydd angen peth cof ychwanegol, mae'n gofyn y system weithredu ar ei gyfer 450 00:26:50,750 --> 00:26:53,670 drwy ffonio realloc. 451 00:26:53,670 --> 00:26:57,890 >> Unrhyw gwestiynau? Mae pob hawl. 452 00:26:57,890 --> 00:26:59,270 >> Mae ymosodiad. 453 00:26:59,270 --> 00:27:04,060 Nawr ein bod yn deall awgrymiadau neu o leiaf yn fwyfwy cyfarwydd â awgrymiadau, 454 00:27:04,060 --> 00:27:06,700 gadewch i ni ystyried sut y byd i gyd yn dechrau cwympo 455 00:27:06,700 --> 00:27:10,030 os nad ydych yn llwyr yn amddiffyn yn erbyn defnyddwyr gwrthwynebus, 456 00:27:10,030 --> 00:27:11,850 pobl sy'n ceisio hacio i mewn i'ch system, 457 00:27:11,850 --> 00:27:16,890 pobl sy'n ceisio dwyn eich meddalwedd drwy circumventing rhai cod cofrestru 458 00:27:16,890 --> 00:27:19,090 y gallent fel arall yn gorfod deipio i mewn 459 00:27:19,090 --> 00:27:22,990 >> Cymerwch olwg ar yr enghraifft hon yma, sydd ychydig C cod sydd â phrif swyddogaeth ar y gwaelod 460 00:27:22,990 --> 00:27:26,380 sy'n galw a foo swyddogaeth. A beth mae'n mynd heibio i foo? 461 00:27:26,380 --> 00:27:29,680 [Myfyrwyr] Dadl sengl. >> [Malan] Dadl sengl. 462 00:27:29,680 --> 00:27:33,450 Felly argv [1], sy'n golygu bod y gair cyntaf fod y defnyddiwr deipio ar y llinell orchymyn 463 00:27:33,450 --> 00:27:36,360 ar ôl a.out neu beth bynnag y rhaglen yn cael ei alw. 464 00:27:36,360 --> 00:27:41,680 Felly foo ar y brig yn cymryd mewn * torgoch. Ond * torgoch yn unig yw hyn? >> [Myfyrwyr] Mae llinyn. 465 00:27:41,680 --> 00:27:43,350 [Malan] A llinyn, felly does dim byd newydd yma. 466 00:27:43,350 --> 00:27:45,420 Bod llinyn yn fympwyol cael eu galw bar. 467 00:27:45,420 --> 00:27:51,430 Yn y llinell yma, cols c [12]; mewn math o lled-dechnegol Saesneg, beth yw y llinell hon yn ei wneud? 468 00:27:51,430 --> 00:27:55,220 [Myfyrwyr] Mae amrywiaeth o - Array >> o? >> [Myfyrwyr] Cymeriadau. Cymeriadau >>. 469 00:27:55,220 --> 00:27:58,870 Rhowch i mi amrywiaeth o 12 nod. Felly, efallai y byddwn yn galw hyn yn byffer. 470 00:27:58,870 --> 00:28:02,920 Mae'n cael ei alw yn dechnegol c, ond byffer mewn rhaglennu yn unig yn golygu criw o ofod 471 00:28:02,920 --> 00:28:04,800 y gallwch roi rhai pethau mewn 472 00:28:04,800 --> 00:28:07,940 Yna yn olaf, memcpy nid ydym wedi defnyddio o'r blaen, ond mae'n debyg y gallwch ddyfalu beth mae'n ei wneud. 473 00:28:07,940 --> 00:28:10,480 Mae copïau cof. Beth mae'n ei wneud? 474 00:28:10,480 --> 00:28:19,270 Mae'n debyg copïau bar, ei fewnbwn, i mewn i c ond dim ond hyd at hyd y bar. 475 00:28:19,270 --> 00:28:24,930 Ond mae nam yma. >> [Myfyrwyr] Mae angen y cymeriad sizeof. >> Iawn. 476 00:28:24,930 --> 00:28:30,860 Yn dechnegol, dylem ei wneud mewn gwirionedd strlen (bar) * sizeof (torgoch)). Mae hynny'n gywir. 477 00:28:30,860 --> 00:28:33,930 Ond yn yr achos gwaethaf yma, gadewch i ni gymryd yn ganiataol bod that's - 478 00:28:33,930 --> 00:28:35,950 Iawn. Yna mae yna ddau bugs. 479 00:28:35,950 --> 00:28:39,160 Felly sizeof (torgoch)); 480 00:28:39,160 --> 00:28:41,290 Gadewch i ni wneud hyn ychydig yn ehangach. 481 00:28:41,290 --> 00:28:44,910 Felly nawr mae dal i fod yn byg, sef yr hyn? >> [Anghlywadwy ymateb y myfyrwyr] 482 00:28:44,910 --> 00:28:46,990 Edrychwch am yr hyn? >> [Myfyrwyr] Gwirio am NULL. 483 00:28:46,990 --> 00:28:50,270 Dylem fel arfer yn edrych am NULL oherwydd pethau drwg yn digwydd 484 00:28:50,270 --> 00:28:53,200 pan fydd eich pwyntydd yn NULL oherwydd efallai y byddwch yn mynd yno, 485 00:28:53,200 --> 00:28:57,630 ac ni ddylech byth yn mynd i nwl drwy dereferencing â gweithredwr y seren. 486 00:28:57,630 --> 00:29:01,050 Felly, sy'n dda. A beth arall rydym yn ei wneud? Yn rhesymegol, mae nam yma hefyd. 487 00:29:01,050 --> 00:29:04,450 [Myfyrwyr] Edrychwch i weld a yw argc> = i 2. 488 00:29:04,450 --> 00:29:10,550 Felly, os yw gwirio argc yn> = 2. Iawn, felly does 3 bugs yn y rhaglen hon yma. 489 00:29:10,550 --> 00:29:16,630 Rydym yn awr yn gwirio os yw'r defnyddiwr deipio mewn gwirionedd yn unrhyw beth i mewn i argv [1]. Da. 490 00:29:16,630 --> 00:29:20,950 Felly beth yw'r bug trydydd? Yeah. >> [Myfyrwyr] C efallai na fydd yn ddigon mawr. 491 00:29:20,950 --> 00:29:23,320 Da. Rydym yn gwirio un senario. 492 00:29:23,320 --> 00:29:29,520 Rydym yn ymhlyg gwirio peidiwch â chopïo cof byddai mwy na fwy na hyd y bar. 493 00:29:29,520 --> 00:29:32,510 Felly, os yw'r llinyn y defnyddiwr deipio i mewn yn 10 nod o hyd, 494 00:29:32,510 --> 00:29:36,020 mae hyn yn ei ddweud yn unig copïo 10 nod. Ac mae hynny'n iawn. 495 00:29:36,020 --> 00:29:39,940 Ond beth os bydd y defnyddiwr yn teipio gair wrth yr anogwr fel gair 20-gymeriad? 496 00:29:39,940 --> 00:29:44,900 Mae hyn yn ei ddweud copi 20 nod o far i mewn i beth? 497 00:29:44,900 --> 00:29:49,750 C, a elwir fel arall fel ein byffer, sy'n golygu eich bod newydd ei ysgrifennu data 498 00:29:49,750 --> 00:29:52,540 i 8 lleoliad beit nad ydych yn berchen, 499 00:29:52,540 --> 00:29:54,870 ac nad ydych yn berchen arnynt yn yr ystyr nad ydych byth yn ddyrannwyd iddynt. 500 00:29:54,870 --> 00:30:00,370 Felly, mae hyn yn beth a elwir yn gyffredinol fel y gorlif byffer ymosodiad neu ymosodiad gor-redeg byffer. 501 00:30:00,370 --> 00:30:05,580 Ac mae'n ymosodiad yn yr ystyr, os bydd y defnyddiwr neu'r rhaglen sydd wedi galw eich swyddogaeth 502 00:30:05,580 --> 00:30:10,490 Gallai hyn yn ei wneud yn faleisus, beth yn union sy'n digwydd nesaf mewn gwirionedd fod yn eithaf gwael. 503 00:30:10,490 --> 00:30:12,450 >> Felly, gadewch i ni edrych ar y darlun yma. 504 00:30:12,450 --> 00:30:16,060 Mae'r llun hwn yn cynrychioli eich pentwr o cof. 505 00:30:16,060 --> 00:30:19,580 Dwyn i gof bod bob tro y byddwch yn galw swyddogaeth chi gael y ffrâm ychydig ar y simnai 506 00:30:19,580 --> 00:30:21,520 ac wedyn un arall ac wedyn un arall ac un arall. 507 00:30:21,520 --> 00:30:24,300 Ac hyd yn hyn, rydym wedi dim ond math o dynnu rhain fel petryalau 508 00:30:24,300 --> 00:30:26,290 naill ai ar y bwrdd neu ar y sgrin yma. 509 00:30:26,290 --> 00:30:30,580 Ond os ydym yn chwyddo i mewn ar un o'r petryalau, pan fyddwch yn ffonio a foo swyddogaeth, 510 00:30:30,580 --> 00:30:35,880 mae'n troi allan bod mwy ar y tu mewn pentwr y ffrâm yn y petryal 511 00:30:35,880 --> 00:30:40,060 na dim ond x ac y a a a b, fel yr ydym yn siarad am gyfnewid. 512 00:30:40,060 --> 00:30:44,410 Mae'n troi allan fod yna rhai manylion lefel is, yn eu plith Cyfeiriad Dychwelyd. 513 00:30:44,410 --> 00:30:49,550 Felly, mae'n troi allan pan prif galw foo, prif roi gwybod foo 514 00:30:49,550 --> 00:30:53,520 yr hyn y prif cyfeiriad yn gof y cyfrifiadur 515 00:30:53,520 --> 00:30:57,770 oherwydd fel arall, cyn gynted ag y foo yn cael ei wneud cyflawni, fel yn yr achos yma, 516 00:30:57,770 --> 00:31:00,830 ar ôl i chi gyrraedd y Brace cyrliog ar gau ar ddiwedd y foo, 517 00:31:00,830 --> 00:31:05,310 sut y mae'r Heck yn foo gwybod ble i reolaeth y rhaglen i fod i fynd? 518 00:31:05,310 --> 00:31:08,970 Mae'n troi allan bod yr ateb i'r cwestiwn hwnnw sydd yn y petryal coch yma. 519 00:31:08,970 --> 00:31:12,670 Mae hyn yn cynrychioli pwyntydd, a mae i fyny at y cyfrifiadur i storio dros dro 520 00:31:12,670 --> 00:31:17,030 ar y simnai hyn a elwir yn y cyfeiriad prif fel bod cyn gynted ag y foo yn cael ei wneud cyflawni, 521 00:31:17,030 --> 00:31:21,120 y cyfrifiadur yn gwybod ble a pha linell yn y brif fynd yn ôl i. 522 00:31:21,120 --> 00:31:23,940 Pwyntydd Frame Cadwyd yn ymwneud yn yr un modd i hyn. 523 00:31:23,940 --> 00:31:26,310 Bar * Char yma yn cynrychioli beth? 524 00:31:26,310 --> 00:31:31,350 Nawr mae hyn segment glas yma yw foo yn ffrâm. Beth yw bar? 525 00:31:31,570 --> 00:31:35,010 Bar yn unig y ddadl i'r swyddogaeth foo. 526 00:31:35,010 --> 00:31:37,500 Felly, nawr rydym ni'n ôl ar y math o llun cyfarwydd. 527 00:31:37,500 --> 00:31:39,850 Mae mwy o stwff a gwrthdyniadau mwy ar y sgrin, 528 00:31:39,850 --> 00:31:43,380 ond mae hyn yn segment glas golau yn unig yw hyn yr ydym wedi bod yn tynnu ar y bwrdd sialc 529 00:31:43,380 --> 00:31:45,790 ar gyfer rhywbeth fel cyfnewid. Dyna'r ffrâm ar gyfer foo. 530 00:31:45,790 --> 00:31:51,490 A'r unig beth ynddo ar hyn o bryd mae bar, sef y paramedr hwn. 531 00:31:51,490 --> 00:31:55,220 Ond beth arall y dylai fod yn y pentwr yn ôl y cod yma? 532 00:31:55,220 --> 00:31:57,760 [Myfyrwyr] torgoch c [12]. >> [Malan] torgoch c [12]. 533 00:31:57,760 --> 00:32:02,810 Dylem hefyd weld 12 sgwâr o gof a ddyrannwyd i newidyn a elwir yn c, 534 00:32:02,810 --> 00:32:04,970 ac yn wir rydym yn cael hynny ar y sgrin. 535 00:32:04,970 --> 00:32:08,480 Mae'r frig mae c [0], ac yna awdur y diagram 536 00:32:08,480 --> 00:32:11,850 nid oedd yn trafferthu tynnu pob un o'r sgwariau, ond, yn wir, 12 mae 537 00:32:11,850 --> 00:32:16,590 oherwydd os edrychwch ar y dde ar y gwaelod, c [11] os ydych yn cyfrif o 0 yn y beit o'r fath 12fed. 538 00:32:16,590 --> 00:32:18,400 Ond dyma y broblem. 539 00:32:18,400 --> 00:32:22,390 Ym mha cyfarwyddyd c tyfu? 540 00:32:22,390 --> 00:32:27,080 Trefnu o'r brig i lawr os bydd yn dechrau ar y brig ac yn tyfu i'r gwaelod. 541 00:32:27,080 --> 00:32:30,110 Nid yw'n edrych fel ein gadael ni ein hunain rhedfa lawer yma o gwbl. 542 00:32:30,110 --> 00:32:32,090 Rydym wedi math o baentio ein hunain i mewn i gornel, 543 00:32:32,090 --> 00:32:36,940 a bod c [11] yn iawn i fyny yn erbyn bar, sy'n iawn i fyny yn erbyn pwyntydd Frame Saved, 544 00:32:36,940 --> 00:32:39,960 sy'n iawn i fyny yn erbyn Cyfeiriad Dychwelyd. Does dim mwy o le. 545 00:32:39,960 --> 00:32:42,810 Felly beth yw'r goblygiadau, yna os byddwch yn sgriw i fyny 546 00:32:42,810 --> 00:32:46,500 a ydych yn ceisio darllen 20 bytes at fyffer 12-beit? 547 00:32:46,500 --> 00:32:50,060 Ble yw'r rhai a 8 bytes ychwanegol yn mynd i fynd? >> [Myfyrwyr] Y tu mewn - 548 00:32:50,060 --> 00:32:53,200 Y tu mewn popeth arall, rhai ohonynt yn hynod bwysig. 549 00:32:53,200 --> 00:32:57,260 A'r peth mwyaf pwysig, o bosibl, yw'r bocs coch yno, Cyfeiriad Ffurflen Dreth, 550 00:32:57,260 --> 00:33:03,560 oherwydd mae'n debyg eich bod naill ai'n ddamweiniol neu'n adversarially trosysgrifo y 4 bytes, 551 00:33:03,560 --> 00:33:07,260 hynny, cyfeiriad pwyntydd nid yn unig garbage ond gyda nifer 552 00:33:07,260 --> 00:33:09,810 sy'n digwydd i gynrychioli cyfeiriad gwirioneddol mewn cof. 553 00:33:09,810 --> 00:33:13,880 Beth yw'r goblygiadau, yn rhesymegol? >> [Myfyrwyr] Swyddogaeth yn mynd i ddychwelyd i le gwahanol. 554 00:33:13,880 --> 00:33:15,250 Yn union. 555 00:33:15,250 --> 00:33:19,170 Pan fydd ffurflenni foo a hits y cyrliog Brace, mae'r rhaglen yn mynd i symud ymlaen 556 00:33:19,170 --> 00:33:25,060 beidio â dychwelyd i'r brif, mae'n mynd i ddychwelyd i ba bynnag gyfeiriad sydd yn y bocs coch. 557 00:33:25,060 --> 00:33:28,600 >> Yn achos cofrestru meddalwedd trechu, 558 00:33:28,600 --> 00:33:32,260 beth os yw'r cyfeiriad sy'n cael ei ddychwelyd i yw swyddogaeth sydd fel arfer yn cael ei alw 559 00:33:32,260 --> 00:33:35,690 ar ôl i chi wedi talu am y meddalwedd a mewnbynnu eich cod cofrestru? 560 00:33:35,690 --> 00:33:39,870 Gallwch ddatrys y tric y cyfrifiadur i beidio â mynd yma ond yn hytrach yn mynd i fyny yma. 561 00:33:39,870 --> 00:33:45,100 Neu os ydych yn wirioneddol glyfar, gall gwrthwynebwr mewn gwirionedd deipio i mewn ar y bysellfwrdd, er enghraifft, 562 00:33:45,100 --> 00:33:50,690 Nid yw gair go iawn, nid 20 nod, ond mae'n debyg mae ef neu hi mewn gwirionedd fathau o 563 00:33:50,690 --> 00:33:52,770 rhai cymeriadau sy'n cynrychioli cod. 564 00:33:52,770 --> 00:33:55,320 Ac nid yw'n mynd i fod yn C cod, mae'n wir yn mynd i fod yn y cymeriadau 565 00:33:55,320 --> 00:33:59,290 sy'n cynrychioli cod deuaidd beiriant, 0s a 1s. 566 00:33:59,290 --> 00:34:01,290 Ond mae'n debyg eu bod yn ddigon clyfar i wneud hynny, 567 00:34:01,290 --> 00:34:06,500 i rhywsut bastio i mewn i'r rhywbeth brydlon GetString ystyr hynny yw a luniwyd yn ei hanfod, 568 00:34:06,500 --> 00:34:09,980 ac y 4 bytes trosysgrifo y cyfeiriad dychwelyd. 569 00:34:09,980 --> 00:34:13,360 A beth mae hynny'n ei gyfeiriad mewnbwn yn ei wneud? 570 00:34:13,360 --> 00:34:18,630 Mae'n mewn gwirionedd yn storio yn y petryal coch cyfeiriad y beit cyntaf y byffer. 571 00:34:18,630 --> 00:34:23,070 Felly, rhaid i chi fod yn glyfar iawn, ac mae hyn yn llawer o brofi a methu ar gyfer pobl ddrwg i maes 'na, 572 00:34:23,070 --> 00:34:25,639 ond os gallwch chyfrif i maes pa mor fawr y byffer yn 573 00:34:25,639 --> 00:34:28,820 fel bod y bytes diwethaf yn y mewnbwn a roddwch i'r rhaglen 574 00:34:28,820 --> 00:34:33,540 digwydd i fod yn cyfateb i gyfeiriad y dechrau eich byffer, gallwch wneud hyn. 575 00:34:33,540 --> 00:34:39,320 Os ydym yn dweud helo fel arfer a \ 0, dyna beth dod i ben i fyny yn y byffer. 576 00:34:39,320 --> 00:34:44,420 Ond os ydym yn fwy clyfar ac rydym yn llenwi'r byffer â'r hyn y byddwn yn gyffredinol yn galw cod ymosodiad - 577 00:34:44,420 --> 00:34:48,860 AAA, ymosodiad, ymosodiad, ymosodiad - lle mae hyn yn unig yw rhywbeth sy'n gwneud rhywbeth drwg, 578 00:34:48,860 --> 00:34:51,820 beth sy'n digwydd os ydych yn glyfar iawn, efallai y byddwch yn gwneud hyn. 579 00:34:51,820 --> 00:34:58,610 Yn y blwch coch yma yn ddilyniant o rifau - 80, C0, 35, 08. 580 00:34:58,610 --> 00:35:01,610 Sylwch fod hynny yn cyfateb i'r rhif sydd i fyny yma. 581 00:35:01,610 --> 00:35:04,430 Mae'n am yn ôl, ond mwy am hynny rywbryd eto. 582 00:35:04,430 --> 00:35:08,140 Sylwch fod y cyfeiriad dychwelyd wedi ei newid yn fwriadol 583 00:35:08,140 --> 00:35:12,020 yn hafal i gyfeiriad i fyny yma, nid yw'r cyfeiriad prif. 584 00:35:12,020 --> 00:35:17,500 Felly, os y dyn drwg yn super smart, ef neu hi yn mynd i gynnwys yn y cod ymosodiad 585 00:35:17,500 --> 00:35:20,930 rhywbeth fel dileu'r holl ffeiliau y defnyddiwr neu gopïo'r cyfrineiriau 586 00:35:20,930 --> 00:35:24,680 neu greu cyfrif defnyddiwr y gallaf wedyn logio i mewn i - unrhyw beth o gwbl. 587 00:35:24,680 --> 00:35:26,950 >> Ac mae hyn yn y perygl a phŵer C. 588 00:35:26,950 --> 00:35:29,840 Oherwydd eich bod yn cael mynediad i gof trwy awgrymiadau 589 00:35:29,840 --> 00:35:32,520 ac a allwch felly ysgrifennu unrhyw beth rydych am i mewn i gof cyfrifiadur, yn 590 00:35:32,520 --> 00:35:35,080 gallwch wneud cyfrifiadur yn gwneud unrhyw beth yr hoffech 591 00:35:35,080 --> 00:35:39,550 yn syml drwy gael ei neidio o gwmpas o fewn ei le cof ei hun. 592 00:35:39,550 --> 00:35:44,650 Ac felly hyd y dydd hwn raglenni cymaint o wefannau cymaint o sy'n cael eu cyfaddawdu 593 00:35:44,650 --> 00:35:46,200 berwi i lawr i bobl yn cymryd mantais o hyn. 594 00:35:46,200 --> 00:35:50,760 A gallai hyn ymddangos fel ymosodiad soffistigedig super, ond nid yw bob amser yn dechrau y ffordd honno. 595 00:35:50,760 --> 00:35:53,560 Y realiti yw bod yr hyn y bydd pobl ddrwg ei wneud fel rheol yw, 596 00:35:53,560 --> 00:35:58,200 boed yn rhaglen ar llinell orchymyn neu raglen GUI neu wefan, 597 00:35:58,200 --> 00:35:59,940 'ch jyst dechrau darparu nonsens. 598 00:35:59,940 --> 00:36:03,980 Byddwch yn teipio gair mawr iawn yn y blwch chwilio a daro Chofnoda, 599 00:36:03,980 --> 00:36:05,780 ac i chi aros i weld a fydd y wefan yn cael damwain 600 00:36:05,780 --> 00:36:09,990 neu os ydych yn aros i weld os yw'r rhaglen yn amlygu rhywfaint o neges wall 601 00:36:09,990 --> 00:36:14,330 oherwydd os ydych yn cael lwcus fel y dyn drwg a'ch bod yn darparu rhywfaint o fewnbwn crazy 602 00:36:14,330 --> 00:36:18,980 sy'n dyrfau 'r rhaglen, mae hynny'n golygu nad oedd y rhaglennydd yn rhagweld eich ymddygiad gwael, 603 00:36:18,980 --> 00:36:23,630 sy'n golygu y gallwch yn ôl pob tebyg gyda digon o ymdrech, treial a gwallau digon, 604 00:36:23,630 --> 00:36:26,650 chyfrif i maes sut i frwydro yn ymosodiad yn fwy manwl gywir. 605 00:36:26,650 --> 00:36:31,410 Fel nad ydynt yn gymaint rhan o ddiogelwch yn unig yw osgoi ymosodiadau hyn yn gyfan gwbl 606 00:36:31,410 --> 00:36:34,100 ond yn eu canfod ac mewn gwirionedd yn edrych ar logiau 607 00:36:34,100 --> 00:36:36,780 a gweld beth mewnbynnau crazy o bobl teipio i mewn i'ch gwefan, 608 00:36:36,780 --> 00:36:38,960 pa dermau chwilio mae pobl wedi ei deipio i mewn i'ch gwefan 609 00:36:38,960 --> 00:36:42,870 yn y gobaith o gorlifo rhywfaint o byffer. 610 00:36:42,870 --> 00:36:45,500 Ac mae hyn oll yw hanfodion syml o'r hyn sydd arae 611 00:36:45,500 --> 00:36:49,080 a beth mae'n ei olygu i ddyrannu a defnyddio cof. 612 00:36:49,080 --> 00:36:51,710 >> Yn gysylltiedig â hynny, yna hefyd yw hwn. 613 00:36:51,710 --> 00:36:54,280 Gadewch i 'jyst cipolwg tu mewn i' n anawdd cathrena unwaith eto. 614 00:36:54,280 --> 00:36:58,440 Y byddwch yn cofio o wythnos neu ddwy yn ôl, pan fyddwch yn lusgo ffeiliau i'ch recycle bin sbwriel yn gallu neu, 615 00:36:58,440 --> 00:37:03,710 beth sy'n digwydd? >> [Myfyrwyr] Dim byd. >> Dim byd o gwbl, dde? 616 00:37:03,710 --> 00:37:05,740 Yn y pen draw, os ydych yn rhedeg isel ar lle ar y ddisg, 617 00:37:05,740 --> 00:37:08,190 Bydd Windows neu Mac OS dechrau dileu ffeiliau ar eich cyfer chi. 618 00:37:08,190 --> 00:37:10,390 Ond os ydych yn llusgo rhywbeth i mewn 'na, nid yw hynny'n gwbl ddiogel. 619 00:37:10,390 --> 00:37:13,800 Mae pob eich roommate neu ffrind neu aelod o'r teulu wedi ei wneud yw clicio ddwywaith ac, voila, 620 00:37:13,800 --> 00:37:16,310 mae holl ffeiliau bylchog eich bod wedi ceisio dileu. 621 00:37:16,310 --> 00:37:19,590 Mae'r rhan fwyaf ohonom o leiaf yn gwybod bod yn rhaid i chi dde chlecia neu cliciwch Rheoli 622 00:37:19,590 --> 00:37:22,310 ac yn wag y sbwriel neu rywbeth fel 'na. 623 00:37:22,310 --> 00:37:25,000 Ond hyd yn oed wedyn nad yw'n llwyr yn y gamp 624 00:37:25,000 --> 00:37:28,010 oherwydd mae'r hyn sy'n digwydd pan fyddwch yn cael ffeil ar eich disg galed 625 00:37:28,010 --> 00:37:32,770 sy'n cynrychioli ryw ddogfen Word neu ryw JPEG, ac mae hyn yn cynrychioli eich gyriant caled, 626 00:37:32,770 --> 00:37:35,350 a gadewch i ni ddweud y sliver yma yn cynrychioli y ffeil, 627 00:37:35,350 --> 00:37:38,390 ac mae'n cynnwys criw cyfan o 0au ac 1. 628 00:37:38,390 --> 00:37:42,470 Beth sy'n digwydd pan nad ydych ond yn llusgo y ffeil i'r sbwriel yn gallu neu ailgylchu bin 629 00:37:42,470 --> 00:37:48,020 ond hefyd yn wag ei? Trefnu o ddim byd. 630 00:37:48,020 --> 00:37:49,640 Dyw hi ddim dim byd o gwbl yn awr. 631 00:37:49,640 --> 00:37:54,290 Nawr 'i' jyst ddim oherwydd bod rhywbeth bach yn digwydd ar ffurf tabl hwn. 632 00:37:54,290 --> 00:37:58,370 Felly, mae rhyw fath o gronfa ddata neu dabl tu mewn cof cyfrifiadur 633 00:37:58,370 --> 00:38:03,850 sydd yn ei hanfod un golofn ar gyfer ffeiliau 'enwau ac un golofn ar gyfer ffeiliau' lleoliad, 634 00:38:03,850 --> 00:38:07,720 lle y gallai hyn fod yn lleoliad 123, dim ond rhif ar hap. 635 00:38:07,720 --> 00:38:14,560 Felly, efallai y byddwn yn cael rhywbeth fel x.jpeg a lleoliad 123. 636 00:38:14,560 --> 00:38:18,800 Beth sy'n digwydd wedyn pan fyddwch mewn gwirionedd yn gwagio eich sbwriel? 637 00:38:18,800 --> 00:38:20,330 Sy'n mynd i ffwrdd. 638 00:38:20,330 --> 00:38:23,610 Ond yr hyn nad yw'n mynd i ffwrdd yn y 0s a 1s. 639 00:38:23,610 --> 00:38:26,270 >> Felly beth sydd yna bydd y cysylltiad i pset4? 640 00:38:26,270 --> 00:38:31,240 Wel, gyda pset4, dim ond oherwydd ein bod wedi dileu ddamweiniol y cerdyn fflach compact 641 00:38:31,240 --> 00:38:35,750 oedd pob un o'r lluniau neu dim ond oherwydd iddo gan lwc ddrwg yn llygru 642 00:38:35,750 --> 00:38:38,000 nid yw'n golygu nad oedd y 0au ac 1 yn dal i fod yno. 643 00:38:38,000 --> 00:38:40,410 Efallai ychydig ohonynt yn cael eu colli oherwydd bod rhywbeth got llygru 644 00:38:40,410 --> 00:38:43,320 yn yr ystyr bod rhai 0s 1s ddaeth ac 1 yn 0au. 645 00:38:43,320 --> 00:38:47,240 Gall pethau drwg yn digwydd oherwydd meddalwedd bygi neu caledwedd diffygiol. 646 00:38:47,240 --> 00:38:50,370 Ond mae llawer o'r rhai darnau, efallai hyd yn oed 100% ohonynt, yn dal i fod yno. 647 00:38:50,370 --> 00:38:55,050 Dim ond nad yw'r cyfrifiadur neu'r camera yn gwybod ble JPEG1 dechreuodd 648 00:38:55,050 --> 00:38:56,910 a lle JPEG2 cychwyn. 649 00:38:56,910 --> 00:39:01,070 Ond os ydych chi, y rhaglennydd, yn gwybod gydag ychydig o savvy lle mae'r JPEG yn 650 00:39:01,070 --> 00:39:06,010 neu beth maent yn edrych fel hyn y gallwch ddadansoddi y JPEG 0s a 1s a dweud, JPEG, 651 00:39:06,010 --> 00:39:09,440 gallwch ysgrifennu rhaglen gyda bôn dim ond ar gyfer neu tra'n ddolen 652 00:39:09,440 --> 00:39:12,820 sy'n adennill pob un o'r ffeiliau. 653 00:39:12,820 --> 00:39:16,030 Felly y wers yna yn dechrau yn ddiogel dileu eich ffeiliau 654 00:39:16,030 --> 00:39:18,340 os hoffech i osgoi hyn yn gyfan gwbl. Ydw. 655 00:39:18,340 --> 00:39:21,010 >> [Myfyrwyr] Sut dod y mae'n ei ddweud ar eich cyfrifiadur 656 00:39:21,010 --> 00:39:23,550 bod gennych gof mwy nag y gwnaethoch o'r blaen? 657 00:39:23,550 --> 00:39:27,820 Cael mwy o gof nag y gwnaethoch o'r blaen - >> [myfyrwyr] cof Mwy ar gael. 658 00:39:27,820 --> 00:39:29,630 Oh. Da cwestiwn. 659 00:39:29,630 --> 00:39:32,360 Felly pam wedyn ar ôl gwagio'r sbwriel y mae eich cyfrifiadur yn dweud wrthych 660 00:39:32,360 --> 00:39:34,910 bod gennych fwy o le rhydd nag y gwnaethoch o'r blaen? 661 00:39:34,910 --> 00:39:36,770 Yn gryno, oherwydd ei fod yn gorwedd. 662 00:39:36,770 --> 00:39:40,740 Mwy dechnegol, oes gennych fwy o le oherwydd yn awr yr ydych wedi dweud 663 00:39:40,740 --> 00:39:43,680 gallwch roi pethau eraill lle y ffeil ar un adeg. 664 00:39:43,680 --> 00:39:45,450 Ond nid yw hynny'n golygu y darnau yn mynd i ffwrdd, 665 00:39:45,450 --> 00:39:48,590 ac nid yw hynny'n golygu y darnau yn cael eu newid i bob 0s, er enghraifft, 666 00:39:48,590 --> 00:39:50,150 er eich lles. 667 00:39:50,150 --> 00:39:54,640 Felly, ar y llaw arall, os ydych yn ddiogel dileu ffeiliau neu gorfforol dinistrio y ddyfais, 668 00:39:54,640 --> 00:39:57,300 sydd wir yw'r unig ffordd weithiau o gwmpas hynny. 669 00:39:57,300 --> 00:40:02,020 >> Felly pam nad ydym yn gadael ar y nodyn lled-frawychus, a byddwn yn eich gweld ar ddydd Llun. 670 00:40:02,020 --> 00:40:07,000 [Cymeradwyaeth] 671 00:40:07,780 --> 00:40:10,000 >> [CS50.TV]