[Powered by Google Translate] [WYTHNOS 5] [David J. Malan, Prifysgol Harvard] [Mae hyn yn CS50.] [CS50.TV] [Gwraig] Mae'n gorwedd, am yr hyn, nid wyf yn gwybod. [Dyn] Felly beth ydym yn ei wybod? [Gwraig] Dyna am 9:15, roedd Ray Santoya yn y ATM. [Dyn] Felly y cwestiwn yw, beth oedd yn ei wneud ar 09:16? [Gwraig] saethu y mm 9 yn rhywbeth. Efallai ei fod yn gweld y sniper. [Dyn] Neu oedd yn gweithio gydag ef. [Gwraig] Aros. Ewch yn ôl un. [Dyn] Beth ydych chi'n ei weld? [♫ cerddoriaeth gwewyr ♫] [Gwraig] Dewch ei wyneb i fyny. Sgrin lawn. [Dyn] ei sbectol. >> Mae adlewyrchiad. [♫ cerddoriaeth gwewyr ♫] [Dyn] Dyna tîm pêl fas y Nuevita yn. Dyna eu logo. [Gwraig] Ac mae'n siarad â phwy bynnag sy'n gwisgo siaced y. [David Malan] Felly, mae hyn yn CS50 wythnos 5, a heddiw rydym yn difetha ychydig o deledu a ffilm i chi. Felly, pryd bynnag y byddwch chi'n gwylio sioe fel hon yma, ac mae'r cops yn dweud "Allwch chi lanhau hynny?" neu "Gwella," nid oes gwella yn y byd go iawn. Yn wir, yr hyn rydych yn dod yn rhywbeth bach fel hyn. Rwyf wedi tynnu i fyny un o'r lluniau staff o'r dudalen. Mae hon yn rhaglen o'r enw Photoshop. Mae hyn yn 1 o 2 Bowdens, 1 o 3 Bowdens mewn gwirionedd, heddiw, gan fod gennym Mrs Bowden yma hefyd, gyda Rob a Paul. Ond dyma yw Rob ar y sgrin, ac os ydym yn chwyddo i mewn ar y glint mae wedi cael bob amser yn ei lygad, y byddwch yn ei weld yw bod yr hyn a welwch yw'r hyn a gewch. Mae hyn yn "well," felly "CSI" ei gael ychydig yn anghywir. Mae un clip arall, os gallwn ddewis ar "CSI" dim ond ychydig bach yn hirach. Mae hyn yn un yn ymadrodd 'n glws i draethu o hyn ymlaen os ydych eisiau swnio'n dechnegol gyda'ch ffrindiau pan, mewn gwirionedd, rydych yn dweud dim byd o gwbl. [Dyn] Am wythnosau, yr wyf wedi bod yn ymchwilio i'r llofruddiaethau Killer Cabby gyda diddordeb afiach penodol. [Gwraig # 1] Mae hyn yn amser real. [Gwraig # 2] 'n annhymerus' creu rhyngwyneb GUI ddefnyddio Visual Basic, weld os gallaf olrhain cyfeiriad IP. [Malan] Felly sain allan o cydamseru o'r neilltu, gan greu rhyngwyneb GUI ddefnyddio Visual Basic i olrhain cyfeiriad IP yn nonsens llwyr. Y dyddiau hyn na fyddech yn defnyddio Visual Basic, does dim angen GUI, a chyfeiriad IP yn derm technegol cywir. Felly cadwch lygad allan am y rhain, ac un o fy ffefrynnau: Mae hyn yn un yn ychydig yn fwy dirgel, oherwydd mae angen i chi wybod iaith wahanol. Mae iaith a elwir yn Amcan-C, sydd yn uwchset o C. Sy'n golygu ei fod yn C a rhai nodweddion ychwanegol, yn eu plith gwrthrych-oriented rhaglennu. Ac mae hyn yn yr iaith y Apple wedi boblogeiddio gyfer iOS rhaglennu. Ac felly dyma clip o sioe wahanol yn gyfan gwbl, o "Rhifau," os ydych yn edrych yn agos ar eich TiVo ac oedi ar yr adeg iawn, byddwch yn gweld bod yr hyn maent yn edrych arno yw nid iawn beth sy'n cael ei ddisgrifio. A gadewch i mi roi cynnig ar cysylltydd sain gwahanol yma a gweld os na allwn cadw'r sain yn cydamseru y tro hwn. Yr wyf yn rhoi i chi "Rhifau." [Dyn # 1] Mae'n gyfeiriad 32-bit IPv4. [Dyn # 2] IP, dyna y Rhyngrwyd. >> Rwydwaith preifat. Mae'n Anita rhwydwaith preifat. [Malan] Iawn. Mae hyn yn Amcan-C, ac mae ar gyfer rhaglen lliwio rhai fyn, yn fel y gallwch ddod i'r casgliad efallai o enw y newidyn yno. Felly hynny, yna oedd, "Rhifau." Felly heddiw a'r wythnos hon byddwn yn cyflwyno ychydig o fyd fforensig a'r cyd-destun y problemau felly. Heddiw, bydd yn ddarlith gryno oherwydd bod digwyddiad arbennig yma wedi hynny, felly byddwn yn cymryd cip, ac yn tynnu coes 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 mits fenter ar-lein newydd ar gyfer cyrsiau agored a mwy, yn lansio ar gampws Harvard ddydd Llun. Sy'n golygu Dydd Llun nesaf, bydd gennych - fel y cyfrif diwethaf, Bydd 86,000 cyd-ddisgyblion ychwanegol 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, ddim yn hollol y gorau myfyriwr / athro ar ôl i ni gyrraedd 80,000 o fyfyrwyr eraill. Felly, nid ydym yn mynd i fod yn graddio problem cymaint yn gosod â llaw. Bydd cyflwyno Felly, yr wythnos hon yn y set broblem fod CS50 Gwirio, sydd yn mynd i fod yn gorchymyn cyfleustodau llinell o fewn yr offer y byddwch yn ei gael unwaith y byddwch yn ei ddiweddaru yn nes ymlaen y penwythnos hwn, a byddwch yn gallu rhedeg gorchymyn, gwirio 50, ar eich pset hun, a byddwch yn cael rhywfaint o adborth ynghylch a yw eich rhaglen yn gywir neu anghywir yn unol â manylebau dylunio amrywiol yr ydym wedi darparu. Felly mwy am hynny ac mae'r broblem manyleb set a Bydd y cyd-ddisgyblion CS50x yn defnyddio hyn yn ogystal. Felly, 4 a osodwyd problem yn ymwneud fforensig. Ac mae'r darn hwn ei ysbrydoli gan rai pethau go iawn, lle pan oeddwn yn yr ysgol i raddedigion, yr wyf chaethiwo am gyfnod gyda y Sir Middlesex yn Dosbarth Swyddfa'r Twrnai gwneud gwaith fforensig gyda'u prif ymchwilydd fforensig a beth mae hyn yn gyfystyr â yw, yr wyf yn credu imi grybwyll gorffennol wythnos rhai, yw'r heddlu Wladwriaeth Offeren neu eraill fyddai dod i mewn, byddent yn gollwng pethau fel 'n anawdd drives a CDs a disgiau hyblyg ac yn y blaen, ac yna y nod y swyddfa fforensig oedd canfod a oedd oedd neu nad oedd tystiolaeth o ryw fath. Roedd hyn yn yr Uned Ymchwiliadau Arbennig, felly roedd yn wyn-coler trosedd, roedd yn fath fwy trafferthus o droseddau, unrhyw beth sy'n ymwneud rhyw fath o gyfryngau digidol; troi allan nad yw bod llawer o bobl ysgrifennu e-bost yn dweud "Yr wyf yn gwneud hynny." Felly, yn eithaf aml, nid y chwiliadau hyn 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 mae'r ymdrechion yn cael eu gwobrwyo. Ond i arwain i fyny at y pset fforensig, byddwn yn cyflwyno mewn pset 4 ychydig o graffeg. Felly, mae'n debyg eich bod yn cymryd y pethau hyn yn ganiataol, JPEG, GIFs ac yn y blaen 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 awr, yn achos Rob wyneb, mae pob math o liwiau, ac rydym yn dechrau gweld y dotiau unigol, a elwir otherwide fel 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, yn dda, 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 anferth, felly, i ddechrau siarad am luniau lliwgar. Pethau y byddech yn ei weld ar Facebook neu gymryd gyda chamera digidol, ond, yn sicr, pan ddaw'n fater o lliwiau, bydd angen darnau mwy. 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 y fideo ar-lein, fel arfer, yfory. Byddwn hefyd yn eich cyflwyno i un arall fformat ffeil. Felly, 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 Microsoft, flynyddoedd yn ôl, 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 BMP, neu ddelwedd bitmap, a bitmaps yn hwyl i ni oherwydd bod ganddynt cymhlethdod ychydig yn fwy. Dyw hi ddim mor syml â hyn grid o 0 a 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 0 a 1, ond mae rhai ychwanegol 0 a 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 neu. mp4, beth bynnag y fformatau ffeil yr ydych yn gyfarwydd â hwy. Wel, beth mae'n ei olygu i hyd yn oed fod yn fformat ffeil? Oherwydd ar ddiwedd y dydd, pob un o'r ffeiliau hyn a ddefnyddiwn yn unig 0 a 1 ac efallai y rheiny 0 a 1 cynrychioli a, b, c, trwy ASCII neu yn y blaen, ond drwy ddiwedd y dydd, dim ond 0 a 1. 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 gan gwrthbwyso 0, 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 hyn. Gallwch gasglu, efallai, o'r ail reng erbyn y troedbrint carbon 2, rhif 2 beit, Mae gan batrwm o 0 a 1 yn 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 ddiddorol amgylch llinell neu beit 54, rgbtBlue, Gwyrdd a Coch. Os ydych chi wedi clywed erioed y acronym RGB, coch gwyrdd las, mae hwn yn cyfeirio at hynny. Oherwydd ei fod yn troi allan gallwch paent holl liwiau'r enfys gyda rhyw gyfuniad o goch a glas a gwyrdd. Ac, yn wir, efallai y bydd y rhieni yn yr ystafell yn cofio rhai o'r taflunyddion cynharaf. Y dyddiau hyn, 'ch jyst gweler 1 olau llachar yn dod allan o lens. Ond yn ôl yn y dydd, byddwch yn cael y lens coch, y lens glas, a gwyrdd lens a gyda'i gilydd maent wedi'i anelu at y sgrin a ffurfio darlun lliwgar. Ac yn aml iawn byddai ysgolion canol ac ysgolion uwchradd gael y lensys erioed-fel-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 yn broblem osod 4 yn mynd i fod ychydig o bethau; un yw mewn gwirionedd yn newid maint delwedd. Er mwyn cymryd mewn patrwm o 0 a 1, chyfrif i maes pa ddarnau o 0 a 1 yn cynrychioli'r hyn mewn strwythur fel hyn, ac yna chyfrif i maes sut i ailadrodd y picsel: y wiwer goch, y blues, y lawntiau y tu mewn fel bod pan fydd llun yn edrych fel hyn i ddechrau y gallai, yn edrych fel hyn yn lle ar ôl hynny. Ymhlith yr heriau eraill, hefyd, yn mynd i fod yn 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, rydym yn ddamweiniol 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 weithgareddau'r 0 ac 1 yn oddi ar y cerdyn i chi, arbed nhw i gyd mewn 1 ffeil fawr, ac yna byddwn yn llaw i chi mewn datrys gosod 4 fel y gallwch ysgrifennu rhaglen yn C y mae i adennill hynny i gyd 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 0 a 1. Felly, gan ddefnyddio dolen gyfnod, neu ar gyfer dolen neu debyg, gallwch ailadrodd dros yr holl o 0 ac 1 yn y ddelwedd fforensig a phob tro y byddwch yn gweld y patrwm arbennig sy'n ei diffinio ym manyleb y broblem a osodwyd, yn gallwch gymryd yn ganiataol, 'O, dyma yw, gyda thebygolrwydd uchel iawn, ddechrau 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, 'Ooh! Dyma yw JPEG ail, y llun yr wyf yn cymryd ar ôl yr un cyntaf. Gadewch i mi roi'r gorau i ddarllen y ffeil gyntaf, ddechrau ysgrifennu yr un newydd. ' Ac mae'r allbwn eich rhaglen ar gyfer pset 4 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 dyna, hefyd, yn dipyn o achos cyffredin. Dyna beth sydd ar y gorwel. Cwis 0, tu ôl i ni. Sylweddoli, fesul fy e-bost, sy'n ddieithriad mae Folks sydd ill dau yn hapus, math o niwtral, ac yn drist o gwmpas cwis 0 amser. Ac os gwelwch yn dda yn cyrraedd allan i mi, y TFS pen, 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? Gwaith da. Beth yw'r llyfrgell CS50? Yeah? [Atebion Myfyrwyr, annealladwy] >> Iawn, yn dda. Felly mae'n set prewritten o god ein bod ni, y staff, ysgrifennodd, rydym yn eu darparu i chi, i ddarparu rhai functionalities cyffredin. Pethau fel mynd i mi llinyn, i gael i mi int, yr holl swyddogaethau sy'n cael eu rhestru yma. Dechrau nawr, rydym yn dechrau i wir yn cymryd y olwynion hyfforddiant i ffwrdd. Felly, rydym yn mynd i ddechrau i fynd i ffwrdd yn "llinyn" oddi wrthych, sydd, galw i gof, yn unig oedd yn gyfystyr am ba fath data gwirioneddol? * torgoch. Felly, ar gyfer rhieni, a oedd yn ôl pob tebyg - sy'n dda, felly * torgoch byddwn yn dechrau gweld ar y sgrin yn fwy wrth i ni ddileu "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 cymaint, 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 cysylltiad rhwydwaith, mae rhai gwefan yn rhywle. Felly, gadewch i ni croen hwn yn ôl haen am y tro cyntaf, a thynnu i fyny yr offer CS50 ac mae hyn yn ffeil o'r enw CS50.h, yr ydych wedi bod yn finiog, gan gynnwys am wythnosau. Ond gadewch i ni mewn gwirionedd weld beth sydd y tu mewn o hyn. Felly, yr 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 mae 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 yn rhwydd, 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. Felly, sylwi ar y brig yma, fod y ffeil CS50.h yn cynnwys criw cyfan o ffeiliau header. Yn awr, mae'r rhan fwyaf o'r rhain nid ydym wedi gweld o'r blaen, ond mae un yn cyfarwydd; pa un o'r rhain yr ydym wedi gweld, er yn fyr, hyd yn hyn? Yeah, llyfrgelloedd safonol. Stdlib.h wedi malloc, felly 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, fel y cyfryw, oni bai eich bod yn cynnwys y ffeil yma. Felly, rydym wedi, am wythnosau, bod yn cynnwys safon bool.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. Yn awr, os ydym 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 hyn * yn oes llawer o bwys. Gallwch hyd yn oed o le o amgylch. Rydym ni, y semester hwn, wedi bod yn hyrwyddo fel hyn i wneud yn glir bod y * wedi ei wneud â'r math. Ond yn sylweddoli, yr un mor gyffredin, os nad ychydig yn fwy cyffredin, yw roi yno ond swyddogaethol mae'n yr un peth. Ond yn awr, os ydym yn darllen i lawr ymhellach, gadewch i ni edrych ar dweud, GetInt, oherwydd ein bod yn defnyddio honno, efallai, cyn i unrhyw beth arall y semester. A dyma yn GetInt. Dyma beth? Mae hyn yn prototeip. Mor aml, rydym wedi rhoi prototeipiau ar gopaon ein. Ffeiliau c, ond gallwch hefyd roi prototeipiau mewn ffeiliau pennawd,. ffeiliau h, fel hyn un yma, felly pan fyddwch yn ysgrifennu rhai swyddogaethau eich bod 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 pennawd, yna ffeil pennawd yn yr hyn y ffrindiau a chydweithwyr yn cynnwys, gyda miniog 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 trwy gyfrwng yr miniog yn cynnwys mecanwaith bod hanfod gopïau a pastau y ffeil i mewn eich pen eich hun. Yn awr, dyma rhai dogfennau eithaf manwl. Rydym wedi 'n bert lawer gymryd yn ganiataol bod GetInt cael yn int, ond mae'n troi allan mae rhai achosion cornel, dde? Beth os yw'r defnyddiwr mathau mewn nifer sy'n ffordd rhy fawr? Mae quintillion, na all dim ond ffitio y tu o int? Beth yw yr ymddygiad a ddisgwylir? Wel, yn ddelfrydol, mae'n rhagweladwy. Felly, yn yr achos hwn, os ydych mewn gwirionedd yn darllen y print mân, byddwch 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 ydyw, yn ôl pob tebyg? Mae'n gyson, felly mae'n rhai cyson arbennig sydd wedi datgan yn ôl pob tebyg yn un o'r rhai a ffeiliau pennawd sy'n uwch i fyny yn y ffeil, ac INT_MAX yn ôl pob tebyg rhywbeth fel, yn fras, 2 biliwn. Y syniad yw, oherwydd mae angen i ni rywsut yn arwyddo fod rhywbeth wedi mynd o'i le, yr ydym ni, ie, yn cael 4000000000 rifau ar gael i ni, negyddol 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 rhifau hynny. Efallai 0, efallai 2 biliwn, efallai negyddol 2 biliwn. 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 super-big. Ond nid ydych am i'r defnyddiwr deipio rhywbeth cryptig fel "2, 3, 4 ..." o nifer fawr iawn, lle byddwch yn cyffredinoli yn hytrach na fel gyson. Felly mewn gwirionedd, os ydych yn cael rhefrol yr wythnosau diwethaf, unrhyw adeg i chi alw GetInt, dylech fod wedi bod yn gwirio gyda chyflwr os. A oedd y math o ddefnyddiwr yn INT_MAX, neu yn fwy penodol, wnaeth 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. Wel, gadewch i ni yn awr yn troi i mewn i'r. Ffeiliau c. Mae'r ffeil C wedi bodoli yn y peiriant am beth amser, ac, yn wir, yr offer wedi ei precompiled ar eich cyfer 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, lle y mae, yr offer. Ond gadewch i ni sgroliwch i lawr yn awr i GetInt, a gweld sut GetInt wedi bod yn gweithio i gyd y tro hwn. Felly yma mae gennym sylwadau tebyg o'r blaen. Gadewch i mi chwyddo i mewn ar ddim ond y rhan cod, a'r hyn sydd gennym ar gyfer GetInt yw'r canlynol. Mae'n cymryd unrhyw fewnbwn, ac yn 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. Felly, gadewch i ni weld sut mae hyn yn gweithio. Wel, 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 o dan ba amgylchiadau Gallai GetString dychwelyd y gair allweddol arbennig, NULL? Os oes rhywbeth yn mynd o'i le. Beth allai fynd o'i le pan fyddwch yn ffonio rhywbeth fel GetString? Yeah? [Ateb Myfyrwyr, annealladwy] >> Yeah. Felly, 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 rhad ac am ddim ac yn teipio mwy, er enghraifft, na 2 biliwn o gymeriadau. Cymeriadau yn fwy nag y cyfrifiadur hyd yn oed wedi RAM. Wel, GetString fod yn gallu i ddangos bod i chi, hyd yn oed os yw hyn yn super, achos cornel anghyffredin super. Mae'n rhaid iddo rywsut yn gallu trin hwn, ac felly GetString, os ydym yn mynd yn ôl a darllen ei dogfennaeth, yw, mewn gwirionedd, yn dychwelyd NULL. 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. Felly, gadewch i sgrolio i lawr i lle mae'r int mewn gwirionedd GotInt. Felly os wyf am symud i lawr ychydig ymhellach, yn unol 170 mae gennym sylw uchod y llinellau hyn. Felly, rydym yn datgan, yn 172, mae n int a c torgoch, ac yna roedd y swyddogaeth newydd y mae rhai ohonoch wedi baglu ar draws o'r blaen, ond sscanf. Mae hyn yn sefyll ar gyfer f llinyn sgan. Mewn geiriau eraill, yn rhoi i mi llinyn a byddaf yn ei sganio ar gyfer darnau o wybodaeth o ddiddordeb. Felly beth mae hynny'n ei olygu? Wel, mae'n debyg fy mod yn teipio i mewn, yn llythrennol, 1 2 3 ar y bysellfwrdd, a tharo yna rhowch. Beth yw'r math data o 1 2 3 pan ddychwelodd gan GetString? Mae'n amlwg yn llinyn, dde? Ges i llinyn, felly 1 2 3 yn wirioneddol "1 2 3" gyda'r 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, 1 2 3 \ 0, a rhywsut ei drosi i cyfanrif gwirioneddol. Nawr, fe allech chi chyfrif i maes sut i wneud hyn. Os ydych yn meddwl yn ôl i pset 2, 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 â dewis. Mae hynny'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. Byddwch wedyn yn nodi, mewn dyfynodau, yn debyg iawn i'r printf, beth ydych chi'n disgwyl eu gweld yn y llinyn? Beth allaf i ddim yn dweud yma yw, yr wyf yn disgwyl gweld nifer degol ac efallai gymeriad. A byddwn yn gweld pam fod hyn yn wir mewn dim ond hyn o bryd. Mae'n troi allan bod y nodiant bellach yn atgoffa rhywun o bethau ddechreuon ni siarad am ychydig dros wythnos yn ôl. Beth yw & n a & c yn ei wneud i ni yma? [Atebion Myfyrwyr, annealladwy] >> Yeah. Mae'n rhoi i mi y cyfeiriad n a chyfeiriad c. Yn awr, pam mae hynny'n bwysig? Wel, chi'n 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 1 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 Felly rydych yn effeithiol am f i ddychwelyd 2 beth; hynny nid yn unig yn bosibl C. Felly, gallwch weithio o gwmpas hynny drwy basio mewn 2 gyfeiriad, oherwydd cyn gynted ag y byddwch yn llaw swyddogaeth 2 gyfeiriad, beth all swyddogaeth honno wneud â nhw? Gall ysgrifennu at y rhai cyfeiriadau. Gallwch ddefnyddio'r gweithrediad * a "mynd yno" i bob un o'r cyfeiriadau hynny. Mae'n fath o mecanwaith hwn drws cefn, ond yn gyffredin iawn i newid y gwerthoedd o newidynnau mewn mwy na dim ond 1 lle, yn yr achos hwn 2. Nawr, rwy'n sylwi gwirio am == i 1, ac yna dychwelyd n os nad yw hynny'n, mewn gwirionedd, gwerthuso er mwyn wir. Felly beth sy'n mynd ymlaen? Wel, 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 "1 2 3" ac os yw'n edrych fel mae nifer yno, beth rydym yn dweud wrth sscanf ei wneud yw rhoi rhif hwnnw, 1 2 3, yn y n amrywiol i mi. Pam, felly, a gefais i hyn hefyd? Beth yw rôl hefyd yn dweud, sscanf, efallai y byddwch hefyd yn cael cymeriad yma. [Siarad Myfyrwyr, annealladwy] >> Dim - gallai pwynt degol yn gweithio. Gadewch i ni dal y meddwl am funud. Beth arall? [Myfyrwyr, annealladwy] >> Felly, meddwl da, gallai fod cymeriad NULL. Nid yw'n mewn gwirionedd, yn yr achos hwn. Yeah? [Myfyrwyr, annealladwy] >> ASCII. Neu, gadewch i mi cyffredinoli hyd yn oed ymhellach. Mae'r c% yn unig sydd i wall-gwirio. 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 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 mewn 1 2 3, yna dim ond y% d yn mynd i gyd-fynd a dim ond yn cael ei storio n â gwerth tebyg i 1 2 3 a dim byd yn cael ei roi yn c; c parhau i fod yn werth garbage, felly, i siarad. Garbage oherwydd nid yw byth yn wedi'i ymgychwyn fel rhywfaint o werth. Felly, yn yr achos hwnnw, sscanf yn dychwelyd 1, oherwydd fy mod phoblogaeth un o'r rhai awgrymiadau, ac os felly, gwych. Mae gen i int, felly rwy'n rhyddhau'r llinell i ryddhau cof bod GetString a ddyrennir mewn gwirionedd, ac yna dof yn ôl n. Else, os ydych chi erioed wedi meddwl o ble y retry datganiad yn dod, yn dod o'r dde yma. Os, ar y llaw arall, yr wyf deipio i mewn 1 2 3 foo, dim ond rhai dilyniant ar hap o destun, sscanf yn mynd i weld, www, rhif, www, rhif, www, rhif, www - f. Ac mae'n mynd i roi'r 1 2 3 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 scanf ymddygiad, ffordd syml iawn - wel, 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 mae'r gofod gwyn yma yn fwriadol. Os ydych yn darllen y dogfennau ar gyfer sscanf, mae'n dweud wrthych os ydych yn cynnwys darn o ofod gwyn ar ddechrau neu ddiwedd, sscanf bydd hefyd yn caniatáu i'r defnyddiwr, am ba bynnag reswm, i daro spacebar 1 2 3, a bydd hynny'n gyfreithlon. Ni fydd yn gweiddi ar y defnyddiwr dim ond oherwydd iddynt gyrraedd y spacebar ar ddechrau neu ar y diwedd, sydd ychydig yn ychydig yn fwy defnyddiwr-gyfeillgar. Unrhyw gwestiynau, yna, ar GetInts? Yeah? [Gwestiwn Myfyrwyr, annealladwy] >> Cwestiwn da. Beth os ydych yn teipio yn unig mewn golosg, fel f, a daro fynd i mewn heb erioed teipio 1 2 3; beth ydych chi'n credu y byddai ymddygiad y llinell o god wedyn? Felly gall sscanf gynnwys 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. Yn yr achos hwn, rwyf hefyd yn dal y sefyllfa honno, oherwydd bod y gwerth disgwyliedig rwyf eisiau yw 1. Dim ond am 1, a dim ond 1 peth i gael eu llenwi. Da cwestiwn. Eraill? Mae pob hawl, felly gadewch i ni fynd drwy bob un o'r swyddogaethau yn y fan hon, ond yr un sy'n ymddangos i fod, efallai, o ddiddordeb sy'n weddill yn GetString oherwydd ei fod yn troi allan bod 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. Felly, yn GetString, sy'n cymryd unrhyw ddadl yn unol â'r wag hyd yma, ac yn dychwelyd llinyn, ac felly yr wyf 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. Yn edrych fel gallu yn, yn ddiofyn, 0; ddim yn hollol siwr lle mae hyn yn mynd. Ddim yn siwr beth n mynd i gael ei ddefnyddio ar gyfer hyd yn hyn. Ond yn awr mae'n mynd ychydig yn fwy diddorol, felly yn unol 243, rydym yn datgan c int, mae hyn yn fath o fanylion dwp. Mae torgoch yn 8 darnau, a gall 8 did storio faint o werthoedd gwahanol? 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 gofio. Ond os ydych yn meddwl yn ôl at y siart ASCII mawr cawsom wythnosau yn ôl, oedd yno, yn yr achos hwnnw, 128 neu 256 o gymeriadau ASCII. Rydym yn defnyddio'r holl batrymau o 0 ac 1 yn i fyny. 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 yn awr gennych unrhyw ffordd o ddweud, "Nid yw hyn yn gymeriad legit, mae hyn yn rhywfaint o neges anghywir." Felly, beth yn y byd ei wneud yw, maent yn defnyddio'r gwerth mwyaf nesaf, rhywbeth fel int fel bod gennych nifer crazy o ddarnau, 32 am 4000000000 werthoedd posibl, fel y gallwch yn syml yn y pen draw gan ddefnyddio, hanfod, 257 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 sy'n cael ei galw fgetc; ffeil ystyr f, getc, ac yna stdin. Troi allan yn unig yw hwn y 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 gweld yn pset 4, 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? Storiwch yn c, ac yna gwirio, felly Im 'jyst yn defnyddio rhai cysyllteiriau boolean yma, gwirio nad yw'n gyfartal \ n, felly mae'r defnyddiwr wedi daro chofnoda. Rydym yn awyddus i roi'r gorau i ar y pwynt hwnnw, diwedd y ddolen, ac rydym hefyd am sicrhau gyfer y cysonyn arbennig, EOF, ac os ydych yn gwybod neu'n dyfalu - beth mae'n ei sefyll am? Diwedd y ffeil. Felly, mae hyn yn fath o nonsens, oherwydd os ydw 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. Diwedd y ffeil. Fel o'r neilltu, os ydych chi wedi taro erioed rheoli d yn eich bysellfwrdd, Nid yw y byddech wedi'u derbyn eto; ydych wedi taro rheolaeth c. Ond rheoli d anfon y EOF arbennig o'r enw gyson. Felly, nawr rydym yn unig wedi rhywfaint o ddyraniad cof deinamig. Felly, os n + 1> gallu, yn awr byddaf yn 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, yr hyn y mae angen i ni ei wneud wedyn yw dyrannu mwy o allu. Rydw i'n mynd i sgimio dros rai o'r rhifyddeg yma ac yn canolbwyntio yn unig ar y swyddogaeth yma. Rydych yn gwybod beth yw malloc, neu o leiaf yn gyffredinol cyfarwydd. Cymerwch dyfalu pa realloc yn ei wneud. [Ateb Myfyrwyr, annealladwy] >> Yeah. Ac nid yw'n 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 dim ond rhoi y cymeriadau llinynnau 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 yn cael plopped i mewn i gof yno, ond mae mwy o cof 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, roi 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 1 cymeriad unigol, ac os bydd y defnyddiwr mathau mewn 2 cymeriadau, GetString yn dod i ben i fyny galw realloc ac yn dweud, 'Ooh, nid yw 1 cymeriad yn ddigon. Rhowch fi 2 gymeriadau. ' Yna, os ydych yn darllen drwy resymeg y ddolen, mae'n mynd i ddweud, 'Ooh, y defnyddiwr deipio mewn 3 cymeriadau. Rhowch i mi yn awr nid 2 ond 4 nod, yna rhowch 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 beth allai fod y fantais o hynny? Pam ydw i'n dyblu maint y byffer, er bod y defnyddiwr bosibl y bydd yn angen 1 cymeriad ychwanegol oddi wrth y bysellfwrdd? [Ateb Myfyrwyr, annealladwy]. >> Beth sy'n bod? Yn union. Nid oes rhaid i chi dyfu mor aml. Ac mae hyn yn unig fath o - you're gwrychoedd 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 rhywfaint o le, yn tueddu i fod yn beth da. Ond os ydym yn darllen drwy'r rhan olaf GetString yma, ac unwaith eto, nad ydynt yn deall pob llinell sengl yma mor bwysig heddiw. Ond 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 am ddim, y byffer rhy fawr, os yw'n wir got dyblu gormod o weithiau. Yn fyr, dyna sut GetString wedi bod yn gweithio i gyd y tro hwn. Mae'r holl mae'n ei wneud yn cael ei ddarllen 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 gan alw 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. Mae 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 y mae iddo swyddogaeth prif ar y gwaelod, sy'n galw a foo swyddogaeth, a'r hyn y mae'n mynd heibio i foo? [Myfyrwyr] Dadl sengl. >> Ddadl Sengl. Felly argv [1], sy'n golygu bod y gair cyntaf 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? String. Does dim byd newydd yma, a bod y llinyn yn fympwyol cael eu galw bar. Yn y llinell yma, cols c [12], yn fath o lled-dechnegol Saesneg, beth yw y llinell hon yn ei wneud? Array o -? 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 rhaglenni unig yn golygu criw o le 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? Wel, mae'n debyg copïau bar, ei fewnbwn, i mewn i c, ond dim ond hyd at hyd y bar. Ond mae nam yma. Iawn, felly yn dechnegol y dylem ei wneud mewn gwirionedd strlen (bar) x sizeof (torgoch), mae hynny'n gywir. Ond yn yr achos gwaethaf yma, gadewch i ni gymryd yn ganiataol bod that's - felly, iawn. Yna mae 2 bugs. Felly sizeof (torgoch), popeth yn iawn, gadewch i ni wneud hyn ychydig yn ehangach. Felly nawr mae dal i fod yn byg, sef yr hyn? [Ateb Myfyrwyr, annealladwy] Gwirio >> ar gyfer yr hyn? Iawn, felly dylem fod yn gwirio gyfer NULL, gan fod pethau drwg yn digwydd pan fydd eich pwyntydd yn NULL, Oherwydd efallai y byddwch yn y pen draw yn mynd yno, ac ni ddylech byth yn mynd i NULL drwy dereferencing hyn gyda'r gweithredwr *. Felly mae hwnna'n dda, a beth arall rydym yn ei wneud? Yn rhesymegol mae nam yma hefyd. [Ateb Myfyrwyr, annealladwy] Felly >> gadarnhau a oes argc ≥ 2? Iawn, felly does 3 bugs yn y rhaglen hon yma. Nid ydym yn gwirio os yw'r defnyddiwr deipio mewn gwirionedd yn unrhyw beth i mewn i argv [1], yn dda. Felly beth yw'r bug trydydd? Yeah? [Ateb Myfyrwyr, annealladwy] >> da. Felly, rydym yn gwirio un senario. Rydym yn ymhlyg gwirio peidiwch â chopïo mwy o gof nag a fyddai'n fwy na hyd y bar. Felly, os yw'r llinyn y defnyddiwr deipio i mewn yn 10 nod o hyd, hyn yn ei ddweud, 'Dim ond copïo 10 nod.' Ac mae hynny'n iawn, ond beth os yw'r defnyddiwr yn teipio gair wrth yr anogwr fel o 20 gair cymeriad, mae hyn yn, gan 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 byffer gor-redeg ymosodiad, ac mae'n ymosodiad yn yr ystyr bod os yw'r defnyddiwr neu'r rhaglen sydd wedi galw eich swyddogaeth yn gwneud hyn yn faleisus, beth sy'n digwydd mewn gwirionedd y gallai nesaf fod yn eithaf gwael. Gadewch i ni edrych ar y darlun yma. Mae'r llun hwn yn cynrychioli eich pentwr o cof. A dwyn i gof bod pob tro y byddwch yn galw swyddogaeth, i chi gael y ffrâm ychydig ar y pentwr, ac wedyn un arall ac wedyn un arall ac yna un arall. Ac hyd yn hyn rydym wedi dim ond math o dynnu rhain i ffwrdd fel petryalau naill ai nad ar y bwrdd neu ar y sgrin yma. Ond os ydym yn chwyddo i mewn ar un o'r petryalau, pan fyddwch yn galw foo swyddogaeth, mae'n troi allan bod mwy ar y simnai y tu mewn y ffrâm a bod y petryal na dim ond x ac y a a a b, fel yr ydym yn siarad am gyfnewid. Mae'n troi allan bod rhai manylion lefel is, yn eu plith yn dychwelyd cyfeiriad. 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 yn agos ar ddiwedd y foo, sut y mae'r Heck yn foo yn gwybod lle mae rheolaeth y rhaglen i fod i fynd? Mae'n troi allan bod yr ateb i'r cwestiwn hwnnw yw 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 ffrâm Cadwyd yn ymwneud yn yr un modd i hyn. Bar * Char yma yn cynrychioli beth? Wel, yn awr, y segment glas yma yw foo yn ffrâm, beth yw bar? Iawn, felly bar yn unig y ddadl i'r swyddogaeth foo. Felly, nawr rydym ni'n ôl ar y darlun cyfarwydd. Mae mwy o stwff a gwrthdyniadau mwy ar y sgrin ond mae hyn yn segment glas golau yn 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 yn bar, sydd yn y paramedr hwn. Ond beth arall y dylai fod yn y pentwr, yn ôl y cod yma? Char c [12]. Felly, dylem hefyd yn gweld 12 sgwâr o gof, ddyrannu 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 12 bytes o'r fath. Ond dyma yw'r broblem: Ym mha cyfarwyddyd c tyfu? Trefnu o'r brig i lawr, dde? Os yw'n 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 ffrâm stac, sydd i'r dde i fyny yn erbyn y cyfeiriad dychwelyd; bod lle dim mwy. 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? Y tu mewn popeth arall, rhai ohonynt yn hynod bwysig. A'r peth mwyaf pwysig, o bosibl, yw'r bocs coch yno, cyfeiriad dychwelyd. Oherwydd debyg eich bod naill ai'n ddamweiniol neu'n adversarially trosysgrifo y 4 bytes, y cyfeiriad hwnnw pwyntydd, nid yn unig gyda garbage, ond gyda nifer sy'n digwydd i gynrychioli cyfeiriad gwirioneddol mewn cof? Beth yw'r implicaiton, yn rhesymegol? [Atebion Myfyrwyr, annealladwy] >> Yn union. Pan foo yn dychwelyd a hits y cyrliog Brace, mae'r rhaglen yn mynd i symud ymlaen i beidio â dychwelyd i'r prif, mae'n mynd i ddychwelyd i ba bynnag gyfeiriad sydd yn y bocs coch. Yn awr, yn achos cofrestru meddalwedd trechu, beth yw cyfeiriad sy'n cael ei ddychwelyd iddo yn y swyddogaeth sydd fel arfer yn cael ei alw ar ôl i chi wedi talu am y meddalwedd a mewnbynnu eich cod cofrestru? Gallech ddatrys o tric y cyfrifiadur yn peidio â mynd yma, ond yn hytrach, mynd i fyny yma. Neu, os ydych yn wirioneddol glyfar, gall gwrthwynebwr mewn gwirionedd deipio i mewn ar y bysellfwrdd, er enghraifft, nid air go iawn, nid 20 nod, ond mae'n debyg mae ef neu hi mathau mewn rhai cymeriadau sy'n cynrychioli cod? Ac nid yw'n mynd i fod yn C cod, mae'n mynd i fod yn y cymeriadau sy'n cynrychioli codau peiriant binary, 0 a 1. Ond mae'n debyg eu bod yn ddigon clyfar i wneud hynny, i rhywsut bastio i mewn i'r brydlon GetString rhywbeth sy'n cael ei llunio yn y bôn cod, ac y 4 bytes trosysgrifo y cyfeiriad dychwelyd, a beth mae hynny'n ei gyfeiriad mewnbwn yn ei wneud? Mae'n 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 yw, 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 dywedwn, fel arfer, helo, 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, A, A, A, A: Attack, ymosodiad, ymosodiad, ymosodiad, lle mae hyn yn unig yw rhywbeth sy'n gwneud rhywbeth drwg. Wel, 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, CO, 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 holl ffeiliau y defnyddiwr.' Neu 'Copïwch y cyfrineiriau,' neu 'Creu cyfrif defnyddiwr y gallaf ei logio i mewn.' 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 y cyfrifiadur. Gallwch wneud cyfrifiadur yn gwneud unrhyw beth yr hoffech yn syml gan ar ôl iddo neidio o gwmpas o fewn ei le cof ei hun. Ac felly, hyd y dydd hwn, felly llawer o raglenni a gwefannau cymaint o sy'n cael eu cyfaddawdu berwi i lawr i bobl yn cymryd mantais o hyn. A gallai hyn ymddangos fel ymosodiad super-soffistigedig, 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 yn dechrau darparu nonsens. Byddwch yn teipio gair mawr iawn yn y blwch chwilio a daro fynd i mewn, ac i chi aros i weld a fydd y damweiniau wefan. Neu i chi aros i weld a fydd y rhaglen yn amlygu rhywfaint o neges gwall. Oherwydd os ydych yn cael lwcus, fel y dyn drwg, a'ch bod yn darparu rhywfaint o fewnbwn crazy sy'n dyrfau 'r rhaglen, hynny'n golygu nad oedd y rhaglennydd yn rhagweld eich ymddygiad drwg sy'n golygu y gallwch mae'n debyg, gyda digon o ymdrech, treial digon a gwallau, 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 canfod eu 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 teipio i mewn i'ch gwefan yn y gobaith o orlifo rhywfaint o byffer? Ac mae hyn oll yw hanfodion syml yr hyn sydd yn array, a beth mae'n ei olygu i ddyrannu a defnyddio cof? Ac gysylltiedig â hynny, hefyd, yw hyn. Felly, gadewch i ni dim ond cipolwg tu mewn i 'n anawdd cathrena unwaith eto. Felly, cofiwch o wythnos neu ddwy yn ôl, pan fyddwch yn lusgo ffeiliau at eich recycle bin neu sbwriel yn gallu, beth sy'n digwydd? [Myfyrwyr] Dim byd. >> Yeah, dim byd o gwbl. 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, yna nid yw'n gwbl ddiogel. Mae pob eich roomate, ffrind neu aelod o'r teulu wedi ei wneud yw clicio ddwywaith, a voila. Mae holl ffeiliau bylchog eich bod wedi ceisio dileu. Felly, mae'r rhan fwyaf ohonom o leiaf yn gwybod bod yn rhaid i chi dde chlecia neu reoli cliciwch a gwagio'r sbwriel, neu rywbeth fel 'na. Ond hyd yn oed wedyn, nid yw hynny'n hollol wneud y tric. Oherwydd yr 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 0 a 1. Beth sy'n digwydd pan nad ydych ond yn llusgo y ffeil i'r bin sbwriel 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 wedi 1 colofn ar gyfer enwau ffeiliau, ac 1 colofn ar gyfer lleoliad y ffeil, yn lle y gallai hyn fod yn lleoliad 123, dim ond rhif ar hap. Felly, efallai y byddwn yn cael rhywbeth fel x.jpg, a lleoliad 123. A beth sy'n digwydd wedyn, pan fyddwch yn gwagio eich sbwriel? Sy'n mynd i ffwrdd. Ond yr hyn nad yw'n mynd i ffwrdd yw corff 0 ac 1 yn. Felly beth, felly, y cysylltiad i pset 4? Wel, gyda pset 4, dim ond oherwydd ein bod wedi dileu ddamweiniol y cerdyn fflach compact oedd pob un o'r lluniau, neu dim ond oherwydd ei fod trwy lwc ddrwg yn llygru, nid yw'n golygu nad y 0 a 1 yn dal i fod yno. Efallai ychydig ohonynt yn cael eu colli oherwydd bod rhywbeth got llygru yn yr ystyr bod rhai 0 o daeth 1 a 1 daeth 0 yn. 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 oedd y cyfrifiadur neu'r camera yn gwybod ble dechreuodd JPEG 1 a lle dechreuodd JPEG 2, ond os ydych chi, y rhaglennydd, gwybod, gydag ychydig o savvy, lle mae'r JPEG neu beth maen nhw'n edrych, gallwch ddadansoddi'r 0 o ac 1 a dweud, 'Ooh. JPEG. Ooh, 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, yw dechrau "ddiogel" dileu eich ffeiliau os hoffech i osgoi hyn yn gyfan gwbl. Ydw? [Gwestiwn Myfyrwyr, annealladwy] >> Cael cof yn fwy nag y gwnaethoch o'r blaen - Oh! Da cwestiwn. Felly, pam, ac yna, ar ôl gwagio'r sbwriel, mae eich cyfrifiadur yn dweud wrthych bod gennych mwy o le rhydd nag y gwnaethoch o'r blaen? Yn gryno, oherwydd ei fod yn gorwedd. Mwy dechnegol, oes gennych fwy o le. Oherwydd hyn yr ydych wedi'i ddweud, gallwch roi pethau eraill lle y ffeil unwaith oedd, ond nid yw hynny'n golygu y darnau yn mynd i ffwrdd, ac nid yw hynny'n golygu y darnau yn cael eu newid gwbl 0, er enghraifft, er eich lles. Ar y llaw arall, os ydych yn "ddiogel" ffeiliau dileu, dinistrio neu gorfforol 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. CS50.TV