[Powered by Google Translate] [Wythnos 5] [David J. Malan - Harvard University] [Mae hyn yn CS50. - CS50.TV] Mae hyn yn CS50, Wythnos 5. Heddiw, a'r wythnos hon, byddwn yn cyflwyno ychydig o fyd fforensig yng nghyd-destun y Broblem Set 4. Heddiw, bydd yn ddarlith gryno oherwydd bod digwyddiad arbennig yma wedyn. Felly, byddwn yn cymryd cip a canfod myfyrwyr a rhieni fel ei gilydd heddiw gyda rhai o'r pethau sydd ar y gorwel. Yn eu plith, o ddydd Llun, bydd gennych gyd-ddisgyblion ychydig mwy. EDX, Harvard a MIT menter newydd ar-lein ar gyfer OpenCourseWare a mwy, yn lansio ar gampws Harvard ddydd Llun, sy'n golygu dod Dydd Llun Bydd gennych chi, fel y cyfrif diwethaf, 86,000 cyd-ddisgyblion ychwanegol a fydd yn dilyn, ynghyd â CS50 yn darlithoedd ac adrannau a walkthroughs a setiau problem. Ac fel rhan o hyn, byddwch yn dod yn aelodau o'r dosbarth cyntaf CS50 ac yn awr CS50x. Fel rhan o hyn yn awr, yn sylweddoli y bydd rhai upsides yn ogystal. I baratoi ar gyfer hyn, ar gyfer y nifer enfawr o fyfyrwyr, digon yw dweud bod hyd yn oed er mae gennym 108 o TFS a MD, nid yw'n eithaf y gorau myfyriwr-athro ar ôl i ni gyrraedd 80,000 y myfyrwyr. Nid ydym yn mynd i gael ei graddio problem cymaint yn gosod â llaw, Bydd cyflwyno hyd yr wythnos hon yn y set broblem fod CS50 Gwirio, sydd yn mynd i fod yn cyfleustodau gorchymyn-lein o fewn yr offer y byddwch yn ei gael unwaith y byddwch yn ei ddiweddaru yn nes ymlaen y penwythnos hwn. Byddwch yn gallu rhedeg gorchymyn, check50, ar eich pset hun, a byddwch yn cael adborth ar unwaith y bydd eich rhaglen yn gywir neu'n anghywir yn unol â manylebau dylunio amrywiol yr ydym wedi darparu. Mwy o wybodaeth am hynny yn y set problem fanyleb. Bydd y cyd-ddisgyblion CS50x yn defnyddio hyn yn ogystal. 4 Set Problem yn ymwneud fforensig, ac mae hyn yn pset ei ysbrydoli mewn gwirionedd gan rai pethau go iawn lle pan oeddwn yn yr ysgol i raddedigion I chaethiwo am gyfnod gyda swyddfa Middlesex Sir Dosbarth Twrnai gwneud gwaith fforensig gyda'u prif ymchwilydd fforensig. Beth mae hyn yn gyfystyr â, fel y credaf imi grybwyll ychydig wythnosau diwethaf, yn cael ei byddai'r Heddlu Offeren y Wladwriaeth neu eraill ddod i mewn, byddent yn gollwng pethau fel 'n anawdd drives a CDs a disgiau llipa ac yn y blaen, ac yna y nod y swyddfa fforensig oedd canfod a oedd neu nad oedd tystiolaeth o ryw fath. Roedd hyn yn yr Uned Ymchwiliadau Arbennig, felly roedd yn wyn-coler drosedd. Roedd yn fath mwy trafferthus o droseddau, unrhyw beth sy'n ymwneud rhyw fath o gyfryngau digidol. Mae'n troi allan nad bod llawer o bobl ysgrifennu e-bost yn dweud, "Yr wyf yn gwneud hynny." Felly, yn eithaf aml, nid yw hyn chwiliadau fforensig yn troi i fyny bob un sy'n ffrwyth lawer, ond weithiau byddai pobl yn ysgrifennu negeseuon e-bost o'r fath. Felly, weithiau, yr ymdrechion yn cael eu gwobrwyo. Ond i arwain i fyny at y pset fforensig, byddwn yn cyflwyno mewn pset4 ychydig o graffeg. Mae'n debyg y byddwch yn cymryd y pethau hyn yn ganiataol - JPEG, GIFs, ac ati - y dyddiau hyn. Ond os ydych yn wir yn meddwl am y peth, delwedd, yn debyg iawn Rob wyneb, gellid ei modelu fel cyfres o ddotiau neu picsel. Yn achos Rob wyneb, mae pob math o liwiau, ac rydym yn dechrau gweld y dotiau unigol, a elwir fel arall yn picsel, unwaith y byddwn wedi dechrau i chwyddo i mewn Ond os ydym yn symleiddio'r byd dipyn a dim ond dweud bod hyn yma yw Rob mewn du a gwyn, i gynrychioli du a gwyn, gallwn jyst arfer deuaidd. Ac os ydym yn mynd i ddefnyddio ddeuaidd, 1 neu 0, gallwn fynegi y ddelwedd hon yr un o Rob wyneb yn gwenu â'r patrwm o ddarnau. 11000011 cynrychioli gwyn, gwyn, du, du, du, du, gwyn, gwyn. Ac felly nid yw'n naid enfawr yna i ddechrau siarad am ffotograffau lliwgar, pethau y byddech yn gweld ar Facebook neu gymryd gyda chamera digidol. Ond yn sicr pan ddaw i liwiau, mae angen mwy o ddarnau. Ac yn eithaf cyffredin yn y byd o luniau yw defnyddio na 1-did lliw, gan fod hyn yn awgrymu, ond 24-bit lliw, lle rydych mewn gwirionedd yn cael miliynau o liwiau. Felly, fel yn yr achos pan fyddwn yn chwyddo i mewn ar Rob yn llygad, a oedd unrhyw nifer o filiynau o bosibiliadau lliwgar gwahanol. Felly, byddwn yn cyflwyno hyn mewn 4 Set Problem yn ogystal ag yn y walkthrough, a fydd yn heddiw am 3:30 yn hytrach na'r 2:30 arferol oherwydd ddydd Gwener ddarlith yma. Ond bydd fideo ar-lein fel arfer yfory. Byddwn hefyd yn eich cyflwyno i un arall fformat ffeil. Mae hyn yn golygu fwriadol i edrych frawychus ar y dechrau, ond mae hyn yn dim ond rhai dogfennau ar gyfer strwythur C. Mae'n troi allan bod blynyddoedd yn ôl, Microsoft helpu i boblogeiddio'r y fformat hwn a elwir yn y fformat ffeil bitmap, bmp, ac roedd hyn yn super syml, fformat ffeil graffigol lliwgar a ddefnyddiwyd ers peth amser ac weithiau hyd ar gyfer papur wal ar gyfrifiaduron. Os ydych yn meddwl yn ôl at Ffenestri XP a bryniau tonnog a'r awyr las, a oedd yn nodweddiadol ddelwedd BMP neu didfap. Bitmaps yn hwyl i ni oherwydd bod ganddynt cymhlethdod ychydig yn fwy. Dyw hi ddim mor syml â hyn grid o 0au ac 1. Yn lle hynny, mae gennych bethau fel pennawd ar ddechrau'r ffeil. Felly, mewn geiriau eraill, y tu mewn a. Ffeil BMP yn criw cyfan o 0au ac 1, ond mae rhywfaint o 0au ychwanegol ac 1 mewn 'na. Ac mae'n troi allan bod yr hyn yr ydym wedi cymryd yn ôl pob tebyg yn ganiataol ers blynyddoedd - fformatau ffeil fel. doc neu. xls neu. mp3,. mp4, beth bynnag y fformatau ffeil eich bod yn gyfarwydd â nhw - beth mae'n ei hyd yn oed yn ei olygu i fod yn fformat ffeil, oherwydd ar ddiwedd y dydd pob un o'r ffeiliau hyn yr ydym yn defnyddio yr union 0s a 1s. Ac efallai y rhai 0s a 1s cynrychioli ABC drwy ASCII neu yn y blaen, ond ar ddiwedd y dydd, mae'n dal i fod dim ond 0s a 1s. Felly, dim ond pobl o bryd i'w gilydd yn penderfynu i ddyfeisio fformat ffeil newydd lle maent yn safoni'r hyn y bydd patrymau o ddarnau olygu mewn gwirionedd. Ac yn yr achos hwn yma, mae'r Folks a gynlluniodd y fformat ffeil bitmap Dywedodd bod ar y beit cyntaf mewn ffeil bitmap, a nodir fel gan 0 gwrthbwyso yno, mae mynd i fod yn rhai a enwir yn gryptig bfType a elwir yn amrywiol, a dim ond yn sefyll ar gyfer y math ffeil bitmap, pa fath o ffeil bitmap yw hwn. Gallwch gasglu efallai o'r ail reng erbyn y troedbrint carbon 2, rhif 2 beit, Mae patrwm o 0s a 1s sy'n cynrychioli beth? Mae maint o rywbeth. Ac mae'n mynd ymlaen o'r fan honno. Felly, mewn 4 Set Problem, byddwch yn cerdded drwy rai o'r pethau hyn. Ni fyddwn yn y pen draw gofalu am bob un ohonynt. Ond sylwi ei fod yn dechrau cael diddorol o amgylch beit 54: rgbtBlue, Green, a Red. Os ydych chi wedi clywed erioed y acronym RGB - coch, gwyrdd, glas - mae hon yn gyfeiriad at yr oherwydd ei fod yn troi allan gallwch paent holl liwiau'r enfys gyda rhyw gyfuniad o goch a glas a gwyrdd. Ac yn wir, gallai rhieni yn yr ystafell yn cofio rhai o'r taflunyddion cynharaf. Y dyddiau hyn, 'ch jyst yn gweld un golau llachar yn dod allan o lens, ond yn ôl yn y diwrnod y byddwch yn cael y lens coch, glas y lens, lens a gwyrdd, a gyda'i gilydd maent wedi'u hanelu at sgrîn a ffurfio darlun lliwgar. Ac yn aml iawn, byddai ysgolion canol ac ysgolion uwchradd gael y lensys erioed felly ychydig Askew, er mwyn i chi yn fath o weld delweddau dwbl neu driphlyg. Ond dyna oedd y syniad. Cawsoch golau coch a gwyrdd a glas peintio llun. A dyna un egwyddor yn cael ei ddefnyddio mewn cyfrifiaduron. Felly ymhlith yr heriau yna i chi mewn Problem Set 4 yn mynd i fod ychydig o bethau. Un yw mewn gwirionedd yn newid maint delwedd, eu cymryd mewn patrwm o 0au ac 1, chyfrif i maes a darnau o 0s a 1s cynrychioli'r hyn mewn strwythur fel hyn, ac yna chyfrif i maes sut i ailadrodd y pixels - y wiwer goch, y blues, y lawntiau - y tu mewn fel bod pan fydd llun yn edrych fel hyn i ddechrau, gallai fod yn edrych fel hyn yn lle ar ôl hynny. Ymhlith yr heriau eraill hefyd yn mynd i fod y byddwch yn rhoi delwedd fforensig o ffeil go iawn o gamera digidol. Ac ar y camera, ar un adeg, roedd criw cyfan o luniau. Y broblem yw byddwn, trwy ddamwain ddileu neu a oedd y ddelwedd llygredig rhywsut. Pethau drwg yn digwydd gyda chamerâu digidol. Ac felly rydym yn copïo yn gyflym holl oddi 0s a 1s y cerdyn i chi, arbed nhw i gyd mewn un ffeil fawr, ac yna byddwn yn eu llaw i chi yn Problem Set 4 fel y gallwch ysgrifennu rhaglen yn C y mae adennill y cyfan o'r rhai JPEG, yn ddelfrydol. Ac mae'n troi allan y JPEG, er eu bod yn dipyn o fformat ffeil cymhleth - maent yn llawer mwy cymhleth na hyn wyneb yn gwenu yma - mae'n troi allan bod pob JPEG yn dechrau gyda'r un patrymau o 0au ac 1. Felly defnyddio, yn y pen draw, mae dolen gyfnod, neu ar gyfer dolen neu debyg, gallwch ailadrodd dros yr holl 0au ac 1 yn y ddelwedd hon fforensig, a phob tro y byddwch yn gweld y patrwm arbennig sy'n ei ddiffinio yn y set problem fanyleb, gallwch gymryd yn ganiataol yma, gyda thebygolrwydd uchel iawn, dechrau a JPEG. A chyn gynted ag y byddwch yn dod o hyd i'r un patrwm ryw nifer o bytes neu kilobytes neu megabeit yn ddiweddarach, gallwch gymryd yn ganiataol yma yn JPEG ail, y llun yr wyf yn cymryd ar ôl yr un cyntaf. Gadewch i mi roi'r gorau i ddarllen y ffeil gyntaf, yn dechrau ysgrifennu hyn un newydd, ac allbwn eich rhaglen ar gyfer pset4 yn mynd i fod cymaint â 50 o JPEG. Ac os nad yw'n 50 JPEG, mae gennych dipyn o ddolen. Os oes gennych nifer anfeidrol o JPEG, mae gennych dolen ddiddiwedd. Felly y bydd hefyd yn dipyn o achos cyffredin. Felly, dyna beth sydd ar y gorwel. Cwis 0 tu ôl i ni, yn sylweddoli y fy e-bost yn ddieithriad, mae Folks sydd yn ddau yn hapus, math o niwtral, ac yn drist o gwmpas cwis 0 amser. Ac os gwelwch yn dda yn cyrraedd allan i mi, y pennaeth TF Zamyla, eich TF eich hun, neu un y MD eich bod yn gwybod os hoffech drafod sut mae pethau'n mynd. Felly, i greu argraff ar y rhieni yma yn yr ystafell, beth yw'r llyfrgell CS50? [Chwerthin] swyddi da. Beth yw'r llyfrgell CS50? Yeah. >> [Myfyrwyr] Mae'n set cyn-ysgrifenedig o god [Anghlywadwy] Iawn, yn dda. Mae'n set cyn-ysgrifenedig o god ein bod yn y staff ysgrifennodd, rydym yn darparu i chi, sy'n rhoi rhywfaint o functionality cyffredin, pethau fel mynd i mi llinyn, mynd i mi yn int - mae pob un o'r swyddogaethau sy'n cael eu rhestru yma. Dechrau nawr, rydym yn dechrau i wir yn cymryd y olwynion hyfforddiant i ffwrdd. Rydym yn mynd i ddechrau i fynd i ffwrdd llinyn oddi wrthych, sy'n galw i gof yn unig oedd yn gyfystyr am ba fath data gwirioneddol? >> [Fyfyrwyr lluosog] Torgoch *. * Torgoch. I rieni, a oedd yn ôl pob tebyg [yn gwneud sain whooshing]. Mae hynny'n dda. * Char byddwn yn dechrau ei weld ar y sgrin yn fwy wrth i ni dynnu llinyn o'n geirfa, o leiaf pan ddaw i mewn gwirionedd yn ysgrifennu cod. Yn yr un modd, byddwn yn rhoi'r gorau i ddefnyddio rhai o'r swyddogaethau hyn gymaint oherwydd bod ein rhaglenni yn mynd i gael mwy soffistigedig. Yn hytrach na dim ond ysgrifennu rhaglenni sy'n eistedd yno gyda amrantu brydlon, aros ar gyfer y defnyddiwr i deipio rhywbeth i mewn, byddwch yn cael eich mewnbwn o fannau eraill. Er enghraifft, byddwch yn eu cael gan gyfres o ddarnau ar y disg caled lleol. Byddwch yn lle hynny eu cael yn y dyfodol o gysylltiad rhwydwaith, rhywfaint o wefan rhywle. Felly, gadewch i ni croen hwn yn ôl haen am y tro cyntaf a thynnu i fyny 'r Offer CS50 ac mae hyn yn ffeil o'r enw cs50.h, yr ydych wedi bod yn #, gan gynnwys am wythnosau, ond gadewch i ni mewn gwirionedd weld beth sydd y tu mewn o hyn. Mae pen uchaf y ffeil mewn glas yn unig yw criw cyfan o sylwadau: gwybodaeth warant a thrwyddedu. Mae hwn yn fath o batrwm cyffredin mewn meddalwedd oherwydd bod llawer o feddalwedd y dyddiau hyn yw hyn a elwir ffynhonnell agored, sy'n golygu bod rhywun wedi ysgrifennu y cod ac yn ei gwneud yn ar gael am ddim nid yn unig i redeg ac i ddefnyddio ond mewn gwirionedd yn darllen a newid ac integreiddio i mewn i'ch gwaith eich hun. Felly dyna beth rydych wedi bod yn defnyddio, meddalwedd ffynhonnell agored, er mewn ffurf fach iawn. Os byddaf yn sgroliwch i lawr heibio i'r sylwadau, fodd bynnag, byddwn yn dechrau gweld rhai pethau yn fwy cyfarwydd. Rhybudd ar y brig yma bod y ffeil cs50.h yn cynnwys criw cyfan o ffeiliau header. Mae'r rhan fwyaf o'r rhain, nid ydym wedi gweld o'r blaen, ond mae un yn gyfarwydd. Pa un o'r rhain yr ydym wedi gweld, er yn fyr, hyd yn hyn? >> [Myfyrwyr] llyfrgell Safonol. Yeah, llyfrgell safonol. stdlib.h wedi malloc. Ar ôl i ni ddechrau siarad am ddyrannu cof deinamig, y byddwn yn dod yn ôl i wythnos nesaf yn ogystal, rydym yn dechrau cynnwys y ffeil. Mae'n troi allan nad bool ac yn wir a gau mewn gwirionedd yn bodoli yn C per se oni bai eich bod yn cynnwys y ffeil yma. Rydym wedi bod yn am wythnosau, gan gynnwys stdbool.h fel y gallwch ddefnyddio'r syniad o a. bool, gwir neu anwir Heb hyn, byddai'n rhaid i chi ddatrys o ffug a'i ddefnyddio yn int a dim ond fympwyol cymryd yn ganiataol bod 0 yn ffug ac 1 yn wir. Os byddwn yn sgrolio i lawr ymhellach, dyma yw ein diffiniad o linyn. Mae'n troi allan, fel yr ydym wedi dweud o'r blaen, nad yw lle mae'r seren yn oes llawer o bwys. Gallwch hyd yn oed o le o amgylch. Rydym semester hwn wedi bod yn hyrwyddo fel hyn i wneud yn glir bod y seren wedi ei wneud gyda math, ond yn sylweddoli yr un mor gyffredin, os nad ychydig yn fwy cyffredin, yw rhoi yno, ond swyddogaethol 'i' yr un peth. Ond yn awr os ydym yn darllen i lawr ymhellach, gadewch i ni edrych ar GetInt oherwydd ydym yn defnyddio hynny efallai yn gyntaf cyn unrhyw beth arall y semester. Dyma GetInt. Dyma beth? >> [Myfyrwyr] Mae prototeip. >> Mae hyn yn unig yw prototeip. Yn aml, rydym wedi rhoi prototeipiau ar gopaon ein. Ffeiliau c, ond gallwch hefyd roi prototeipiau mewn ffeiliau pennawd,. ffeiliau h, fel yr un yma yma felly pan fyddwch yn ysgrifennu rhai swyddogaethau yr ydych am i bobl eraill i fod yn gallu defnyddio, sydd yn union yn wir am y llyfrgell CS50, chi nid yn unig yn gweithredu eich swyddogaethau mewn rhywbeth fel cs50.c, byddwch hefyd yn rhoi'r prototeipiau nid ar frig y ffeil, ond ar ben ffeil header. Yna y ffeil pennawd yn yr hyn y ffrindiau a chydweithwyr yn cynnwys gyda # gynnwys yn eu cod eu hunain. Felly, yr holl amser hwn, rydych wedi bod yn cynnwys pob un o'r prototeipiau, effeithiol ar frig eich ffeil ond drwy hyn yn cynnwys mecanwaith #, sydd yn eu hanfod gopïau a pastau y ffeil i mewn eich pen eich hun. Dyma rhai dogfennau eithaf manwl. Rydym wedi 'n bert lawer gymryd yn ganiataol bod GetInt cael yn int, ond mae'n troi allan bod rhai achosion cornel. Beth os yw'r defnyddiwr mathau mewn nifer sy'n ffordd rhy fawr, a quintillion, na all dim ond ffitio y tu o int? Beth yw yr ymddygiad a ddisgwylir? Yn ddelfrydol, mae'n rhagweladwy. Felly, yn yr achos hwn, os ydych mewn gwirionedd yn darllen y print mân, byddwch mewn gwirionedd yn gweld bod os na all y llinell gael ei ddarllen, ffurflenni INT_MAX hyn. Nid ydym erioed wedi siarad am hyn, ond yn seiliedig ar ei gyfalafu, beth yw mae'n debyg y? [Myfyrwyr] Mae gyson. >> Mae'n gyson. Mae'n rhywfaint o gyson arbennig sydd wedi datgan yn ôl pob tebyg yn un o'r rhai ffeiliau pennawd sy'n uwch i fyny yn y ffeil, ac INT_MAX yn ôl pob tebyg rhywbeth fel tua 2 biliwn, y syniad yw am fod angen i ni rywsut yn arwyddo fod rhywbeth wedi mynd o'i le, yr ydym ni, ie, yn cael 4000000000 niferoedd yn ein gwaredu: -2 biliwn ar hyd at 2 biliwn, rhoi neu gymryd. Wel, yr hyn sy'n gyffredin mewn rhaglenni yw i chi ddwyn dim ond un o'r niferoedd hynny, efallai 0, efallai 2 biliwn, efallai -2000000000, felly byddwch yn treulio un o'ch gwerthoedd posib fel y gallwch ymrwymo i'r byd os bydd rhywbeth yn mynd o'i le, byddaf yn dychwelyd y gwerth mawr super. Ond nid ydych am i'r defnyddiwr deipio rhywbeth cryptig fel 234 ..., mae nifer fawr iawn. Byddwch yn cyffredinoli yn lle fel gyson. Felly mewn gwirionedd, os ydych yn cael rhefrol yr wythnosau diwethaf, unrhyw tro y byddwch yn galw GetInt, dylech fod wedi bod yn gwirio gyda os yw cyflwr y gwnaeth y math o ddefnyddiwr yn INT_MAX, neu, yn fwy penodol, gwnaeth INT_MAX dychwelyd GetInt, oherwydd os oedd, sydd mewn gwirionedd yn golygu nad oeddent yn ei deipio. Aeth rhywbeth o'i le yn yr achos hwn. Felly, mae hyn yn beth a elwir yn gyffredinol fel, gwerth sentinel a dim ond yn golygu arbennig. Gadewch i ni nawr yn troi i mewn i'r. Ffeil c. Mae'r ffeil C wedi bodoli yn y peiriant am beth amser. Ac yn wir, yr offer wedi ei cyn-llunio i chi i mewn i'r peth byddem ni'n ei alw cod gwrthrych, ond nid yn unig yn bwysig i chi lle mae'n oherwydd bod y system yn gwybod yn yr achos hwn: os yw'r ddyfais. Gadewch i ni sgroliwch i lawr yn awr i GetInt a gweld sut mae GetInt wedi bod yn gweithio i gyd y tro hwn. Yma, mae gennym sylwadau tebyg o'r blaen. Gadewch i mi chwyddo i mewn ar ddim ond y rhan cod. A beth sydd gennym ar gyfer GetInt yw'r canlynol. Mae'n cymryd unrhyw fewnbwn. Mae'n dychwelyd yn int, tra (yn wir), felly mae gennym dolen ddiddiwedd bwriadol, ond yn ôl pob tebyg byddwn dorri allan o hyn rywsut neu ddychwelyd o fewn hyn. Gadewch i ni weld sut mae hyn yn gweithio. Rydym yn ymddangos i fod yn defnyddio GetString yn y llinell gyntaf y tu mewn i'r ddolen, 166. Mae hwn yn arfer da oherwydd y gallai o dan ba amgylchiadau GetString dychwelyd y NULL keyword arbennig? >> [Myfyrwyr] Os bydd rhywbeth yn mynd o'i le. Os oes rhywbeth yn mynd o'i le. A beth allai fynd o'i le pan fyddwch yn ffonio rhywbeth fel GetString? Yeah. >> [Myfyrwyr] Malloc yn methu i roi y ints. Yeah. Efallai malloc yn methu. Rhywle o dan y cwfl, GetString yn galw malloc, sy'n dyrannu cof, sy'n gadael y siop cyfrifiadur pob un o'r cymeriadau bod y defnyddiwr mathau i mewn i'r bysellfwrdd. Ac mae'n debyg y defnyddiwr yn cael llawer gyfan o amser rhydd ac yn teipio mwy, er enghraifft, na 2 biliwn o gymeriadau mewn, cymeriadau yn fwy nag y cyfrifiadur hyd yn oed wedi RAM. GetString fod yn gallu i ddangos bod i chi. Hyd yn oed os yw hyn yn super, achos gornel anghyffredin super, mae'n rhaid iddo rywsut yn gallu trin hwn, ac felly GetString, os ydym yn mynd yn ôl a darllen ei dogfennau, ei wneud yn NULL dychwelyd gwirionedd. Felly, nawr os GetString yn methu drwy ddychwelyd NULL, GetInt yn mynd i fethu drwy ddychwelyd INT_MAX yn union fel sentinel. Yn unig yw'r rhain confensiynau dynol. Yr unig ffordd y byddech yn gwybod hyn yn wir yw drwy ddarllen y ddogfennaeth. Gadewch i ni sgroliwch i lawr at ble mae'r int yn cael ei gotten mewn gwirionedd. Os byddaf yn sgroliwch i lawr ychydig ymhellach, yn unol 170, mae gennym sylw uchod y llinellau hyn. Yr ydym yn datgan mewn 172 yn int, n, a golosg, c, ac yna roedd y swyddogaeth newydd, y mae rhai ohonoch wedi baglu ar draws o'r blaen, sscanf. Mae hyn yn sefyll am scanf llinyn. Mewn geiriau eraill, yn rhoi i mi llinyn a byddaf yn ei sganio ar gyfer darnau o wybodaeth o ddiddordeb. Beth mae hynny'n ei olygu? Gadewch i ni dybio fy mod yn teipio i mewn, yn llythrennol, 123 ar y bysellfwrdd ac yna pwyswch Enter. Beth yw'r math data o 123 pan ddychwelodd gan GetString? >> [Myfyrwyr] String. Mae'n amlwg yn llinyn, dde? Ges i linyn. Felly 123 yn wir, dyfynnwch-unquote, 123 gyda 0 \ ar y diwedd. Nid yw hynny'n int. Dyw hynny ddim yn rhif. Mae'n edrych fel nifer, ond nid yw'n mewn gwirionedd. Felly beth mae GetInt rhaid iddynt ei wneud? Mae'n rhaid iddo sganio y llinyn chwith i'r dde - 123 \ 0 - a rhywsut trosi i gyfanrif gwirioneddol. Gallech chyfrif i maes sut i wneud hyn. Os ydych yn meddwl yn ôl i pset2, rydych yn ôl pob tebyg yn cael ychydig yn gyfforddus gyda Cesar neu Vigenere, fel y gallwch ailadrodd dros llinyn, gallwch droi chars i ints. Ond Heck, mae'n llawer gyfan o waith. Pam na wnewch chi alw swyddogaeth fel sscanf sy'n gwneud hynny ar eich cyfer chi? Felly sscanf yn disgwyl dadl - yn yr achos hwn a elwir yn llinell, sy'n llinyn. Yna byddwch yn nodi mewn dyfyniadau, yn debyg iawn i printf, yr hyn yr ydych yn disgwyl ei weld yn y llinyn. A hyn yr wyf i'n ei ddweud yma yw fy mod yn disgwyl gweld nifer degol ac efallai gymeriad. A byddwn yn gweld pam fod hyn yn wir mewn dim ond hyn o bryd. Ac mae'n troi allan bod y nodiant bellach yn atgoffa rhywun o bethau i ni ddechrau siarad am ychydig dros wythnos yn ôl. Beth yw & n a & c yn ei wneud i ni yma? >> [Myfyrwyr] Cyfeiriad y n a chyfeiriad c. Yeah. Mae'n rhoi i mi y cyfeiriad n a chyfeiriad c. Pam mor bwysig â hynny? Rydych yn gwybod bod â swyddogaethau yn C, gallwch chi bob amser yn dychwelyd gwerth neu ddim gwerth o gwbl. Gallwch ddychwelyd yn int, llinyn, yn arnofio, golosg, beth bynnag, neu gallwch ddychwelyd ddi-rym, ond gallwch ddychwelyd un peth mwyaf posibl. Ond yma rydym am sscanf i ddychwelyd i mi efallai yn int, rhif degol, a hefyd a. golosg, a byddaf yn esbonio pam y mae'r torgoch yn y man Rydych yn effeithiol am sscanf i ddychwelyd dau beth, ond nad dim ond yn bosibl C. Gallwch weithio o gwmpas hynny drwy basio mewn dau gyfeiriad oherwydd cyn gynted ag y byddwch yn llaw swyddogaeth dau gyfeiriad, beth all swyddogaeth honno wneud â nhw? >> [Myfyrwyr] Ysgrifennwch at y rhai cyfeiriadau. Gall ysgrifennu at y rhai cyfeiriadau. Gallwch ddefnyddio'r gweithrediad seren ac yn mynd yno, i bob un o'r cyfeiriadau hynny. Mae'n fath o mecanwaith hwn drwy'r drws cefn ond yn gyffredin ar gyfer newid y gwerthoedd o newidynnau mwy na dim ond un lle - yn yr achos hwn, mae dau. Nawr sylwi Rwy'n chwilio am == 1 ac yna dychwelyd n os nad yw hynny'n, mewn gwirionedd, gwerthuso er mwyn wir. Felly beth sy'n mynd ymlaen? Yn dechnegol, y cyfan rydym wir eisiau i ddigwydd yn GetInt yw hyn. Rydym yn awyddus i gramadegu, fel petai, rydym yn awyddus i ddarllen y llinyn - dyfyniad-unquote 123 - ac os yw'n edrych fel mae nifer yno, beth rydym yn dweud wrth sscanf i wneud yn cael ei roi y rhif hwnnw - 123 - yn yr amrywiol n i mi. Felly pam fod yna wnes i mewn gwirionedd yn cael hyn hefyd? Beth yw rôl sscanf yn dweud efallai y byddwch hefyd yn cael gymeriad yma? [Ymateb y myfyrwyr Anghlywadwy] >> A pwynt degol gallai gweithio mewn gwirionedd. Gadewch i ni dal y meddwl am funud. Beth arall? [Myfyrwyr] Gallai fod yn null. >> Meddwl da. Gallai fod yn null y cymeriad. Nid yw'n mewn gwirionedd yn yr achos hwn. Yeah. >> [Myfyrwyr] ASCII. ASCII. Neu gadewch i mi cyffredinoli hyd yn oed ymhellach. Mae'r c% yn unig sydd am wirio camgymeriadau. Nid ydym am yno i fod yn gymeriad ar ôl y rhif, ond beth mae hyn yn caniatáu i mi ei wneud yw y canlynol. Mae'n troi allan y sscanf, ar wahân i storio gwerthoedd yn n ac c yn yr enghraifft hon yma, yr hyn y mae hefyd yn ei wneud yw ei fod yn dychwelyd y nifer o newidynnau yn rhoi gwerthoedd mewn Felly, os ydych ond yn teipio yn 123, yna dim ond y% d yn mynd i gyd-fynd, a dim ond yn cael ei storio n â gwerth tebyg i 123, ac nid oes dim yn cael ei rhoi yn c. C parhau i fod yn werth garbage, fel petai - garbage oherwydd nid yw byth yn wedi'i ymgychwyn i ryw werth. Felly, yn yr achos hwnnw, sscanf yn dychwelyd 1 oherwydd fy mod phoblogaeth 1 o hynny awgrymiadau, ac yn yr achos mawr, mae gennyf int felly rwy'n rhyddhau'r llinell i ryddhau cof bod GetString a ddyrennir mewn gwirionedd, ac yna dof yn ôl n, arall os ydych chi erioed wedi meddwl o ble y Ceisio eto datganiad yn dod, mae'n dod o'r dde yma. Felly, os, ar y llaw arall, yr wyf deipio i mewn 123foo - dim ond rhai dilyniant ar hap o destun - sscanf yn mynd i weld nifer, rhif, rhif, f, ac mae'n mynd i roi'r 123 yn n; mae'n mynd i roi'r f yn c ac yna dychwelyd 2. Felly mae gennym, dim ond yn defnyddio'r diffiniad sylfaenol o sscanf ymddygiad, ffordd syml iawn - dda, yn gymhleth ar yr olwg gyntaf, ond ar ddiwedd y dydd mecanwaith eithaf syml - o ddweud a oes int ac os felly, yw mai'r unig beth i mi gael? Ac y gofod yma yn fwriadol. Os ydych yn darllen y dogfennau ar gyfer sscanf, mae'n dweud wrthych os ydych yn cynnwys darn o whitespace ar ddechrau neu ddiwedd, sscanf bydd hefyd yn caniatáu i'r defnyddiwr, am ba bynnag reswm, i daro 123 bar gofod, a bydd hynny'n gyfreithlon. Ni fyddwch yn gweiddi ar y defnyddiwr yn unig oherwydd eu bod yn cyrraedd y bar gofod ar ddechrau neu ar y diwedd, a dim ond ychydig yn fwy defnyddiwr-gyfeillgar. Unrhyw gwestiynau yna ar GetInt? Yeah. >> [Myfyrwyr] Beth os ydych yn unig rhoi mewn golosg? Da cwestiwn. Beth os ydych yn teipio yn unig mewn golosg fel f a daro Enter heb erioed teipio 123? Beth ydych chi'n credu y byddai ymddygiad y llinell o god wedyn? [Ymateb y myfyrwyr Anghlywadwy] Yeah, fel y gall sscanf cynnwys hynny hefyd oherwydd yn yr achos hwnnw, nid yw'n mynd i lenwi'r n neu c. Mae'n mynd i yn hytrach dychwelyd 0, ac yn yr achos Rwyf hefyd yn dal y senario oherwydd bod y gwerth disgwyliedig rwyf eisiau yw 1. Dim ond am un a dim ond un peth sydd i'w llenwi. Da cwestiwn. Eraill? Mae pob hawl. Nid Gadewch i ni fynd drwy bob un o'r swyddogaethau yn y fan hon, ond yr un sy'n ymddangos i fod yn efallai o ddiddordeb sy'n weddill yn GetString oherwydd ei fod yn troi allan y GetFloat, GetInt, GetDouble, GetLongLong pob punt llawer o'u swyddogaeth i GetString. Felly, gadewch i ni edrych ar sut y mae'n gweithredu yma. Mae hyn yn un yn edrych braidd yn gymhleth, ond mae'n defnyddio'r hanfodion un ein bod yn dechrau siarad amdano yr wythnos diwethaf. Yn GetString, heb gymryd unrhyw ddadl yn unol â'r wag hyd yma ac yn dychwelyd llinyn, yr wyf debyg mod yn datgan llinyn o'r enw byffer. Dwi ddim yn gwybod beth sy'n mynd i gael ei ddefnyddio ar gyfer eto, ond gawn ni weld. Mae'n edrych fel gallu yn ddiofyn 0. 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, ond erbyn hyn mae'n mynd ychydig yn fwy diddorol. Yn unol 243, rydym yn datgan int, c. Mae hyn yn fath o fanylion dwp. Mae torgoch yn 8 darnau, a gall 8 did storio faint o werthoedd gwahanol? >> [Myfyrwyr] 256. >> 256. Y broblem yw os ydych am gael 256 o gymeriadau ASCII gwahanol, y mae os ydych yn meddwl yn ôl - ac nid yw hyn yn rhywbeth i'w gofio. Ond os ydych yn meddwl yn ôl at y siart ASCII mawr cawsom wythnosau yn ôl, oedd yn yr achos hwnnw 128 neu 256 o gymeriadau ASCII. Rydym yn defnyddio'r holl batrymau o hyd 0s a 1s. Dyna broblem os ydych am fod yn gallu canfod gwall oherwydd os ydych chi eisoes yn defnyddio 256 gwerthoedd ar gyfer eich cymeriadau, nad ydych ddim yn cynllunio ymlaen llaw oherwydd erbyn hyn nad oes gennych unrhyw ffordd o ddweud, nid yw hyn yn gymeriad legit, mae hyn yn rhywfaint o neges anghywir. Felly, beth yn y byd yn ei wneud yn eu bod yn defnyddio'r gwerth mwyaf nesaf, rhywbeth fel int, fel bod gennych nifer crazy o ddarnau, 32, ar gyfer 4000000000 gwerthoedd posib fel y gallwch yn syml yn y pen draw gan ddefnyddio bôn 257 o ohonynt, 1 ohonynt ryw ystyr arbennig fel gwall. Felly, gadewch i ni weld sut mae hyn yn gweithio. Yn unol 246, rwyf wedi hyn dolen tra mawr, yn galw fgetc, f, ffeil ystyr felly getc, ac yna stdin. Mae'n troi allan yn unig yw hyn ffordd fwy manwl gywir o ddweud darllen mewnbwn gan y bysellfwrdd. Mewnbwn bysellfwrdd safonol modd, allbwn safonol yn golygu sgrin, a gwallau safonol, y byddwn yn ei weld yn pset4, yn golygu y sgrîn ond mae rhan arbennig o'r sgrin fel nad yw'n conflated gydag allbwn gwirioneddol eich bod yn bwriadu argraffu. Ond mwy am hynny yn y dyfodol. Felly fgetc yn unig yn golygu darllen un cymeriad o'r bysellfwrdd ac yn ei storio ble? Ei storio mewn c. Ac yna gwirio - felly Im 'jyst yn defnyddio rhai cysyllteiriau Boolean yma - gwirio nad yw'n gyfartal - \ n, felly mae'r defnyddiwr wedi taro Mewnbynnu, rydym am roi'r gorau ar y pwynt hwnnw, ddiwedd y ddolen - ac rydym hefyd yn awyddus i chwilio am EOF cyson arbennig, ac os ydych yn gwybod neu'n dyfalu, yr hyn mae'n ei sefyll am? >> [Myfyrwyr] Diwedd y ffeil. Diwedd >> o ffeil. Mae hyn yn fath o synnwyr oherwydd os wyf i'n teipio ar y bysellfwrdd, nid 'n sylweddol na ffeil yn rhan o hyn, ond mae hyn yn unig yw datrys y term cyffredinol a ddefnyddir i olygu nad oes unrhyw beth arall sy'n dod o fysedd y dynol. EOF - ddiwedd y ffeil. Fel o'r neilltu, nid os ydych wedi taro erioed Rheoli D yn eich bysellfwrdd, y byddai gennych eto - eich bod wedi taro Rheoli C - Rheoli D anfon y cyson arbennig o'r enw EOF. Felly, nawr rydym yn unig wedi rhywfaint o ddyraniad cof deinamig. Felly, os (n + 1> gallu). Nawr 'n annhymerus' esbonio n. N yn unig yw faint o bytes ar hyn o bryd yn y byffer, y llinyn eich bod wrthi'n adeiladu i fyny gan y defnyddiwr. Os oes gennych cymeriadau mwy yn eich byffer nag oes gennych y galluedd yn y byffer, reddfol beth sydd angen i ei wneud wedyn yw dyrannu mwy o allu. Felly, yr wyf i'n mynd i sgimio dros rai o'r rhifyddeg yma ac yn canolbwyntio yn unig ar y swyddogaeth yma. Rydych yn gwybod beth malloc yn neu o leiaf yn gyffredinol cyfarwydd. Cymerwch dyfalu pa realloc yn ei wneud. >> [Myfyrwyr] Yn ychwanegu cof. Dyw hi ddim yn hollol ychwanegu cof. Mae'n ailddyrannu cof fel a ganlyn. Os oes dal i fod yn ystafell ar ddiwedd y llinyn i roi mwy o hynny cof nag yn wreiddiol yn rhoi i chi, yna byddwch yn cael bod y cof ychwanegol. Felly, gallwch chi jyst cadw rhoi cymeriadau y llinyn yn gefn wrth gefn wrth gefn wrth gefn. Ond os nad yw hynny'n wir oherwydd eich bod yn aros yn rhy hir a rhywbeth ar hap got plopped er cof yno ond mae cof ychwanegol i lawr yma, mae hynny'n iawn. Realloc yn mynd i wneud yr holl codi pethau trwm i chi, symud y llinyn ydych wedi darllen yn hyd yn hyn oddi yma, rhowch ef i lawr yno, ac yna rhoi rhedfa rhai yn fwy ar yr adeg honno. Felly, gyda ton y llaw, gadewch i mi ddweud bod yr hyn GetString yn ei wneud yn cael ei mae'n cychwyn gyda byffer bach, efallai un cymeriad unigol, ac os bydd y defnyddiwr mathau yn ddau gymeriad, GetString dod i ben i fyny galw realloc ac yn dweud Nid yw un cymeriad yn ddigon: dyro i mi ddau gymeriad. Yna, os ydych yn darllen drwy resymeg y ddolen, mae'n mynd i ddweud y defnyddiwr deipio mewn 3 cymeriadau: dyro i mi yn awr nid 2 ond 4 nod, Yna, yn rhoi i mi 8, yna rhowch i mi 16 a 32. Mae'r ffaith fy mod i'n gallu dyblu bob tro yn golygu nad yw'r byffer yn mynd i dyfu yn araf, mae'n mynd i dyfu'n gyflym super. A hyn a allai fod yn fanteisiol o ran hynny? Pam ydw i'n dyblu maint y byffer er y gallai y defnyddiwr, ond mae angen un cymeriad ychwanegol oddi wrth y bysellfwrdd? [Ymateb y myfyrwyr Anghlywadwy] >> Beth sy'n bod? >> [Myfyrwyr] Nid oes rhaid i dyfu mor aml. Yn union. Nid oes rhaid i chi dyfu mor aml. Ac mae hyn yn unig fath o gwrych eich bod yn eich betiau yma, y syniad yw nad ydych ddim eisiau eu galw realloc llawer oherwydd ei fod yn tueddu i fod yn araf. Unrhyw bryd y byddwch yn gofyn y system weithredu ar gyfer cof, fel y byddwch yn fuan yn gweld mewn set problemau yn y dyfodol, mae'n tueddu i gymryd peth amser. Felly lleihau'r swm hwnnw o amser, hyd yn oed os ydych yn gwastraffu ychydig o le, tueddu i fod yn beth da. Ond os ydym yn darllen drwy'r rhan olaf GetString yma - ac nid eto yn deall pob llinell sengl yma mor bwysig heddiw - sylwi ei fod yn y pen draw yn galw malloc eto ac mae'n dyrannu yn union fel bytes llawer ag y mae angen ar gyfer y llinyn ac yna yn taflu i ffwrdd drwy ffonio rhad ac am ddim y byffer rhy fawr os yw'n wir got dyblu gormod o weithiau. Felly, yn fyr, dyna sut GetString wedi bod yn gweithio i gyd y tro hwn. Mae'r holl mae'n ei wneud yw darllen un cymeriad ar y tro unwaith eto ac eto ac eto, a bob tro y bydd angen peth cof ychwanegol, mae'n gofyn y system weithredu ar ei gyfer drwy ffonio realloc. Unrhyw gwestiynau? Mae pob hawl. Mae ymosodiad. Nawr ein bod yn deall awgrymiadau neu o leiaf yn fwyfwy cyfarwydd â awgrymiadau, gadewch i ni ystyried sut y byd i gyd yn dechrau cwympo os nad ydych yn llwyr yn amddiffyn yn erbyn defnyddwyr gwrthwynebus, pobl sy'n ceisio hacio i mewn i'ch system, pobl sy'n ceisio dwyn eich meddalwedd drwy circumventing rhai cod cofrestru y gallent fel arall yn gorfod deipio i mewn Cymerwch olwg ar yr enghraifft hon yma, sydd ychydig C cod sydd â phrif swyddogaeth ar y gwaelod sy'n galw a foo swyddogaeth. A beth mae'n mynd heibio i foo? [Myfyrwyr] Dadl sengl. >> [Malan] Dadl sengl. Felly argv [1], sy'n golygu bod y gair cyntaf fod y defnyddiwr deipio ar y llinell orchymyn ar ôl a.out neu beth bynnag y rhaglen yn cael ei alw. Felly foo ar y brig yn cymryd mewn * torgoch. Ond * torgoch yn unig yw hyn? >> [Myfyrwyr] Mae llinyn. [Malan] A llinyn, felly does dim byd newydd yma. Bod llinyn yn fympwyol cael eu galw bar. Yn y llinell yma, cols c [12]; mewn math o lled-dechnegol Saesneg, beth yw y llinell hon yn ei wneud? [Myfyrwyr] Mae amrywiaeth o - Array >> o? >> [Myfyrwyr] Cymeriadau. Cymeriadau >>. Rhowch i mi amrywiaeth o 12 nod. Felly, efallai y byddwn yn galw hyn yn byffer. Mae'n cael ei alw yn dechnegol c, ond byffer mewn rhaglennu yn unig yn golygu criw o ofod y gallwch roi rhai pethau mewn Yna yn olaf, memcpy nid ydym wedi defnyddio o'r blaen, ond mae'n debyg y gallwch ddyfalu beth mae'n ei wneud. Mae copïau cof. Beth mae'n ei wneud? Mae'n debyg copïau bar, ei fewnbwn, i mewn i c ond dim ond hyd at hyd y bar. Ond mae nam yma. >> [Myfyrwyr] Mae angen y cymeriad sizeof. >> Iawn. Yn dechnegol, dylem ei wneud mewn gwirionedd strlen (bar) * sizeof (torgoch)). Mae hynny'n gywir. Ond yn yr achos gwaethaf yma, gadewch i ni gymryd yn ganiataol bod that's - Iawn. Yna mae yna ddau bugs. Felly sizeof (torgoch)); Gadewch i ni wneud hyn ychydig yn ehangach. Felly nawr mae dal i fod yn byg, sef yr hyn? >> [Anghlywadwy ymateb y myfyrwyr] Edrychwch am yr hyn? >> [Myfyrwyr] Gwirio am NULL. Dylem fel arfer yn edrych am NULL oherwydd pethau drwg yn digwydd pan fydd eich pwyntydd yn NULL oherwydd efallai y byddwch yn mynd yno, ac ni ddylech byth yn mynd i nwl drwy dereferencing â gweithredwr y seren. Felly, sy'n dda. A beth arall rydym yn ei wneud? Yn rhesymegol, mae nam yma hefyd. [Myfyrwyr] Edrychwch i weld a yw argc> = i 2. Felly, os yw gwirio argc yn> = 2. Iawn, felly does 3 bugs yn y rhaglen hon yma. Rydym yn awr yn gwirio os yw'r defnyddiwr deipio mewn gwirionedd yn unrhyw beth i mewn i argv [1]. Da. Felly beth yw'r bug trydydd? Yeah. >> [Myfyrwyr] C efallai na fydd yn ddigon mawr. Da. Rydym yn gwirio un senario. Rydym yn ymhlyg gwirio peidiwch â chopïo cof byddai mwy na fwy na hyd y bar. Felly, os yw'r llinyn y defnyddiwr deipio i mewn yn 10 nod o hyd, mae hyn yn ei ddweud yn unig copïo 10 nod. Ac mae hynny'n iawn. Ond beth os bydd y defnyddiwr yn teipio gair wrth yr anogwr fel gair 20-gymeriad? Mae hyn yn ei ddweud copi 20 nod o far i mewn i beth? C, a elwir fel arall fel ein byffer, sy'n golygu eich bod newydd ei ysgrifennu data i 8 lleoliad beit nad ydych yn berchen, ac nad ydych yn berchen arnynt yn yr ystyr nad ydych byth yn ddyrannwyd iddynt. Felly, mae hyn yn beth a elwir yn gyffredinol fel y gorlif byffer ymosodiad neu ymosodiad gor-redeg byffer. Ac mae'n ymosodiad yn yr ystyr, os bydd y defnyddiwr neu'r rhaglen sydd wedi galw eich swyddogaeth Gallai hyn yn ei wneud yn faleisus, beth yn union sy'n digwydd nesaf mewn gwirionedd fod yn eithaf gwael. Felly, gadewch i ni edrych ar y darlun yma. Mae'r llun hwn yn cynrychioli eich pentwr o cof. Dwyn i gof bod bob tro y byddwch yn galw swyddogaeth chi gael y ffrâm ychydig ar y simnai ac wedyn un arall ac wedyn un arall ac un arall. Ac hyd yn hyn, rydym wedi dim ond math o dynnu rhain fel petryalau naill ai ar y bwrdd neu ar y sgrin yma. Ond os ydym yn chwyddo i mewn ar un o'r petryalau, pan fyddwch yn ffonio a foo swyddogaeth, mae'n troi allan bod mwy ar y tu mewn pentwr y ffrâm yn y petryal na dim ond x ac y a a a b, fel yr ydym yn siarad am gyfnewid. Mae'n troi allan fod yna rhai manylion lefel is, yn eu plith Cyfeiriad Dychwelyd. Felly, mae'n troi allan pan prif galw foo, prif roi gwybod foo yr hyn y prif cyfeiriad yn gof y cyfrifiadur oherwydd fel arall, cyn gynted ag y foo yn cael ei wneud cyflawni, fel yn yr achos yma, ar ôl i chi gyrraedd y Brace cyrliog ar gau ar ddiwedd y foo, sut y mae'r Heck yn foo gwybod ble i reolaeth y rhaglen i fod i fynd? Mae'n troi allan bod yr ateb i'r cwestiwn hwnnw sydd yn y petryal coch yma. Mae hyn yn cynrychioli pwyntydd, a mae i fyny at y cyfrifiadur i storio dros dro ar y simnai hyn a elwir yn y cyfeiriad prif fel bod cyn gynted ag y foo yn cael ei wneud cyflawni, y cyfrifiadur yn gwybod ble a pha linell yn y brif fynd yn ôl i. Pwyntydd Frame Cadwyd yn ymwneud yn yr un modd i hyn. Bar * Char yma yn cynrychioli beth? Nawr mae hyn segment glas yma yw foo yn ffrâm. Beth yw bar? Bar yn unig y ddadl i'r swyddogaeth foo. Felly, nawr rydym ni'n ôl ar y math o llun cyfarwydd. Mae mwy o stwff a gwrthdyniadau mwy ar y sgrin, ond mae hyn yn segment glas golau yn unig yw hyn yr ydym wedi bod yn tynnu ar y bwrdd sialc ar gyfer rhywbeth fel cyfnewid. Dyna'r ffrâm ar gyfer foo. A'r unig beth ynddo ar hyn o bryd mae bar, sef y paramedr hwn. Ond beth arall y dylai fod yn y pentwr yn ôl y cod yma? [Myfyrwyr] torgoch c [12]. >> [Malan] torgoch c [12]. Dylem hefyd weld 12 sgwâr o gof a ddyrannwyd i newidyn a elwir yn c, ac yn wir rydym yn cael hynny ar y sgrin. Mae'r frig mae c [0], ac yna awdur y diagram nid oedd yn trafferthu tynnu pob un o'r sgwariau, ond, yn wir, 12 mae oherwydd os edrychwch ar y dde ar y gwaelod, c [11] os ydych yn cyfrif o 0 yn y beit o'r fath 12fed. Ond dyma y broblem. Ym mha cyfarwyddyd c tyfu? Trefnu o'r brig i lawr os bydd yn dechrau ar y brig ac yn tyfu i'r gwaelod. Nid yw'n edrych fel ein gadael ni ein hunain rhedfa lawer yma o gwbl. Rydym wedi math o baentio ein hunain i mewn i gornel, a bod c [11] yn iawn i fyny yn erbyn bar, sy'n iawn i fyny yn erbyn pwyntydd Frame Saved, sy'n iawn i fyny yn erbyn Cyfeiriad Dychwelyd. Does dim mwy o le. Felly beth yw'r goblygiadau, yna os byddwch yn sgriw i fyny a ydych yn ceisio darllen 20 bytes at fyffer 12-beit? Ble yw'r rhai a 8 bytes ychwanegol yn mynd i fynd? >> [Myfyrwyr] Y tu mewn - Y tu mewn popeth arall, rhai ohonynt yn hynod bwysig. A'r peth mwyaf pwysig, o bosibl, yw'r bocs coch yno, Cyfeiriad Ffurflen Dreth, oherwydd mae'n debyg eich bod naill ai'n ddamweiniol neu'n adversarially trosysgrifo y 4 bytes, hynny, cyfeiriad pwyntydd nid yn unig garbage ond gyda nifer sy'n digwydd i gynrychioli cyfeiriad gwirioneddol mewn cof. Beth yw'r goblygiadau, yn rhesymegol? >> [Myfyrwyr] Swyddogaeth yn mynd i ddychwelyd i le gwahanol. Yn union. Pan fydd ffurflenni foo a hits y cyrliog Brace, mae'r rhaglen yn mynd i symud ymlaen beidio â dychwelyd i'r brif, mae'n mynd i ddychwelyd i ba bynnag gyfeiriad sydd yn y bocs coch. Yn achos cofrestru meddalwedd trechu, beth os yw'r cyfeiriad sy'n cael ei ddychwelyd i yw swyddogaeth sydd fel arfer yn cael ei alw ar ôl i chi wedi talu am y meddalwedd a mewnbynnu eich cod cofrestru? Gallwch ddatrys y tric y cyfrifiadur i beidio â mynd yma ond yn hytrach yn mynd i fyny yma. Neu os ydych yn wirioneddol glyfar, gall gwrthwynebwr mewn gwirionedd deipio i mewn ar y bysellfwrdd, er enghraifft, Nid yw gair go iawn, nid 20 nod, ond mae'n debyg mae ef neu hi mewn gwirionedd fathau o rhai cymeriadau sy'n cynrychioli cod. Ac nid yw'n mynd i fod yn C cod, mae'n wir yn mynd i fod yn y cymeriadau sy'n cynrychioli cod deuaidd beiriant, 0s a 1s. Ond mae'n debyg eu bod yn ddigon clyfar i wneud hynny, i rhywsut bastio i mewn i'r rhywbeth brydlon GetString ystyr hynny yw a luniwyd yn ei hanfod, ac y 4 bytes trosysgrifo y cyfeiriad dychwelyd. A beth mae hynny'n ei gyfeiriad mewnbwn yn ei wneud? Mae'n mewn gwirionedd yn storio yn y petryal coch cyfeiriad y beit cyntaf y byffer. Felly, rhaid i chi fod yn glyfar iawn, ac mae hyn yn llawer o brofi a methu ar gyfer pobl ddrwg i maes 'na, ond os gallwch chyfrif i maes pa mor fawr y byffer yn fel bod y bytes diwethaf yn y mewnbwn a roddwch i'r rhaglen digwydd i fod yn cyfateb i gyfeiriad y dechrau eich byffer, gallwch wneud hyn. Os ydym yn dweud helo fel arfer a \ 0, dyna beth dod i ben i fyny yn y byffer. Ond os ydym yn fwy clyfar ac rydym yn llenwi'r byffer â'r hyn y byddwn yn gyffredinol yn galw cod ymosodiad - AAA, ymosodiad, ymosodiad, ymosodiad - lle mae hyn yn unig yw rhywbeth sy'n gwneud rhywbeth drwg, beth sy'n digwydd os ydych yn glyfar iawn, efallai y byddwch yn gwneud hyn. Yn y blwch coch yma yn ddilyniant o rifau - 80, C0, 35, 08. Sylwch fod hynny yn cyfateb i'r rhif sydd i fyny yma. Mae'n am yn ôl, ond mwy am hynny rywbryd eto. Sylwch fod y cyfeiriad dychwelyd wedi ei newid yn fwriadol yn hafal i gyfeiriad i fyny yma, nid yw'r cyfeiriad prif. Felly, os y dyn drwg yn super smart, ef neu hi yn mynd i gynnwys yn y cod ymosodiad rhywbeth fel dileu'r holl ffeiliau y defnyddiwr neu gopïo'r cyfrineiriau neu greu cyfrif defnyddiwr y gallaf wedyn logio i mewn i - unrhyw beth o gwbl. Ac mae hyn yn y perygl a phŵer C. Oherwydd eich bod yn cael mynediad i gof trwy awgrymiadau ac a allwch felly ysgrifennu unrhyw beth rydych am i mewn i gof cyfrifiadur, yn gallwch wneud cyfrifiadur yn gwneud unrhyw beth yr hoffech yn syml drwy gael ei neidio o gwmpas o fewn ei le cof ei hun. Ac felly hyd y dydd hwn raglenni cymaint o wefannau cymaint o sy'n cael eu cyfaddawdu berwi i lawr i bobl yn cymryd mantais o hyn. A gallai hyn ymddangos fel ymosodiad soffistigedig super, ond nid yw bob amser yn dechrau y ffordd honno. Y realiti yw bod yr hyn y bydd pobl ddrwg ei wneud fel rheol yw, boed yn rhaglen ar llinell orchymyn neu raglen GUI neu wefan, 'ch jyst dechrau darparu nonsens. Byddwch yn teipio gair mawr iawn yn y blwch chwilio a daro Chofnoda, ac i chi aros i weld a fydd y wefan yn cael damwain neu os ydych yn aros i weld os yw'r rhaglen yn amlygu rhywfaint o neges wall oherwydd os ydych yn cael lwcus fel y dyn drwg a'ch bod yn darparu rhywfaint o fewnbwn crazy sy'n dyrfau 'r rhaglen, mae hynny'n golygu nad oedd y rhaglennydd yn rhagweld eich ymddygiad gwael, sy'n golygu y gallwch yn ôl pob tebyg gyda digon o ymdrech, treial a gwallau digon, chyfrif i maes sut i frwydro yn ymosodiad yn fwy manwl gywir. Fel nad ydynt yn gymaint rhan o ddiogelwch yn unig yw osgoi ymosodiadau hyn yn gyfan gwbl ond yn eu canfod ac mewn gwirionedd yn edrych ar logiau a gweld beth mewnbynnau crazy o bobl teipio i mewn i'ch gwefan, pa dermau chwilio mae pobl wedi ei deipio i mewn i'ch gwefan yn y gobaith o gorlifo rhywfaint o byffer. Ac mae hyn oll yw hanfodion syml o'r hyn sydd arae a beth mae'n ei olygu i ddyrannu a defnyddio cof. Yn gysylltiedig â hynny, yna hefyd yw hwn. Gadewch i 'jyst cipolwg tu mewn i' n anawdd cathrena unwaith eto. Y byddwch yn cofio o wythnos neu ddwy yn ôl, pan fyddwch yn lusgo ffeiliau i'ch recycle bin sbwriel yn gallu neu, beth sy'n digwydd? >> [Myfyrwyr] Dim byd. >> Dim byd o gwbl, dde? Yn y pen draw, os ydych yn rhedeg isel ar lle ar y ddisg, Bydd Windows neu Mac OS dechrau dileu ffeiliau ar eich cyfer chi. Ond os ydych yn llusgo rhywbeth i mewn 'na, nid yw hynny'n gwbl ddiogel. Mae pob eich roommate neu ffrind neu aelod o'r teulu wedi ei wneud yw clicio ddwywaith ac, voila, mae holl ffeiliau bylchog eich bod wedi ceisio dileu. Mae'r rhan fwyaf ohonom o leiaf yn gwybod bod yn rhaid i chi dde chlecia neu cliciwch Rheoli ac yn wag y sbwriel neu rywbeth fel 'na. Ond hyd yn oed wedyn nad yw'n llwyr yn y gamp oherwydd mae'r hyn sy'n digwydd pan fyddwch yn cael ffeil ar eich disg galed sy'n cynrychioli ryw ddogfen Word neu ryw JPEG, ac mae hyn yn cynrychioli eich gyriant caled, a gadewch i ni ddweud y sliver yma yn cynrychioli y ffeil, ac mae'n cynnwys criw cyfan o 0au ac 1. Beth sy'n digwydd pan nad ydych ond yn llusgo y ffeil i'r sbwriel yn gallu neu ailgylchu bin ond hefyd yn wag ei? Trefnu o ddim byd. Dyw hi ddim dim byd o gwbl yn awr. Nawr 'i' jyst ddim oherwydd bod rhywbeth bach yn digwydd ar ffurf tabl hwn. Felly, mae rhyw fath o gronfa ddata neu dabl tu mewn cof cyfrifiadur sydd yn ei hanfod un golofn ar gyfer ffeiliau 'enwau ac un golofn ar gyfer ffeiliau' lleoliad, lle y gallai hyn fod yn lleoliad 123, dim ond rhif ar hap. Felly, efallai y byddwn yn cael rhywbeth fel x.jpeg a lleoliad 123. Beth sy'n digwydd wedyn pan fyddwch mewn gwirionedd yn gwagio eich sbwriel? Sy'n mynd i ffwrdd. Ond yr hyn nad yw'n mynd i ffwrdd yn y 0s a 1s. Felly beth sydd yna bydd y cysylltiad i pset4? Wel, gyda pset4, dim ond oherwydd ein bod wedi dileu ddamweiniol y cerdyn fflach compact oedd pob un o'r lluniau neu dim ond oherwydd iddo gan lwc ddrwg yn llygru nid yw'n golygu nad oedd y 0au ac 1 yn dal i fod yno. Efallai ychydig ohonynt yn cael eu colli oherwydd bod rhywbeth got llygru yn yr ystyr bod rhai 0s 1s ddaeth ac 1 yn 0au. Gall pethau drwg yn digwydd oherwydd meddalwedd bygi neu caledwedd diffygiol. Ond mae llawer o'r rhai darnau, efallai hyd yn oed 100% ohonynt, yn dal i fod yno. Dim ond nad yw'r cyfrifiadur neu'r camera yn gwybod ble JPEG1 dechreuodd a lle JPEG2 cychwyn. Ond os ydych chi, y rhaglennydd, yn gwybod gydag ychydig o savvy lle mae'r JPEG yn neu beth maent yn edrych fel hyn y gallwch ddadansoddi y JPEG 0s a 1s a dweud, JPEG, gallwch ysgrifennu rhaglen gyda bôn dim ond ar gyfer neu tra'n ddolen sy'n adennill pob un o'r ffeiliau. Felly y wers yna yn dechrau yn ddiogel dileu eich ffeiliau os hoffech i osgoi hyn yn gyfan gwbl. Ydw. [Myfyrwyr] Sut dod y mae'n ei ddweud ar eich cyfrifiadur bod gennych gof mwy nag y gwnaethoch o'r blaen? Cael mwy o gof nag y gwnaethoch o'r blaen - >> [myfyrwyr] cof Mwy ar gael. Oh. Da cwestiwn. Felly pam wedyn ar ôl gwagio'r sbwriel y mae eich cyfrifiadur yn dweud wrthych bod gennych fwy o le rhydd nag y gwnaethoch o'r blaen? Yn gryno, oherwydd ei fod yn gorwedd. Mwy dechnegol, oes gennych fwy o le oherwydd yn awr yr ydych wedi dweud gallwch roi pethau eraill lle y ffeil ar un adeg. Ond nid yw hynny'n golygu y darnau yn mynd i ffwrdd, ac nid yw hynny'n golygu y darnau yn cael eu newid i bob 0s, er enghraifft, er eich lles. Felly, ar y llaw arall, os ydych yn ddiogel dileu ffeiliau neu gorfforol dinistrio y ddyfais, sydd wir yw'r unig ffordd weithiau o gwmpas hynny. Felly pam nad ydym yn gadael ar y nodyn lled-frawychus, a byddwn yn eich gweld ar ddydd Llun. [Cymeradwyaeth] [CS50.TV]