DAVID Malan: pob hawl, croeso yn ôl. Mae hyn yn CS50. Mae hyn yn dechrau'r wythnos saith. Felly, mae wedi bod yn dipyn, felly yr wyf yn meddwl y byddem fynd ar daith corwynt o ble yr ydym gadael i ffwrdd a lle rydym yn awr yn mynd. Felly, y peth yma allai fod achosi rhywfaint o ing ar y dechrau. Ond gobeithio, eich bod yn dechrau acclimate i beth mae hyn yn dynodi yma - seren cynrychioli pwyntydd, sy'n dim ond yr hyn, mewn termau mwy lleygwr? Felly, ei fod yn gyfeiriad. Felly, ei fod yn y cyfeiriad rhywbeth yn y cof. Ac rydym yn dechrau croen yn ôl yr haenau ychydig o wythnosau yn ôl, pethau fel GetString ac eraill swyddogaethau o'r fath holl amser hwn wedi cael eu dychwelyd cyfeiriadau o bethau mewn cof, fel y cyfeiriad y cymeriad cyntaf yn rhywfaint o ddilyniant. Felly, rydym hefyd yn cyflwyno valgrind, sy'n byddwch yn dechrau ei ddefnyddio am y broblem hon gosod, yn enwedig ar gyfer y nesaf problem a osodwyd yn ogystal. A valgrind gwneud beth i ni? Mae'n gwirio am ddiferiadau cof, ac mae'n hefyd yn gwirio gyfer cam-drin o gof. Gall, gyda rhai tebygolrwydd, neu ganfod os eich cod yn mynd i gyffwrdd cof ei fod nid yn unig ddylai. Felly, nid o reidrwydd yn gollwng, ond os ydych yn mynd y tu hwnt i'r ffiniau rhai o'r amrywiaeth, ac yr ydych mewn gwirionedd yn rhedeg valgrind a chymell bod ymddygiad tra valgrind yn rhedeg yn eich rhaglen yn redeg tu mewn iddo, byddwch yn cael negeseuon fel hyn - "annilys ysgrifennu o maint 4, "sydd, yn cofio un neu ddau o wythnosau yn ôl yn golygu fy mod wedi ddamweiniol fel ar un int yn rhy bell tu hwnt i ffiniau'r arae. Ac felly faint 4 yn golygu yma y maint o'r int penodol. Felly, cymerwch gysur yn y ffaith bod allbwn valgrind, mae'r fformat ohono, yn unig erchyll. Mae'n anodd iawn gweld drwy'r llanast am y wybodaeth ddiddorol. Felly, yr hyn yr ydym wedi ei wneud yma yn unig yw dyfyniad rhai o'r cwpl o fwy llinellau diddorol. Ond yn sylweddoli bod 80% o valgrind yn allbwn yn mynd i fod yn dipyn o tynnu sylw. Edrychwch am batrymau fel y rhain - annilys gywir, yn annilys darllen, 40 bytes ac mae rhai nifer o flociau yn bendant colli, keywords fel 'na. A beth fydd, gobeithio, yn gweld rhywfaint o fath o olion o'r hyn a swyddogaeth y camgymeriad mewn gwirionedd i mewn Yn yr achos yma, ym mha llinell o fy cod y gwall oedd yn ôl pob golwg? 26 mewn ffeil o'r enw memory.c, a oedd yn yr enghraifft yr oeddem yn chwarae gyda ar y pryd. Felly, yn ôl pob tebyg nid yw'n mewn malloc. Yr oedd yn ôl pob tebyg yn fy cod lle hynny. Felly, byddwn yn gweld hyn eto ac unwaith eto cyn bo hir. Felly scanf, mae hyn yn dod i fyny mewn cwpl o ffurflenni hyd yn hyn. Gwelsom sscanf yn fyr. Roedd yn rhywbeth mae nifer o chi blymio i mewn yn eich paratoadau ar gyfer y cwis. Ac scanf mewn gwirionedd yr hyn y mae'r CS50 llyfrgell wedi bod yn ei ddefnyddio o dan y cwfl ers peth amser er mwyn i gael mewnbwn gan y defnyddiwr. Er enghraifft, os byddaf yn symud drosodd i'r CS50 offer yma, gadewch i mi agor yn enghraifft, heddiw fod ei alw scanf-0.c Ac mae'n syml super. Dim ond ychydig linellau o god. Ond mae'n dangos pa mor wir getInt wedi bod yn gweithio i gyd y tro hwn. Yn y rhaglen yma, yn unol 16 , Hysbysu fy mod datgan int. Felly dim awgrymiadau, dim byd hudol yno, dim ond int. Yna, yn unol 17, yr wyf yn annog y defnyddiwr ar gyfer nifer, os gwelwch yn dda. Yna, yn hwyr yn 18, yr wyf yn defnyddio scanf yma. Ac yr wyf yn benodol, math o fel printf, fy mod yn disgwyl dyfyniad unquote y cant i. Felly y cant i, wrth gwrs, yn dynodi int. Ond sylwi ar yr hyn yr ail ddadl i scanf yn. Sut fyddech chi'n disgrifio'r ail ddadl ar ôl y coma? Beth yw hynny? Mae'n y cyfeiriad x. Felly, mae hyn yn ddefnyddiol oherwydd trwy ddarparu scanf gyda chyfeiriad x, beth sy'n grymuso swyddogaeth honno ei wneud? Nid dim ond yn mynd yno, ond mae hefyd yn gwneud beth? Wneud newid iddo. Oherwydd y gallwch fynd yno, mae'n fath o fel map i leoliad yn y cof. A chyn belled ag y byddwch yn darparu scanf, neu unrhyw swyddogaeth gyda map o'r fath, Gall swyddogaeth fynd yno, ac nid yn unig edrych ar y gwerth, ond gall hefyd newid y gwerth, sy'n ddefnyddiol os pwrpas mewn bywyd o scanf yw sganio mewnbwn gan y defnyddiwr, yn benodol o'r bysellfwrdd. A'r f yn dynodi fformatio, yn union fel printf, mae'r f yn dynodi fformatio llinyn yr ydych am ei argraffu. Felly, yn fyr, mae hyn yn 18 llinell yn syml yn dweud, ceisio i ddarllen int gan y defnyddiwr bysellfwrdd ac yn ei storio y tu mewn o x, yn beth bynnag gyfeiriad x yn digwydd i fyw. Ac yna yn olaf, llinell 19 dim ond dweud, diolch am y int, yn yr achos hwn. Felly, gadewch i mi fynd yn ei flaen ac yn gwneud hyn. Felly gwnewch yn scanf 0. Gadewch i mi fynd yn ei flaen ac yn chwyddo i mewn 'N annhymerus' yn mynd a rhedeg hyn gyda dotiau slaes scanf 0. Rhif, os gwelwch yn dda? 50. Diolch am y 50. Felly, mae'n eithaf syml. Nawr beth nad yw'n ei wneud? Nid yw'n gwneud criw cyfan o gwirio camgymeriadau. Er enghraifft, os nad wyf yn cydweithredu, ac nid wyf yn teipio mewn nifer, ond yn lle hynny i mi ysgrifennu rhywbeth fel "helo," dyna'r unig fath o rhyfedd. Ac felly yn un o'r pethau y mae'r CS50 llyfrgell wedi bod yn ei wneud i ni ar gyfer rhai amser yw bod reprompting a reprompting. Mae'r ailgeisio ymadrodd cofio oedd yn cs50.c, a dyna'r rheswm y getInt yn y llyfrgell CS50 mewn gwirionedd yn ei chyfanrwydd criw o linellau hir, oherwydd ein bod yn gwirio am bethau gwirion fel hyn. A oedd y defnyddiwr beidio â rhoi ni, mewn gwirionedd, yn int? A wnaeth ef neu hi yn rhoi rhywbeth i ni fel llythyr yr wyddor? Os felly, rydym yn awyddus i ganfod hynny ac yn gweiddi arnynt. Ond mae pethau'n mynd yn fwy diddorol yn yr enghraifft nesaf. Os byddaf yn mynd i scanf-1.c, beth yw'r un beth sy'n cael ei newid yn sylfaenol yn yr enghraifft nesaf? Im 'yn arfer torgoch *, wrth gwrs, yn hytrach na int. Felly, mae hyn yn ddiddorol, oherwydd golosg *, galw i gof, mewn gwirionedd dim ond y un peth â llinyn. Felly, mae'n teimlo fel efallai fod hyn yn super gweithredu syml o GetString. Ond rwyf wedi plicio yn ôl yr haen y llyfrgell CS50, felly rwy'n galw hyn torgoch * awr. Felly, gadewch i ni weld lle, os unrhyw le, rydym yn mynd o'i le. Llinell 17 - Unwaith eto yn dweud, os gwelwch yn dda roi rhywbeth i mi, yn yr achos hwn, mae llinyn. Ac yna yn y llinell nesaf, galwaf scanf, unwaith eto, gan roi cod fformat, ond y tro hwn y cant s. Ac yna y tro hwn, rwy'n gan roi byffer. Nawr sylwi, dydw i ddim yn defnyddio y ampersand. Ond pam yw bod yn ôl pob tebyg iawn yma? Oherwydd mae'r hyn sy'n byffer yn barod? Mae eisoes yn pwyntydd. Mae'n eisoes yn gyfeiriad. A gadewch i ni yn y gair hwn "drysu," gadewch i mi dim ond ei alw s, er enghraifft, ar gyfer symlrwydd. Ond yr wyf wedi galw ei glustogi oherwydd yn gyffredinol, mewn rhaglennu, os oes gennych darn o gof, y mae mewn gwirionedd llinyn yn unig yw, efallai y byddwch yn galw ei fod yn byffer. Mae'n lle i storio gwybodaeth. Yn debyg i bethau fel YouTube, pan maent yn clustogi, fel petai, y yn unig yn golygu ei fod yn lawrlwytho darnau o y rhyngrwyd ac yn eu storio mewn amrywiaeth leol, darn lleol o gof er mwyn y gallwch chi ei wylio yn nes ymlaen heb mae'n sgipio neu yn hongian ar chi tra'n chwarae yn ôl. Felly mae yna broblem yma, fodd bynnag, gan fy mod yn dweud scanf, yn disgwyl llinyn gan y defnyddiwr. Dyma y cyfeiriad darn o gof. Rhowch y llinyn yno. Pam hynny rhwymo rhoi ni drafferth, er bod? Beth sy'n bod? Ydw i'n cael mynediad y rhan honno o cof? Rydych yn gwybod, nid wyf yn gwybod. Oherwydd wedi byffer wedi'i ymgychwyn i unrhyw beth? Ddim mewn gwirionedd. Ac felly mae'n hyn yr ydym wedi bod yn galw gwerth garbage, a Nid yn air ffurfiol. Mae'n jyst yn golygu nid oes gennym unrhyw syniad beth ddarnau y tu mewn i'r pedwar bytes sy'n Yr wyf wedi dyrannu fel byffer. Nid wyf wedi galw malloc. Yn sicr nid wyf wedi galw GetString. Felly, pwy a ŵyr beth yn union tu mewn byffer? Ac eto yn dweud scanf ddall, fynd yno a rhowch beth bynnag y defnyddiwr deipio. Felly, yr hyn sy'n debygol o achosi yn ein cod, os ydym yn rhedeg? Mae'n debyg segfault. Efallai na, ond mae'n debyg yn segfault. Ac yr wyf yn dweud efallai nad oherwydd weithiau chi ei wneud, weithiau nad ydych yn cael segfault. Weithiau, 'ch jyst yn cael lwcus, ond mae'n serch hynny yn mynd i fod yn a bug yn ein rhaglen. Felly, gadewch i mi fynd yn ei flaen ac yn llunio hyn. Rydw i'n mynd i wneud hynny yn yr hen ffordd ysgol. Felly dash clang 0, scanf-1, scanf-1.c, Enter. Wps, yr ysgol yn rhy hen. Gadewch i ni weld. Ble wnes i fynd? O, torgoch * byffer. O, diolch i chi - Cadw, OK - ysgol yn hen iawn. Iawn, mae wedi bod yn dipyn. Felly, yr wyf wedi arbed y ffeil ar ôl dim ond wneud y dros dro newid funud yn ôl. Ac yn awr yr wyf wedi llunio ei llaw gyda clang. Ac yn awr yr wyf i'n mynd i fynd yn ei flaen ac yn rhedeg scanf-1, Enter. String gwelwch yn dda. 'N annhymerus' deipio i mewn "helo." Ac yn awr, dyma lle, dweud y gwir, printf Gall ychydig yn blino. Dyw hi ddim yn wir yn mynd i segfault yn yr achos hwn. Printf ychydig yn arbennig oherwydd mae mor super a ddefnyddir yn gyffredin sy'n hanfod printf yn ei wneud i ni o blaid ac yn gwireddu, dyw hynny ddim yn pwyntydd dilys. Gadewch i mi gymryd ef ar fy hun i ychydig argraffu mewn cromfachau null, hyd yn oed er nad yw'n reidrwydd yn beth ydym ni ein hunain disgwyl. Felly, ni allwn mewn gwirionedd yn hawdd cymell segfault â hyn, ond yn amlwg mae hyn Nid yw ymddygiad oeddwn i eisiau. Felly beth yw'r ateb syml? Wel, yn scanf-2, gadewch i mi yn cynnig y yn hytrach na mewn gwirionedd dim ond ddyrannu torgoch *, gadewch i mi fod ychydig yn fwy craff am hyn, a gadewch i mi dyrannu byffer fel cyfres o 16 chars. Felly, yr wyf yn gallu gwneud hyn mewn dwy ffordd. Gallwn hollol ddefnyddio malloc. Ond gallaf fynd yn ôl i wythnos dau pan Fi jyst angen criw cyfan o cymeriadau. Dyna dim ond arae. Felly, gadewch i mi yn lle hynny ailddiffinio byffer i fod yn amrywiaeth o 16 nod. Ac yn awr, pan fyddaf yn pasio byffer i mewn - ac mae hyn yn rhywbeth nad ydym yn gwneud siarad am yn ail wythnos - ond gallwch drin amrywiaeth fel er ei fod yn gyfeiriad. Yn dechnegol, fel yr ydym wedi gweld, maen nhw'n ychydig yn wahanol. Ond ni fydd ots scanf os byddwch yn ei throsglwyddo enw arae, oherwydd yr hyn Bydd clang wneud i ni yn ei hanfod trin enw'r amrywiaeth gan fod y cyfeiriad y darn o 16 bytes. Felly, mae hyn yn well. Mae hyn yn golygu yn awr y gallaf, gobeithio, wneud y canlynol. Gadewch i mi chwyddo allan am hyn o bryd ac yn gwneud scanf-2, a luniwyd OK. Nawr, gadewch i mi yn cael slaes scanf-2. String gwelwch yn dda. "Helo." Ac mae'n yn ymddangos i weithio y tro hwn. Ond gall rhywun gynnig senario lle na allai fod yn dal i weithio? Yeah? Rhywbeth yn hwy na 16 nod. Ac mewn gwirionedd, gallwn fod yn ychydig yn fwy manwl gywir. Rhywbeth hirach yna 15 cymeriadau, oherwydd gwir angen i ni gadw mewn cof bod angen y slaes sero ymhlyg ar ddiwedd y llinyn, sy'n bydd yn scanf o'r neilltu fel arfer yn gofalu am i ni. Felly, gadewch i mi wneud rhywbeth fel - weithiau gallwn yn unig ei adael fel 'na. Iawn, felly rydym wedi awr a ysgogwyd ein wall. Pam? Gan fy mod yn teipio i fwy na 15 cymeriadau, ac felly rydym wedi gwirionedd cof cyffwrdd fy mod mewn gwirionedd yn Ni ddylai fod. Felly, yr hyn sy'n wirioneddol yr ateb yma? Wel, beth os bydd angen llinyn hirach? Wel, yr ydym efallai yn ei gwneud yn 32 bytes. Wel, beth os nad yw hynny'n ddigon hir? Beth am 64 bytes? Beth os nad yw hynny'n ddigon hir? Beth am 128 neu 200 bytes? Beth mewn gwirionedd yw'r ateb yma yn y achos cyffredinol, os nad ydym yn gwybod yn ymlaen llaw yr hyn y mae'r defnyddiwr yn mynd i deipio? 'I' jyst fath o boen mawr yn y ass, i fod yn onest, a dyna pam mae'r Llyfrgell CS50 Mae gan ychydig o linellau dwsin o cod sy'n chydweithio i sicrhau GetString llinyn mewn ffordd nad ydym yn ei wneud rhaid i chi wybod ymlaen llaw beth y defnyddiwr yn mynd i deipio. Yn benodol, os ydych yn edrych yn ôl ar cs50.c o ddwy wythnos yn ôl, byddwch yn gweld bod GetString ei wneud mewn gwirionedd â defnyddio'r scanf yn y modd hwn. Yn hytrach, mae'n darllen un cymeriad ar y tro. Oherwydd yr un peth braf am darllen un cymeriad yw ein gallu gwarantu ein hunain i bob amser yn fod ag o leiaf un torgoch. Gallaf ddatgan golosg, ac yna cymryd y camau gwirioneddol babi i ddim ond darllen un gymeriad i mewn ar amser o'r bysellfwrdd. Ac yna, beth byddwch yn gweld GetString ei wneud yw bob tro yn rhedeg allan o, dweud, 16 bytes o gof, mae'n defnyddio malloc, neu gefnder ohono, i dyrannu mwy o gof, copïo hen cof yn y newydd, ac yna cropian ynghyd, cael un cymeriad ar y tro, a phan fydd yn rhedeg allan o'r darn o gof, yn taflu i ffwrdd, hennill fwy darn o gof, copïau hen i mewn i newydd, ac ailddarllediadau. Ac mae'n wir yn boen i mewn gwirionedd gweithredu rhywbeth mor syml â cael mewnbwn gan ddefnyddiwr. Felly, gallwch ddefnyddio scanf. Gallwch ddefnyddio swyddogaethau tebyg eraill. Ac mae llawer o werslyfrau ac ar-lein enghreifftiau yn ei wneud, ond maen nhw i gyd agored i broblemau fel hyn. Ac yn y pen draw, cael a segfault yn fath o blino. Dyw e ddim yn dda ar gyfer y defnyddiwr. Ond yn yr achos gwaethaf, beth mae ei fod yn sylfaenol yn rhoi eich cod sydd mewn perygl o? Rhyw fath o ymosodiad, o bosibl. Buom yn siarad am un ymosodiad o'r fath - gorlifo y pentwr. Ond yn gyffredinol, os ydych yn cael gorlif byffer, fel y gwnaethom cwpl o wythnosau yn ôl, gyda dim ond ysgrifennu mwy na "helo" ar y pentwr, eich Gall yn wir yn cymryd drosodd, o bosibl, a cyfrifiadur, neu o leiaf yn cael ar ddata sy'n nad yw'n perthyn i chi. Felly, yn fyr, dyma pam yr ydym wedi olwynion hyfforddi hynny. Ond nawr, rydym yn dechrau i fynd â nhw i ffwrdd, gan nad oes mwyach angen ein rhaglenni, reidrwydd, mewnbwn gan y defnyddiwr. Ond yn achos y broblem a chwech, Bydd eich cyfraniad yn dod o enfawr ffeil geiriadur gyda 150 rhai od mil o eiriau. Felly, ni fydd yn rhaid i chi boeni am mewnbwn mympwyol y defnyddiwr. Byddwn yn rhoi i chi rai tybiaethau am hynny ffeil. Unrhyw gwestiynau am awgrymiadau neu scanf neu fewnbwn defnyddwyr yn gyffredinol? Mae pob hawl, felly edrych yn sydyn ac yna ar un trailing pwnc o ddwy wythnos yn ôl. A dyna oedd y syniad hwn o strwythur. Nid bod - syniad hwn o strwythur, a oedd yn beth? Beth oedd strwythur yn ei wneud i ni? Diffinio - Mae'n ddrwg? Diffinio math amrywiol. Felly datrys o. Rydym yn mewn gwirionedd yn cyfuno dau bwnc. Felly, gyda typedef, dwyn i gof y gallwn datgan math o ein hunain, fel cyfystyr, fel llinyn ar gyfer torgoch *. Ond gan ddefnyddio typedef a strwythur, gallwn creu wirioneddol ein strwythurau data hunain. Er enghraifft, os byddaf yn mynd yn ôl i gedit yma am ddim ond hyn o bryd, ac yr wyf yn mynd yn ei flaen ac yn gwneud rhywbeth fel, gadewch i mi arbed hyn fel, gadewch i ni ddweud, structs.c dros dro, Im 'jyst yn mynd i fynd yn ei flaen ac yn cynnwys standardio.h, int prif ddi-rym. Ac yna yma, mae'n debyg fy mod am i ysgrifennu rhaglen sy'n storio fyfyrwyr lluosog o lluosog tai, er enghraifft. Felly, mae fel registrarial cronfa ddata o ryw fath. Felly, os oes angen yr enw un myfyriwr, yr wyf yn gallai wneud rhywbeth fel enw torgoch *, a byddaf yn gwneud rhywbeth fel - mewn gwirionedd, gadewch i ni ddefnyddio'r llyfrgell CS50 am ddim ond ennyd i wneud hyn yn ychydig yn symlach, fel y gallwn fenthyg hynny dwsinau o linellau o god. A gadewch i 'jyst cadw pethau'n syml. Byddwn yn cadw llinyn, ac yn awr GetString. Felly yr wyf yn honni yn awr fy mod i wedi ei storio enw o rai myfyriwr, a thŷ rhai myfyrwyr, yn syml gan ddefnyddio newidynnau fel y gwnaethom ac mewn un wythnos. Ond mae'n debyg wyf yn awr am gefnogi myfyrwyr lluosog. Mae pob hawl, felly mae fy greddfau yn ymwneud llinyn name2, yn cael GetString, llinyn house2 cael GetString. Ac yna ein trydydd myfyrwyr, gadewch i ni wneud name3 GetString. Mae pob hawl, felly mae hyn yn gobeithio drawiadol chi fel math o dwp, oherwydd bod y broses hon yn wirioneddol byth yn mynd i ben, ac mae'n dim ond yn mynd i gwneud fy cod yn edrych yn waeth ac yn waeth ac yn waeth. Ond rydym yn datrys hyn hefyd yn yr wythnos dau. Beth oedd ein ateb yn gymharol lân pan oedd gennym newidynnau lluosog o'r math data un bod i gyd yn gysylltiedig, ond nid oeddem am y llanast erchyll o newidynnau a enwir yn yr un modd? Beth wnaethon ni ei wneud yn lle hynny? Felly, yr wyf yn meddwl fy mod wedi clywed ambell le. Cawsom arae. Os ydych chi am achosion lluosog o rhywbeth, pam nad ydym yn glanhau hyn i gyd i fyny ac yn dweud, yn rhoi i mi amrywiaeth galw enwau? Ac am y tro, gadewch i ni cod caled 3. Ac yna rhoi amrywiaeth arall i mi a elwir yn dai, a gadewch i mi am nawr cod caled 3. Ac yr wyf wedi glanhau aruthrol i fyny'r llanast yr wyf newydd ei greu. Yn awr, yr wyf wedi dal codio galed 3, ond hyd yn oed gallai'r 3 yn dod yn ddeinamig gan y defnyddiwr, neu argv, neu debyg. Felly, mae hyn eisoes yn lanach. Ond yr hyn sy'n blino am hyn yw bod erbyn hyn, er bod enw rywsut gysylltiedig yn sylfaenol i tŷ myfyriwr - ei fod yn fyfyriwr fy mod i wir am gynrychioli - Yr wyf yn awr wedi dau araeau sy'n gyfochrog yn yr ystyr eu bod yn y un maint, ac enwau braced 0 mapiau yn ôl pob tebyg i dai braced 0, ac enwau braced 1 fapiau i dai braced 1. Mewn geiriau eraill, y myfyriwr hwnnw yn byw yn tŷ hwnnw, a bod y myfyriwr arall byw yn y tŷ arall. Ond yn sicr gallai hyn fod yn wneud hyd yn oed yn fwy lân. Wel, gall, mewn gwirionedd. A gadewch i mi fynd yn ei flaen ac yn agor structs.h i fyny, ac yr ydych chi helpu gweld y syniad yma. Hysbysu fy mod wedi defnyddio typedef, fel y cyfeirio at funud yn ôl i ddatgan ein math data eu hunain. Ond rwyf hefyd yn defnyddio'r gair allweddol eraill a elwir yn strwythur sy'n rhoi newydd i mi strwythur data. Ac mae hyn yn strwythur data gallaf wneud cais yn mynd i gael dau beth tu mewn iddo - llinyn alwodd ei enw, a llinyn o'r enw tŷ. Ac enw yr wyf i'n mynd i roi i y strwythur data yn mynd i gael ei alw myfyrwyr. Y gallwn ei alw'n unrhyw beth rwyf eisiau, ond mae hyn yn semantig yn gwneud synnwyr i mi yn fy meddwl. Felly nawr, os wyf yn agor fersiwn gwell y rhaglen i mi ddechrau ysgrifennu yno, gadewch i mi sgrolio i'r brig. Ac mae mwy o linellau cod yma, ond gadewch i mi ganolbwyntio ar hyn o bryd ar un. Rwyf wedi datgan yn gyson fyfyrwyr elwir yn a'i godio caled 3 am y tro. Ond yn awr, yn sylwi pa mor lân fy cod yn dechrau ei gael. Yn unol 22, yr wyf yn datgan amrywiaeth o fyfyrwyr. Ac yn sylwi y myfyriwr hwnnw yn ôl pob golwg bellach yn fath data. Gan fod ar frig y ffeil, sylwch Rwyf wedi cynnwys y ffeil flaen fy mod yn tynnu i fyny ychydig funudau'n ôl. A bod ffeil flaen yn syml wedi diffiniad hwn o fyfyriwr. Felly nawr, rwyf wedi creu fy data addef arfer fath bod yr awduron o flynyddoedd C Nid yn ôl, yn meddwl am o flaen llaw. Ond dim problem. Gallaf wneud fy hun. Felly mae hwn yn amrywiaeth o'r enw myfyrwyr, pob un o'i aelodau yn strwythur myfyrwyr. Ac yr wyf am dair o'r rhai a yn y rhesi. Ac yn awr, yr hyn yn gwneud y gweddill y rhaglen hon yn ei wneud? Yr wyf angen rhywbeth ychydig yn fympwyol. Felly, o ar-lein 24 ymlaen, I ailadrodd 0-3. Byddaf wedyn yn gofyn i'r defnyddiwr ar gyfer enw'r myfyriwr. Ac yna yr wyf yn defnyddio GetString fel o'r blaen. Yna mi ofyn am dŷ y myfyriwr, ac yr wyf yn defnyddio GetString fel o'r blaen. Ond rybudd - ychydig yn newydd darn o gystrawen - Gallaf dal i mynegai i'r myfyriwr i-fed, ond sut ydw i'n cael yn y data penodol y tu mewn i faes y strwythur? Wel, beth mae'n debyg y darn newydd o gystrawen? Dim ond y gweithredwr dot. Nid ydym wedi gweld mewn gwirionedd hyn o'r blaen. Rydych chi wedi gweld hynny yn pset pump os ydych wedi deifio yn barod gyda ffeiliau didfap. Ond mae'r dot yn unig yn golygu y tu mewn o hyn strwythur neu feysydd lluosog, yn rhoi dot enw, neu roi dy dot mi. Mae hynny'n golygu mynd y tu mewn i'r strwythur a chael meysydd penodol hynny. Beth mae gweddill y rhaglen yn ei wneud? Nid yw popeth a sexy. Hysbysiad fy mod yn ailadrodd 0-3 eto, ac yr wyf yn syml yn creu Saesneg ymadrodd fel hyn ac felly mae yn y fath a tŷ o'r fath, gan fynd heibio yn enw'r dot o y myfyriwr i-fed ac mae eu tŷ hefyd. Ac yna yn olaf, yn awr rydym yn bydd yn dechrau cael rhefrol am hyn, yn awr ein bod yn gyfarwydd â'r hyn malloc a swyddogaethau eraill wedi bod yn gwneud yr holl amser hwn. Pam fod rhaid i mi ryddhau yn enw a thŷ, er fy mod yn Nid oedd galw malloc? Wnaeth GetString. A dyna oedd y gyfrinach budr bach ar gyfer nifer o wythnosau, ond mae GetString wedi bod yn gollwng cof ar draws y rhoi'r holl semester hyd yn hyn. A bydd yn valgrand yn olaf datgelu hyn i ni. Ond nid yw'n beth mawr, oherwydd yr wyf yn gwybod y gallaf yn syml rhad ac am ddim yr enw a'r tŷ, er yn dechnegol, i fod yn super, super ddiogel, ddylwn i fod yn gwneud rhyw wall gwirio yma. Beth yw eich greddf yn dweud wrthych? Beth ddylwn i fod yn chwilio am cyn i mi ryddhau beth yw llinyn, aka y torgoch yn *? Dylid Fi 'n sylweddol yn gwirio os bydd myfyrwyr Nid yw braced i enw dot yn null cyfartal. Yna, bydd yn cael ei iawn i fynd yn ei flaen ac yn rhad ac am ddim y pwyntydd, ac yn yr un neu'r llall un hefyd. Os nad yw myfyrwyr braced i dŷ dot yn cyfartal i null, mae hyn yn awr yn gwarchod yn erbyn yr achos gornel lle GetString dychwelyd rhywbeth fel null. A gwelsom eiliad yn ôl, printf bydd gwarchod ni i fyny yma gan dim ond dweud null, sydd yn mynd i edrych yn rhyfedd. Ond o leiaf ni fydd yn segfault, fel yr ydym wedi ei weld. Wel, gadewch i mi wneud un peth arall yma. structs-0 yn fath o raglen dwp oherwydd fy mod yn mynd i mewn yr holl ddata hwn, ac yna ei fod yn colli unwaith y bydd y rhaglen yn dod i ben. Ond gadewch i mi fynd ymlaen a gwneud hyn. Gadewch imi wneud y derfynell ffenestr ychydig yn fwy. Gadewch imi wneud structs-1, sy'n yn fersiwn newydd o hyn. 'N annhymerus' chwyddo i mewn ychydig. Ac yn awr gadewch i mi redeg dot slaes structs-1. Enw'r Myfyriwr - David Mather, gadewch i ni wneud Rob Kirkland, gadewch i ni wneud Lauren Leverett. Beth sy'n ddiddorol yn awr yw hysbysiad - a dim ond yn gwybod hyn oherwydd Ysgrifennais y rhaglen - mae 'na ffeil nawr ar fy cyfredol cyfeiriadur o'r enw students.csv. Efallai y bydd rhai ohonoch wedi gweld hyn yn y byd go iawn. Beth yw ffeil CSV? Gwerthoedd atalnod-gwahanu. Mae'n fath o fel dyn gwael yn fersiwn o'r ffeil Excel. Mae'n tabl o resi a cholofnau sy'n gallwch agor mewn rhaglen fel Excel, neu Niferoedd ar Mac. Ac os ydw i'n agor y ffeil yma ar gedit, rybudd - ac nid y niferoedd yno. Dyna dim ond gedit dweud mi rhifau llinell. Sylwch ar y llinell gyntaf y ffeil yn David a Mather. Mae'r llinell nesaf yw Rob coma Kirkland. A'r drydedd linell yn Lauren coma Leverett. Felly, yr hyn yr wyf wedi creu? Rwyf bellach wedi ysgrifennu rhaglen C a effeithiol yn gallu cynhyrchu taenlenni y gellir eu hagor mewn rhaglen fel Excel. Nid yw pob bod cymhellol set ddata, ond os oes gennych darnau llawer mwy o data yr ydych yn ei eisiau trin a gwneud graffiau a fel, efallai bod hyn yn un ffordd i greu'r data. Ar ben hynny, CSVs mewn gwirionedd super gyffredin yn unig ar gyfer storio data syml - Yahoo Cyllid, er enghraifft, os ydych yn cael dyfyniadau stoc trwy eu hyn a elwir yn API, mae'r gwasanaeth yn rhad ac am ddim sy'n eich galluogi i cael stoc i fyny-i-y-dyddiad cyfredol dyfynbrisiau ar gyfer cwmnïau, maent yn rhoi data yn ôl yn y super fformat CSV syml. Felly sut wnaethom ni wneud hynny? Wel sylwi, mae'r rhan fwyaf o'r rhaglen hon yn bron yr un fath. Ond rhybudd i lawr yma, yn hytrach na phrint y myfyrwyr allan, ar-lein 35 ymlaen, yr wyf yn honni fy mod yn arbed y myfyrwyr i ddisg, felly arbed ffeil. Felly sylwi Rwy'n datgan FILE * - nawr, mae hyn yn fath o anghysondeb yn C. Am ba bynnag reswm, FFEIL i gyd capiau, nad yw fel y rhan fwyaf o fathau data arall yn C. Ond mae hyn yn adeiledig yn math data, FILE *. A dwi'n datgan pwyntydd i ffeil, yw sut y gallwch chi feddwl am hynny. fopen golygu ffeil agored. Pa ffeil ydych chi eisiau eu hagor? Yr wyf am i agor ffeil y byddaf yn fympwyol ffoniwch students.csv. Y gallwn ei alw'n bod unrhyw beth yr wyf eisiau. Ac yna yn cymryd dyfalu. Beth mae'r ail ddadl i fopen yn ôl pob tebyg yn ei olygu? Iawn, w ar gyfer ysgrifennu, gallai yn r ar gyfer darllen. Mae yna i atodi os ydych yn am ychwanegu rhesi, ac nid ysgrifennu dros y holl beth. Ond yr wyf am i greu'r ffeil unwaith, felly byddaf yn defnyddio dyfyniad unquote w. Ac yr wyf yn gwybod mai dim ond o ôl darllen y dogfennau, neu'r dudalen dyn. Os nad yw ffeil yn null - mewn geiriau eraill, os bydd unrhyw beth yn mynd o'i le yno - gadewch i mi ailadrodd dros y fyfyrwyr 0-3. Ac yn awr sylwi mae yna rywbeth erioed felly ychydig yn wahanol am llinell 41 yma. Dyw hi ddim yn printf. Mae'n fprintf ar gyfer ffeil printf. Felly, mae'n mynd i ysgrifennu i ffeil. Pa ffeil? Mae'r un y mae ei pwyntydd eich bod yn nodi gan fod y ddadl gyntaf. Yna, rydym yn pennu llinyn fformat. Yna, rydym yn nodi pa llinyn yr ydym am ei plwg i mewn ar gyfer y cant yn gyntaf, a yna newidyn arall neu yr ail cant s. Yna rydym yn cau'r ffeil gyda mmap. Nag yr oeddwn yn rhad ac am ddim y cof fel o'r blaen, er bod Dylwn i fynd yn ôl i mewn ac ychwanegu rhai gwiriadau ar gyfer null. A dyna ni. fopen, fprintf, mmap rhoi i mi y gallu i greu ffeiliau testun. Yn awr, byddwch yn gweld mewn datrys set pump, sy'n cynnwys delweddau, byddwch yn defnyddio ffeiliau deuaidd yn lle hynny. Ond yn y bôn, y syniad yw yr un fath, er bod y swyddogaethau a wnewch chi helpu gweld yn ychydig yn wahanol. Felly taith corwynt, ond byddwch yn cael yn llawer rhy gyfarwydd â ffeil I/O-- mewnbwn ac allbwn - gyda pset pump. Ac unrhyw gwestiynau am y sylfaenol cychwynnol yma? Yeah? Beth os ydych yn ceisio i ryddhau gwerth nwl? Yr wyf yn credu, oni bai am ddim wedi gotten hawdd ei ddefnyddio ychydig yn fwy, gallwch o bosibl segfault. Basio null yn ddrwg oherwydd nid wyf yn yn credu ddim trafferthu i wirio ar eich rhan, oherwydd byddai o bosibl fod yn wastraff o amser iddo wneud ei hun am pawb yn y byd. Gwestiwn da, er. Mae pob hawl, felly y math hwn o yn cael ni i bwnc diddorol. Thema'r broblem set bump oed yn fforensig. O leiaf dyna cyfran y broblem a osodwyd. Fforensig yn gyffredinol yn cyfeirio at y adennill gwybodaeth ofyn hwnnw neu Efallai na fydd wedi eu dileu yn fwriadol. Ac felly yr wyf yn meddwl y byddwn i'n rhoi i chi cyflym blas o'r hyn sy'n digwydd mewn gwirionedd ar yr holl y tro hwn o dan y cwfl ar eich cyfrifiadur. Er enghraifft, os oes gennych tu mewn i'ch gliniadur neu eich bwrdd gwaith cyfrifiadur 'n anawdd cathrena, mae'n naill ai fecanyddol ddyfais sydd mewn gwirionedd yn troelli - mae pethau crwn o'r enw platiau sy'n edrych yn eithaf hoffi hyn yr wyf newydd gael i fyny ar y sgrîn yma, er mae hyn yn dod yn fwyfwy hen ysgol. Mae hwn yn dair-a-a-hanner-modfedd 'n anawdd cathrena. A thair a hanner modfedd yn cyfeirio o gyda y peth pan fyddwch yn gosod ei mewn cyfrifiadur. Llawer ohonoch guys yn eich gliniaduron yn awr rhaid i gyriannau solet-wladwriaeth, neu AGCau, sydd wedi dim rhannau symudol. Maent yn fwy fel RAM ac yn llai fel dyfeisiau mecanyddol hyn. Ond mae'r syniadau yn dal i fod yr un fath, yn sicr y maent yn ymwneud i broblem a osodwyd pump. Ac os ydych yn meddwl am nawr 'n anawdd cathrena cynrychioli fod yn gylch, sy'n 'N annhymerus' yn tynnu fel hyn yma. Pan fyddwch yn creu ffeil ar eich cyfrifiadur, a yw'n 'an SSD, neu mewn yr achos hwn, mae 'n anawdd cathrena ysgol hŷn, y ffeil yn cynnwys darnau lluosog. Gadewch i ni ddweud ei fod yn hyn 0 ac 1, criw cyfan o 0s a 1s. Felly, mae hyn yn fy disg caled cyfan. Mae hyn yn debyg ffeil eithaf mawr. Ac mae'n defnyddio hyd yr 0au ac 1 ar y cyfran o'r ddysgl corfforol. Wel, beth yw y rhan corfforol? Wel, mae'n ymddangos fod ar yriant caled, o leiaf o'r math hwn, mae gronynnau magnetig bach bach hyn. Ac maent yn y bôn wedi gogledd a polion de iddynt, felly os ydych yn troi un o ronynnau magnetig hynny y modd hwn, efallai y byddwch yn dweud ei fod yn cynrychioli 1. Ac os yw'n wyneb i waered i'r de i gogledd, efallai y byddwch yn dweud ei fod yn cynrychioli 0. Felly, yn y byd corfforol go iawn, mae hynny'n sut y gallech gynrychioli rhywbeth yn cyflwr deuaidd o 0 a 1. Felly dyna i gyd bydd ffeil yn. Mae criw cyfan o magnetig gronynnau sy'n eu ffordd hon neu y ffordd hon, patrymau creu o 0s a 1s. Ond mae'n troi allan pan fyddwch yn arbed ffeil, rhywfaint o wybodaeth yn cael ei arbed ar wahân. Felly, mae hyn ychydig yn dabl, cyfeiriadur, fel petai. A byddaf yn galw hyn yn enw golofn, a 'N annhymerus' galw lleoliad y golofn hon. Ac yr wyf i'n mynd i ddweud, mae'n debyg hwn yw fy ailddechrau. Fy resume.doc yn cael ei storio ar lleoliad, gadewch i ni ddweud 123. Rwyf bob amser yn mynd am y nifer hwnnw. Ond digon yw dweud mai dim ond fel yn RAM, gallwch gymryd gyriant caled mae hynny'n gigabeit neu 200 gigabeit neu terabeit, a gallwch nifer yr holl bytes. Gallwch rifedi ar yr holl ddarnau o 8 did. Felly, byddwn yn dweud bod hyn yn yn 123 lleoliad. Felly, y cyfeiriadur hwn tu mewn fy gweithredu system cofio bod fy ailddechrau ar leoliad 123. Ond mae'n mynd yn ddiddorol pan fyddwch yn dileu ffeil. Felly, er enghraifft - , a diolch byth, mae'r rhan fwyaf o'r byd dal ar hyn - beth sy'n digwydd pan rydych yn llusgo ffeil ar eich Mac OS Trash neu 'ch Ffenestri Recycle Bin? Beth yw pwrpas o wneud hynny? Mae'n amlwg i gael gwared ar y ffeil, ond beth mae'r weithred o lusgo a gollwng i mewn i'ch Trash neu eich Recycle Bin gwneud ar gyfrifiadur? Dim byd o gwbl, mewn gwirionedd. Mae'n union fel ffolder. Mae'n ffolder arbennig, i fod yn sicr. Ond a yw'n mewn gwirionedd yn dileu'r ffeil? Wel, na, oherwydd bod rhai ohonoch yn ôl pob tebyg wedi bod yn debyg, oh damn, na wnaethoch chi yn ei olygu i wneud hynny. Felly, byddwch yn blygu chlecia 'r Sbwriel neu Recycle Bin. Rydych chi wedi poked o gwmpas ac rydych chi wedi adennill y ffeil yn unig gan ei lusgo allan o yno. Felly, yn amlwg, nid yw o reidrwydd ei ddileu. OK, rydych yn gallach na hynny. Rydych yn gwybod mai dim ond llusgo i mewn i'r Nid yw sbwriel neu Recycle Bin yn golygu eich bod yn gwagio'r sbwriel. Felly, byddwch yn mynd i fyny at y fwydlen, ac yr ydych yn dweud Trash wag neu Gwag Recycle Chist. Yna, beth sy'n digwydd? Yeah, felly mae'n cael ei ddileu yn fwy felly. Ond y cyfan sy'n digwydd yw hyn. Mae'r cyfrifiadur yn anghofio ble Roedd resume.doc. Ond nid yw hyn wedi newid yn ôl pob golwg yn y llun? Y darnau, y 0s a 1s y gallaf wneud cais yn ar y safle o ryw agwedd gorfforol y caledwedd. Maen nhw'n dal i fod yno. Dim ond y cyfrifiadur anghofio beth ydynt. Felly, mae'n cael ei rhyddhau yn y bôn y ffeil yn darnau fel y gellir eu hailddefnyddio. Ond nid hyd nes y byddwch yn creu fwy o ffeiliau, a ffeiliau mwy, a mwy o ffeiliau yn probabilistically, y rhai 0s a 1s, gronynnau magnetig hynny, yn cael ei ailddefnyddio, ochr upside neu i'r dde i fyny, ar gyfer ffeiliau eraill, 0s a 1s. Felly, mae gennych ffenestr hon o amser. Ac nid yw'n o rhagweladwy hyd, mewn gwirionedd. Mae'n dibynnu ar faint eich caled gyrru a faint o ffeiliau sydd gennych a pa mor gyflym y byddwch yn gwneud rhai newydd. Ond mae ffenestr hon o amser yn ystod y mae'r ffeil yn dal i fod yn berffaith adferadwy. Felly, os ydych chi erioed wedi defnyddio rhaglenni fel McAfee neu Norton i geisio adennill data, i gyd maent yn ei wneud yw ceisio adennill y cyfeiriadur hyn a elwir i chyfrif i maes ble mae eich ffeil yn. Ac weithiau bydd Norton a dweud, ffeil yn 93% adferadwy. Wel, beth mae hynny'n ei olygu? Mai dim ond yn golygu bod rhai ffeil eraill a ddaeth i ben i fyny gan ddefnyddio gyd-ddigwyddiad, yn dweud, darnau hynny allan o'ch ffeil wreiddiol. Felly, beth mae'n ei olygu mewn gwirionedd wrth adennill data? Wel, os nad oes gennych rhywbeth fel Norton cyn-osod ar eich cyfrifiadur, y gorau y gallwch weithiau wneud yw edrych ar y disg caled cyfan yn chwilio am batrymau o ddarnau. Ac un o themâu broblem set bump oed yn y byddwch yn chwilio'r cyfateb i 'n anawdd cathrena, a fforensig delwedd o gerdyn fflach cryno o camera digidol, chwilio am y 0s a 1s sydd fel arfer, gyda chyfraddau uchel o tebygolrwydd, yn cynrychioli dechrau o ddelwedd JPEG. A allwch chi guys adennill delweddau hynny gan dybio, os ydw i'n gweld y patrwm hwn o darnau ar y ddelwedd fforensig, gyda tebygolrwydd uchel, sy'n nodi ddechrau JPEG. Ac os ydw i'n gweld yr un patrwm eto, yn ôl pob tebyg yn nodi dechrau JPEG arall, ac un arall JPEG, a JPEG arall. Ac mae hyn yn nodweddiadol sut Bydd data adferiad yn gweithio. Beth sy'n neis am JPEG hyd yn oed er y fformat ffeil ei hun braidd yn gymhleth, ddechrau pob fath ffeil mewn gwirionedd yn eithaf adnabyddadwy ac yn syml, fel y gwelwch, os nad ydych wedi eisoes. Felly, gadewch i ni edrych yn agosach o dan y cwfl yn union yr hyn wedi bod yn mynd ymlaen, a beth yw'r rhain 0s a 1s nhw, er mwyn rhoi ychydig yn fwy o rydych cyd-destun ar gyfer yr her arbennig. [VIDEO Playback] -Lle mae eich PC storio'r rhan fwyaf o ei data parhaol. I wneud hynny, mae'r data yn teithio o RAM ynghyd â signalau meddalwedd sy'n dweud y disg caled sut i storio'r data hwnnw. Mae'r cylchedau gyriant caled cyfieithu signalau hynny yn foltedd amrywiadau. Mae'r rhain, yn eu tro, rheoli y gyriant caled rannau symudol, mae rhai o'r ychydig rhannau symudol ar ôl yn y cyfrifiadurol modern. Mae rhai o'r signalau rheoli modur sy'n troelli platiau metel-gorchuddio. Mae eich data yn cael ei storio mewn gwirionedd ar y platiau hyn. Signalau eraill yn symud y darllen / ysgrifennu penaethiaid i ddarllen neu ysgrifennu data ar y platiau. Mae'r peiriannau mor fanwl bod dynol Ni allai hyd yn oed gwallt pasio rhwng y penaethiaid a platiau nyddu. Eto i gyd, mae'r cyfan yn gweithio ar gyflymder gwych. [VIDEO END Playback] DAVID Malan: Zoom mewn ychydig ddyfnach awr ar yr hyn sydd mewn gwirionedd ar y platiau hynny. [VIDEO Playback] -Gadewch i ni edrych ar yr hyn rydym yn unig Gwelodd yn araf. Pan fydd pwls byr o'r trydan yn anfon at y pennaeth darllen / ysgrifennu, os fflipio ar electromagnetig bach ar gyfer ffracsiwn o eiliad. Mae'r magnet yn creu maes, sy'n yn newid y polaredd a tiny, bach cyfran o'r gronynnau metel a cot pob wyneb plât. Mae cyfres patrwm o hyn bach, ardaloedd a godir i fyny ar y ddisg yn cynrychioli ychydig yn un o data yn y rhif deuaidd system a ddefnyddir gan gyfrifiaduron. Yn awr, os yw'r cerrynt yn cael ei anfon un ffordd trwy'r darllen / ysgrifennu pen, yr ardal yn polarized mewn un cyfeiriad. Os yw'r cerrynt yn cael ei anfon yn y cyfeiriad arall, yr polareiddio ei wyrdroi. Sut y byddwch yn cael data oddi ar y disg galed? Dim ond gwrthdroi'r broses. Felly, mae'n y gronynnau ar y ddisg bod yn cael y cerrynt yn y darllen / ysgrifennu pen symud. Rhoi at ei gilydd miliynau o hyn segmentau magnetized, a gennych ffeil. Yn awr, y darnau o ffeil unigol gall cael eu gwasgaru ar draws ymgyrch yn ei platiau, math o fel y llanast o bapurau ar eich desg. Felly ffeil ychwanegol arbennig yn cadw golwg o lle mae popeth yn. Peidiwch â ydych yn dymuno oedd gennych rhywbeth fel 'na? [VIDEO END Playback] DAVID Malan: OK, yn ôl pob tebyg peidio. Felly, faint ohonoch guys Tyfodd i fyny gyda hyn? Iawn, felly mae'n llai a llai o dwylo bob blwyddyn. Ond dw i'n falch eich bod yn o leiaf cyfarwydd gyda nhw, gan fod hwn a'n hunain llyfr demo, yn anffodus, yn marw yn iawn araf marwolaeth yma yn gyfarwydd. Ond mae hyn yn hyn yr wyf, o leiaf, yn ôl yn ysgol yn uchel, defnydd a ddefnyddir ar gyfer copïau wrth gefn. Ac roedd yn anhygoel, oherwydd eich bod Gallai storio 1.4 megabeit ar y ddisg penodol. Ac roedd hyn yn y fersiwn dwysedd uchel, fel y nodir gan y HD, sydd wedi sy'n golygu cyn fideos HD heddiw. Dwysedd safonol yn 800 cilobeit. A chyn hynny, roedd Disgiau 400-cilobeit. A chyn hynny, roedd 5 a 1/4 disgiau modfedd, a oedd yn wirioneddol hyblyg, ac ychydig yn ehangach ac yn dalach nag y pethau hyn yma. Ond gallwch chi mewn gwirionedd yn gweld yr hyn a elwir agwedd hyblyg o ddisgiau hyn. Ac yn swyddogaethol, eu bod mewn gwirionedd yn eithaf tebyg i drives caled yn lleiaf math hwn. Unwaith eto, AGCau mewn cyfrifiaduron newydd gweithio ychydig yn wahanol. Ond os byddwch yn symud y tab metel bach, gallwch chi mewn gwirionedd yn gweld llawer o cwci, neu platiad. Dyw hi ddim yn metel fel yr un yma. Mae hyn yn un mewn gwirionedd rhai rhatach deunydd plastig. A ydych yn gallu gwneud rhyw fath o wiggle hynny. A ydych chi wedi trully newydd dileu oddi ar rhai nifer o ddarnau neu ronynnau magnetig o'r disg hwn. Felly, diolch byth, does dim byd yn ei gylch. Os y peth sydd yn y ffordd - ac maent yn cwmpasu eich llygaid a rhai eich cymydog - gallwch jyst fath o dynnu hyn cyfan oddi ar y wain fel 'na. Ond mae ychydig o gwanwyn, felly byddwch yn ymwybodol o hynny gyda'ch llygaid. Felly, rydych bellach wirioneddol ddisg hyblyg. A beth sy'n hynod am hyn yw bod cymaint â hyn yn cynrychiolaeth ar raddfa fach o mwy o faint 'n anawdd cathrena, y pethau hyn yn super, syml super. Os ydych yn pinsied gwaelod ohono, nawr bod y peth metel wedi cychwyn, a croen yn agored, popeth sydd yn ddau ddarn o yn teimlo a'r hyn a elwir yn ddisg hyblyg gyda darn o fetel ar y tu mewn. Ac mae mynd hanner y gynnwys fy disg ar. Mae mynd hanner arall ohonynt. Ond dyna i gyd oedd yn nyddu y tu mewn ar eich cyfrifiadur yn y dyddiau a fu. Ac eto, i roi hyn mewn persbectif, pa mor fawr yn y rhan fwyaf o'ch galed yn gyrru y dyddiau hyn? 500 gigabeit, a terabeit, efallai mewn cyfrifiadur n ben-desg, 2 terabeit, 3 terabeit, 4 terabeit, dde? Mae hwn yn un megabeit, rhoi neu gymryd, Ni all hyd yn oed yn gosod MP3 nodweddiadol anymore y dyddiau hyn, neu ryw ffeil cerddoriaeth tebyg. Felly, ychydig o cofrodd i chi heddiw, ac hefyd i helpu contextualize beth byddwn yn cymryd yn ganiataol bellach yn broblem yn gosod pump. Felly, y rhai yw dy fêts di i gadw. Felly, gadewch i mi newid i ble bydd treulio'r pset nesaf hefyd. Felly, rydym yn awr wedi gosod dudalen hon am - oh, un neu ddau o gyhoeddiadau yn gyflym. Mae hyn Dydd Gwener, os hoffech ymuno CS50 am ginio, ewch i'r lle arferol, cs50.net/rsvp. Ac prosiect terfynol - felly unol â'r maes llafur, rydym wedi postio y manyleb y prosiect terfynol yn barod. Sylweddoli nad yw hynny'n golygu mae'n arbennig o ddyledus cyn bo hir. Mae wedi postio, mewn gwirionedd, dim ond i gael rydych guys meddwl am y peth. Ac yn wir, ceir lleiafrif sylweddol super Bydd canran y byddwch yn mynd i'r afael â prosiectau terfynol ar ddeunydd yr ydym yn nad ydynt wedi gotten hyd yn oed yn y dosbarth, ond byddant mor gynnar â'r wythnos nesaf. Rhybudd, fodd bynnag, bod y fanyleb yn galw am ychydig o elfennau gwahanol o'r prosiect terfynol. Roedd y cyntaf, mewn ychydig wythnosau, yn cyn-gynnig, e-bost 'n bert achlysurol i eich TF i ddweud wrtho neu beth yr ydych chi'n meddwl am ar gyfer eich prosiect, gyda Dim Ymrwymiad. Bydd cynnig yn eich benodol ymrwymiad, gan ddywedyd, yma, mae hyn yn beth Hoffwn i wneud ar gyfer fy mhrosiect. Beth yn eich barn chi? Rhy fawr? Rhy fach? Yw'n hawdd ei reoli? A ydych yn gweld y spec am fwy o fanylion. Cwpl o wythnosau ar ôl hynny yw statws yr adroddiad, sydd yn yr un modd e-bost achlysurol i'ch TF i ddweud yn union pa mor ymhell tu ôl i chi yn eich derfynol gweithredu prosiect, wedi'i ddilyn gan y CS50 Hackathon y mae pawb yn gwahodd, a fydd yn ddigwyddiad o 20:00 ar un noson hyd 7:00 AC y bore nesaf. Pizza, ac efallai fy mod wedi crybwyll yn yr wythnos sero, wil yn cael ei weini am 09:00, Bwyd Tsieineaidd yn 01:00. Ac os ydych chi'n dal i fod ar ddihun yn y 5:00, byddwn yn mynd â chi i IHOP i frecwast. Felly mae'r Hackathon yn un o'r rhai mwyaf profiadau cofiadwy yn y dosbarth. Yna y gweithredu yn ddyledus, a yna bydd y hinsoddol CS50 Deg. Mwy o fanylion am bob un o'r rhain yn ystod yr wythnosau i ddod. Ond gadewch i ni fynd yn ôl at rywbeth hen ysgol - unwaith eto, arae. Felly amrywiaeth yn braf, oherwydd mae'n eu datrys problemau fel y gwelsom yn unig hyn o bryd yn ôl gyda strwythurau fyfyrwyr cael ychydig allan o reolaeth os ydym am gael un myfyriwr, myfyriwr dau, myfyriwr tri, dot dot myfyriwr dot, ryw nifer mympwyol o fyfyrwyr. Felly araeau, ychydig wythnosau yn ôl, Plymiodd yn ac yn datrys ein holl broblemau o beidio wybod ymlaen llaw faint o bethau o ryw fath y gallem ei eisiau. Ac rydym wedi gweld y gall structs ein helpu trefnu ein cod ymhellach ac yn cadw newidynnau gysyniadol debyg, fel enw a thŷ, gyda'i gilydd, er mwyn i ni gall eu trin fel un endid, y tu mewn y mae yn ddarnau llai. Ond mae araeau rai anfanteision. Beth yw rhai o'r anfanteision rydym wedi dod ar eu traws gyda rhesi hyd yn hyn? Beth sy'n bod? Maint sefydlog - felly hyd yn oed er eich bod efallai yn gallu dyrannu cof ar gyfer amrywiaeth, unwaith y byddwch yn gwybod faint o fyfyrwyr gennych, faint o gymeriadau sydd gennych gan y defnyddiwr, unwaith y byddwch wedi dyrannu y casgliad, ydych chi wedi math o baentio eich hun i mewn i gornel. Oherwydd nad ydych yn gallu mewnosod elfennau newydd i ganol arae. Ni allwch osod mwy o elfennau ar ddiwedd arae. Really, mae'n rhaid i chi droi at greu casgliad newydd gyfan, fel yr ydym wedi trafod, copïo hen i'r newydd. Ac eto, dyna yw'r cur pen y GetString delio â i chi. Ond unwaith eto, ni allwch hyd yn oed yn mewnosod rhywbeth i mewn i ganol y rhesi os nad yw'r gyfradd yn cael ei llenwi yn gyfan gwbl. Er enghraifft, os yw casgliad hwn yma o faint chwech dim ond pum peth ynddo, yn dda, gallech jyst tack rhywbeth ar y diwedd. Ond beth os ydych eisiau rhoi rhywbeth i mewn i ganol y amrywiaeth, er y gallai ei gael pump allan o chwech o bethau ynddo? Wel, beth wnaethon ni ei wneud pan oedd gennym i gyd o'n gwirfoddolwyr dynol ar y llwyfan yn wythnos diwethaf? Os ydym eisiau rhoi rhywun yma, naill ai bobl hyn sut i symud hyn ffordd, neu'r bobl hyn sut i symud hyn ffordd, ac a ddaeth yn ddrud. Mae symud o bobl y tu mewn o amrywiaeth a ddaeth i ben i fyny adio a chostio ni amser, felly llawer o'n n sgwâr amseroedd rhedeg fel math mewnosod, ar gyfer enghraifft, yn yr achos gwaethaf. Felly, araeau yn wych, ond mae'n rhaid i chi gwybod o flaen llaw pa mor fawr yr ydych am iddynt. Felly OK, dyma ateb. Os nad wyf yn gwybod ymlaen llaw faint o fyfyrwyr a fyddai gen i, ac yr wyf yn gwybod unwaith Byddaf yn penderfynu, fodd bynnag, yr wyf i'n sownd â hynny llawer o fyfyrwyr, pam na wnewch Fi jyst bob amser yn dyrannu dwywaith cymaint o le fel y gallwn feddwl ei angen arnaf? Onid yw hynny'n ateb rhesymol? Yn realistig, nid wyf yn credu ein bod yn mynd i angen mwy na 50 o slotiau mewn amrywiaeth gyfer dosbarth cyfrwng-maint, felly gadewch i ni dim ond talgrynnu i fyny. 'N annhymerus' gwneud 100 slotiau yn fy array, dim ond fel y gallwn bendant yn cael y nifer y myfyrwyr wyf yn disgwyl i yn rhai dosbarth cyfrwng-maint. Felly pam na dim ond talgrynnu i fyny a dyrannu mwy o gof, fel arfer, ar gyfer amrywiaeth nag ydych yn meddwl efallai y byddwch hyd yn oed angen? Beth ydyn nhw pushback syml at y syniad hwnnw? Ydych ond yn gwastraffu cof. Llythrennol bob rhaglen byddwch yn ysgrifennu, yna efallai yn defnyddio ddwywaith cymaint o cof yn ydych ei angen mewn gwirionedd. A bod nid yn unig yn teimlo fel yn enwedig ateb cain. Ar ben hynny, 'i jyst yn lleihau'r tebygolrwydd o broblem. Os ydych yn digwydd i gael cwrs poblogaidd un semester a bod gennych 101 fyfyrwyr, eich rhaglen yn dal i fod sylfaenol sy'n wynebu'r un mater. Felly, diolch byth, mae yna ateb i ad hwn yn ein holl broblemau yn y ffurflen o strwythurau data sy'n yn fwy cymhleth na'r rhai rydym wedi gweld hyd yn hyn. Mae hyn, yr wyf yn honni, yn rhestr cysylltiedig. Mae hon yn rhestr o rifau - 9, 17, 22, 26, a 34 - sydd wedi cael eu cysylltu â'i gilydd drwy gyfrwng o'r hyn yr wyf wedi tynnu fel saethau. Mewn geiriau eraill, os oeddwn i eisiau i gynrychioli amrywiaeth, gallwn wneud rhywbeth fel hyn. A 'n annhymerus' roi hyn ar y uwchben mewn dim ond hyn o bryd. Gallwn ei wneud - helo, popeth yn iawn. Sefyll yn ôl. Gyfrifiadurol newydd yma, yn glir - iawn. Felly, os oes gennyf y rhifau hyn mewn amrywiaeth - 9, 17, 22, 26, 24 - nid o reidrwydd i raddfa. Mae pob hawl, felly dyma yw fy array - oh fy dduw. Mae pob hawl, felly dyma yw fy arae. O fy dduw. [Chwerthin] DAVID Malan: esgus. Mae'n ormod o ymdrech i fynd yn ôl a atgyweiria bod, felly mae - 26. Felly, mae gennym amrywiaeth hwn o 9, 17, 22, 26, a 34. Ar gyfer y rhai ohonoch yn gweld y camgymeriad embaras Fi jyst gwneud, yno y mae. Felly, yr wyf yn honni bod hyn yn ateb effeithlon iawn. Rwyf wedi neilltuo cymaint o ints ag Angen i mi - un, dau, tri, pedwar, pump, neu chwe - ac yr wyf wedyn wedi cael eu storio y niferoedd tu mewn amrywiaeth hwn. Ond mae'n debyg, felly, yr wyf i am osod gwerth fel rhif 8? Wel, ble mae'n mynd? Gadewch i ni dybio wyf i am osod nifer fel 20. Wel, ble mae'n mynd? Yno yn rhywle yn y canol, neu nifer 35 yn gorfod mynd rhywle ar y diwedd. Ond dw i'n gyd allan o le. Ac felly mae hyn yn her sylfaenol o araeau yw'n yw'r ateb. Yr wyf wedi gwneud cais am funud yn ôl, GetString datrys y broblem hon. Os ydych am osod nifer chweched i'r amrywiaeth hwn, beth yw o leiaf un ateb y gallwch chi syrthio yn ôl ar yn sicr, yn union fel rydym yn ei wneud gyda GetString? Beth sy'n bod? Wel, ei wneud yn fwy yn Dywedodd haws na gwneud. Ni allwn o reidrwydd yn gwneud y casgliad fwy, ond beth allwn ni ei wneud? Gwnewch casgliad newydd sy'n fwy, o faint 6, neu efallai faint 10, os ydym am i gael y blaen o bethau, ac yna copïo yr hen amrywiaeth yn y newydd, ac yna rhad ac am ddim yr hen arae. Ond beth yw'r amser yn rhedeg bellach o'r broses honno? Mae'n fawr O n, gan fod y copïo yn mynd i gostio i chi rai unedau amser, felly nid mor ddelfrydol os oes rhaid inni dyrannu casgliad newydd, sydd yn mynd i yfed dwywaith cymaint cof dros dro. Copi hen i newydd - Yr wyf yn golygu, 'i' jyst cur pen, sy'n yw, unwaith eto, pam yr ydym yn ysgrifennu GetString i chi. Felly, beth y gallem ei wneud yn lle hynny? Wel, beth os yw ein strwythur data mewn gwirionedd wedi bylchau ynddo? Gadewch i ni dybio fy mod yn ymlacio fy nod o gael darnau cyfagos o gof, lle mae 9 yn iawn nesaf i 17, sef dde nesaf i 22, ac yn y blaen. Ac mae'n debyg y gall fod dros 9 yma yn Gall RAM, a 17 yn cael ei gor yma yn RAM, a gall 22 gael eu gor yma yn RAM. Mewn geiriau eraill, nid oes eu hangen i hyd yn oed yn ôl i gefnogi anymore. Fi jyst yn rhaid i rhywsut edafu nodwydd drwy bob un o'r rhifau hyn, neu bob un y nodau hyn, fel y byddwn yn galw'r petryalau fel yr wyf wedi tynnu nhw, i cofio sut i gyrraedd yr olaf nod o'r fath gan y cyntaf. Felly beth yw'r rhaglenni adeiladu rydym wedi gweld yn ddiweddar yr oeddwn yn Gall gweithredu'r edau, neu tynnu yma, yr oeddwn yn gallu gweithredu saethau hynny? Awgrymiadau Felly, dde? Os nad wyf dyrannu unig int, ond yn nod - a thrwy nod, Fi jyst yn golygu cynhwysydd. Ac yn weledol, yr wyf yn golygu petryal. Felly, mae'n debyg angen nod i gynnwys dau werth - y int ei hun, ac yna, fel yr awgrymir gan yr hanner gwaelod y petryal, digon o le ar gyfer int. Felly, dim ond meddwl ymlaen yma, pa mor fawr yw nod hwn, mae hyn yn cynhwysydd dan sylw? Faint o bytes ar gyfer y int? Yn ôl pob tebyg 4, os yw'n yr un fath ag arfer. Ac yna faint o bytes ar gyfer y pwyntydd? 4. Felly cynhwysydd hwn, neu nod hwn, yn mynd i fod yn strwythur 8-beit. O, ac mae hynny'n cyd-ddigwyddiad hapus rydym yn unig gyflwyno syniad hwn o a strwythur neu adeiladwaith C. Felly, yr wyf yn honni fy mod am gymryd cam tuag at hyn yn fwy soffistigedig gweithredu rhestr o rifau, a rhestr gysylltiedig o rifau, mae angen i mi ei wneud ychydig mwy o feddwl ymlaen llaw a ddatgan nid yn unig yn int, ond mae strwythur y byddaf yn galw, yn gonfensiynol yma, nod. Gallem ei alw'n unrhyw beth rydym eisiau, ond nod yn mynd i fod thematig mewn llawer o'r pethau rydym yn dechrau edrych ar hyn o bryd. Y tu mewn y nod yw n int. Ac yna cystrawen hwn, ychydig yn rhyfedd ar yr olwg gyntaf - strwythur nod * nesaf. Wel ddarluniadol, beth yw hynny? Dyna'r hanner gwaelod y petryal a welsom ychydig funudau'n ôl. Ond pam ydw i'n dweud strwythur nod * yn hytrach na dim ond nod *? Oherwydd os y pwyntydd yn pwyntio yn nod arall, dim ond y cyfeiriad o nod. Dyna gyson â'r hyn rydym wedi trafod am awgrymiadau hyd yn hyn. Ond pam, os gallaf wneud cais am y strwythur hwn yn a elwir yn nod, a oes rhaid i mi ddweud strwythur nod y tu mewn yma? Yn union. Mae'n fath o realiti dwp o C. Mae'r typedef, fel petai, nid yw wedi digwydd eto. C yn hynod llythrennol. Mae'n darllen eich prif cod i gwaelod, o'r chwith i'r dde. A hyd nes y cyrhaeddir y colon ar y llinell waelod, dyfalu beth nad yw'n gweithio bodoli fel math data? Node, nod unquote dyfynnu. Ond oherwydd y mwy verbose datganiad a wneuthum ar y llinell gyntaf - strwythur nod typedef - oherwydd dyna ddaeth yn gyntaf, cyn y braces cyrliog, sy'n fath o fel cyn-addysgu clang hynny, yr ydych yn gwybod beth, yn rhoi strwythur i mi a elwir yn strwythur nod. A dweud y gwir, nid wyf yn hoffi galw pethau strwythur nod, strwythur nod pob drwy gydol fy cod. Ond byddaf ond yn ei ddefnyddio unwaith, dim ond y tu mewn, fel y gallaf effeithiol creu rhyw fath o gyfeiriad cylchlythyr, nid pwyntydd i mi fy hun fel y cyfryw, ond mae pwyntydd i un arall o fath yn union. Felly, mae'n ymddangos bod ar strwythur data fel hyn, mae 'na ychydig o gweithrediadau a allai fod yn o ddiddordeb i ni. Efallai y byddwn i am osod mewn rhestr fel hyn. Efallai y byddwn am ddileu o restr fel hyn. Efallai y byddwn am chwilio ar y rhestr ar gyfer werth, neu yn fwy cyffredinol, croesi. Ac croesi yn unig yw ffordd ffansi o dweud yn dechrau ar y chwith a symud yr holl y ffordd ar y dde. Ac yn sylwi, hyd yn oed gyda hyn ychydig yn fwy strwythur data soffistigedig, gadewch fi yn cynnig y gallwn fenthyg rhai o'r y syniadau y pythefnos diwethaf ac gweithredu swyddogaeth o'r enw chwilio fel hyn. Mae'n mynd i ddychwelyd yn wir neu ffug, sy'n dangos, ie neu na, n yn y rhestr. Ei ail ddadl yn pwyntydd at y rhestr ei hun, felly mae pwyntydd i nod. Y cyfan yr wyf i'n mynd i ei wneud wedyn yw datgan newidyn dros dro. Byddwn yn ei alw'n ptr ôl confensiwn, ar gyfer pwyntydd. Ac yr wyf yn neilltuo yn hafal i'r ddechrau'r rhestr. Ac yn awr yn sylwi ar y ddolen tra. Ar yr amod nad pwyntydd yn gyfartal i null, dw i'n mynd i wirio. A yw arrow pwyntydd n gyfartal i y n a basiwyd mewn? Ac aros funud - newydd darn o gystrawen. Beth yw arrow yn sydyn? Yeah? Yn union. Felly, tra bod ychydig funudau yn ôl, rydym yn defnyddio y nodiant dot i gael mynediad i rywbeth tu mewn i'r strwythur, os y newidyn nad ydych wedi yw'r strwythur ei hun, ond mae pwyntydd i strwythur, diolch i'r drefn, darn o gystrawen y yn olaf yn gwneud synnwyr 'n athrylithgar. Mae'r saeth yn ei olygu i ddilyn y pwyntydd, fel ein saethau fel arfer yn golygu ffurf lluniau, ac yn mynd yn data y tu mewn cae. Felly saeth yr un peth â dot, ond rydych yn ei ddefnyddio pan fydd gennych pwyntydd. Felly, dim ond i ailadrodd, yna, os yw'r maes n tu mewn i'r strwythur a elwir yn pwyntydd hafal hafal n, yn dychwelyd yn wir. Fel arall, mae hyn yn llinell yma - pwyntydd yn dychwelyd pwyntydd nesaf. Felly, beth mae hyn yn ei wneud, hysbysiad, yw os wyf yn wyf yn hyn o bryd yn pwyntio at y strwythur nad ydynt yn cynnwys 9, a 9 yw nifer Dwi'n chwilio am - debyg Rwy'n edrych ar gyfer n dychwelyd 50 - Rydw i'n mynd i ddiweddaru fy pwyntydd dros dro i beidio pwyntio at nod hwn anymore, ond mae pwyntydd saeth nesaf, sy'n yn mynd i roi i mi i fyny yma. Yn awr, yr wyf yn sylweddoli yn corwynt cyflwyniad. Ar ddydd Mercher, byddwn yn ei wneud mewn gwirionedd hyn yn gyda rhai pobl a rhai yn fwy Cod ar gyflymder arafach. Ond yn sylweddoli, yr ydym yn awr yn gwneud ein data strwythurau mwy cymhleth fel bod ein Gall algorithmau gael mwy effeithlon, a yn mynd i fod yn hanfodol ar gyfer pset chwech, pan fyddwn yn llwytho i mewn, unwaith eto, y rhai 150,000 o eiriau, ond mae angen gwneud hynny effeithlon, ac yn ddelfrydol, yn creu rhaglen sy'n rhedeg ar gyfer ein defnyddwyr nad ydynt mewn llinol, nid mewn n sgwâr, ond yn cysonyn amser, yn y delfrydol. Byddwn yn eich gweld ar ddydd Mercher. SIARADWR: Yn y CS50 nesaf, David anghofio ei achos sylfaenol. DAVID Malan: A dyna sut yr ydych yn anfon negeseuon testun gyda C. Beth mae'r - [NEGES TEXT AMRYWIOL HYSBYSU SWNIO'N]