[Powered by Google Translate] [Vika 5] [David J. Malan - Harvard University] [Þetta er CS50. - CS50.TV] Þetta er CS50, Vika 5. Í dag og í þessari viku, munum við kynna a lítill hluti af the veröld af réttar í tengslum við vandamál Set 4. Í dag verður stytt fyrirlestur því að það er sérstakur atburður í hér eftir. Þannig að við munum taka gægjast og stríða bæði nemendur og foreldra jafnt dag með sumir af þeim hlutum sem eru á sjóndeildarhringnum. Meðal þeirra, sem í mánudagur, verður þú að hafa nokkra bekkjarfélaga. EDX, Harvard og nýr online MIT frumkvæði að OpenCourseWare og fleira, er stokkunum á háskólasvæðinu Harvard er á mánudaginn, sem þýðir koma mánudagur þú verður eins og á síðasta telja, 86.000 fleiri bekkjarfélaga sem vilja vera eftir með fyrirlestrum CS50 og köflum og walkthroughs og vandamál setur. Og sem hluti af þessu, verður þú að verða aðilar að vígslu flokki CS50 og nú CS50x. Sem hluti af þessu nú, átta sig á að það verði sumir upsides eins og heilbrigður. Til að fá tilbúinn fyrir það, að miklum fjölda nemenda, nægja að segja að jafnvel þó að við höfum 108 TFS og CAS, það er ekki alveg það besta nemandi-kennari hlutfall þegar við högg 80.000 hjá nemendum. Við erum ekki að fara að flokka svo mörg vandamál setur með höndunum, svo kynnt í þessari viku í vandamál setja verður CS50 Athuga, sem er að fara til vera a stjórn-lína gagnsemi innan tækið sem þú munt fá þegar þú uppfærir hann síðar um helgina. Þú munt vera fær um að keyra skipun, check50, eigin pset þinni, og þú munt fá augnablik endurgjöf um hvort forrit er rétt eða rangt eftir ýmsum forskriftir hönnun sem við höfum veitt. Meira um það í the setja vandamál forskrift. The CS50x bekkjarfélagar verður að nota þetta eins og heilbrigður. Vandamál Set 4 er allt um réttar, og þetta pset var mjög innblásin af einhverjum alvöru efni þar þegar ég var í framhaldsnámi skólanum ég interned um stund með skrifstofu District Attorney Middlesex County skips gera réttar vinna með leiða réttar rannsakandi þeirra. Hvað þetta var, eins og ég held að ég nefndi fyrir nokkrum vikum áður, er ríkið Mass Lögreglan eða aðrir mundu koma í, þeir myndu falla á hluti eins og harða diska og geisladiska og disklingadrifið og þess háttar, og þá markmið réttar skrifstofu var að kanna hvort það var eða var ekki merki um einhvers konar. Þetta var sérstök Rannsóknir Unit, þannig að það var hvít-kraga glæpastarfsemi. Það var meiri áhyggjur konar glæpi, nokkuð sem felur í sér einhvers konar stafræna miðla. Það kemur í ljós að ekki að margir skrifa tölvupóst segja, "ég gerði það." Svo oft, þessar réttar leit ekki snúa upp allt sem mikinn ávöxt, en stundum fólk myndi skrifa slík bréf. Svo stundum var viðleitni verðlaun. En til þess að leiða allt til þessa réttar pset, munum við kynna í pset4 smá grafík. Þú tekur sennilega þetta sjálfsögðum hlut - JPEG, GIF, og þess háttar - þessa dagana. En ef þér finnst virkilega um það, mynd, líkt andlit Rob er, gæti verið fyrirmynd sem röð af punktum eða punktar. Í tilviki andlit Rob á, það er alls konar litum, og við byrjuðum að sjá einstaka punkta, annars þekkt sem punkta, þegar við byrjuðum að þysja inn En ef við einfalda heiminn aðeins og bara segja að þetta hér er Rob í svörtu og hvítu, að tákna svart og hvítt, við getum bara notað tvöfaldur. Og ef við ætlum að nota tvöfaldur, 1 eða 0, getum við tjáð þessa sömu mynd af brosandi andliti Rob er með þessu mynstri bita. 11000011 táknar hvítt, hvítt, svart, svart, svart, svart, hvítt, hvítt. Og svo er það ekki mikið stökk þá til að byrja að tala um litríka ljósmyndum, hlutir sem þú vilt sjá á Facebook eða fara með stafræna myndavél. En vissulega er það kemur að litum, þú þarft fleiri bita. Og mjög algengt í heimi ljósmynda er að nota 1-bita lit, eins og þetta bendir til, en 24-bita lit, þar sem þú færð í raun milljónir litum. Svo eins og í tilfelli þegar við aðdregna í á auga Rob er, það var einhver fjöldi af milljón mismunandi litríka möguleika. Þannig að við munum kynna þetta í Set Vandamál 4 og í walkthrough, sem verður í dag kl 03:30 í stað venjulega 2:30 vegna fyrirlestur Föstudagur er hér. En vídeó vilja vera á netinu eins og venjulega á morgun. Við munum einnig kynna þér annað skráarsnið. Þetta er vísvitandi ætlað að líta ógnvekjandi í fyrstu, en þetta er bara einhver skjöl fyrir C strúktúr. Það kemur í ljós að Microsoft árum hjálpaði vinsælan þetta snið kallað punktamynd skrá snið, BMP, og þetta var frábær einfaldur, litríka grafísku skráarsnið sem var notað fyrir alveg sumir tími og stundum enn fyrir veggfóður á skjáborð. Ef þú heldur aftur til Windows XP og Rolling Hills og blár himinn, það var yfirleitt BMP eða punktamynd mynd. Bitmaps eru skemmtileg fyrir okkur vegna þess að þeir hafa a hluti fleiri flókið. Það er ekki alveg eins einfalt og þessi rist á 0s og 1s. Í staðinn, þú hluti eins og haus í upphafi skrá. Svo í öðrum orðum, inni í. BMP skrá a heild búnt af 0s og 1s, en það er einhver frekari 0s og 1s þar. Og það kemur í ljós að það sem við höfum líklega tekið sem sjálfsögðum hlut um árabil - skrá snið eins. læknir eða. XLS eða. MP3,. MP4, hvað skrá snið að þú ert kunnuglegur með - hvað þýðir það jafnvel að vera skrá snið, því í lok dags á öllum þessum skrám við notum bara 0s og 1s. Og kannski þeir 0s og 1s tákna ABC með ASCII eða þess háttar, en í lok dagsins, það er samt bara 0s og 1s. Svo menn bara stundum ákveðið að búa til nýtt skráarsnið þar sem þeir staðla hvaða mynstur bita mun í raun þýða. Og í þessu tilfelli hér, fólkinu sem hannaði punktamynd skrá snið sagði að við fyrstu bæti í punktamynd skrá, sem táknuð með móti 0 þar, það er að fara til vera sumir cryptically heitir breytilegum heitir bfType, sem bara stendur fyrir punktamynd skrá tegund, hvaða tegund af punktamynd skrá er þetta. Þú getur álykta kannski frá annarri röð sem vega upp á móti 2, bæti númer 2, hefur mynstur 0s og 1s sem sýnir hvað? Stærð eitthvað. Og það fer þaðan. Svo í Set Vandamál 4, verður þú að vera gengið í gegnum sumir af þessum hlutum. Við munum ekki enda umhyggju um þá alla. En eftir það byrjar að fá áhugavert um bæti 54: rgbtBlue, Green og Red. Ef þú hefur einhvern tíma heyrt skammstöfun RGB - rautt, grænt, blátt - þetta er tilvísun til að vegna þess að það kemur í ljós að þú getur mála alla liti regnbogans við sumir samsetning af rauðu og bláu og grænu. Og í raun, foreldrar í herberginu gæti muna sumir af elstu sýningarvél. Þessa dagana, þú sérð bara einn skær ljós koma út af linsu, en aftur í dag þú hefðir rauða linsu, bláa linsu, og græna linsu, og saman þeir miða á skjáinn og myndaði litríka mynd. Og oft, grunnskóla og framhaldsskólum yrði þeim linsur alltaf svo örlítið Askew, svo þú varst konar sjá tvöfaldur eða þrefaldur myndir. En það var hugmyndin. Þú hafði rautt og grænt og blátt ljós málverk mynd. Og að sama lögmál er notað í tölvum. Svo meðal áskoranir þá fyrir þig í Vandamál Set 4 eru að fara að vera nokkur atriði. Eitt er að í raun búa til mynd, til að taka í mynstur 0s og 1s, reikna út hver klumpur af 0s og 1s tákna það í uppbyggingu eins og þetta, og þá reikna út hvernig á að endurtaka punkta - Liverpool, Chelsea, The Greens - inni þannig að þegar mynd lítur svona út í upphafi, Það getur litið svona stað eftir það. Meðal annarra áskoranir líka er að fara að vera að þú munt vera afhent réttar mynd af raunverulegur skrá frá stafræna myndavél. Og á þessi myndavél, einu sinni voru allt fullt af myndum. Vandamálið er að við eytt óvart eða hafði myndin skemmd á einhvern hátt. Slæmir hlutir gerast með stafrænum myndavélum. Og svo við afrita fljótt öllum 0s og 1s burt af það kort fyrir þig, spara þá allt í eina stóra skrá, og þá munum við afhenda þeim til þín í Vandamál Set 4 þannig að þú getur skrifað forrit í C sem á að endurheimta alla þá JPEG, helst. Og það kemur í ljós að JPEG, jafnvel þótt þeir séu nokkuð flókið skráarsnið - þeir eru miklu flóknari en þetta brosandi andlit hér - það kemur í ljós að hver JPEG byrjar með sömu mynstur 0s og 1s. Svo nota, að lokum, að á meðan lykkja eða for lykkju eða svipuð, þú getur iterate yfir alla 0s og 1s í réttar mynd og í hvert skipti sem þú sérð sérstaka mynstur sem er skilgreint í setja vandamál forskrift, þú getur tekið hér er með mjög miklar líkur, að byrja á JPEG. Og um leið og þú finnur sama mynstri nokkur fjöldi bæti eða kílóbæti eða megabæti seinna, þú getur tekið hér er annað JPEG, myndin sem ég tók eftir það fyrsta. Leyfðu mér að hætta að lesa það fyrst skrá, byrja að skrifa þetta nýja, og framleiðsla program fyrir pset4 er að fara að vera eins og margir eins og 50 JPEG. Og ef það er ekki 50 JPEG, þú hafa a hluti af lykkju. Ef þú ert með óendanlega fjölda JPEG, hefur þú óendanlega lykkju. Svo líka að vera alveg algengt mál. Svo það er það sem er á sjóndeildarhringnum. Spurningakeppni 0 baki, átta sig á netfangið mitt sem ávallt eru gott fólk sem eru bæði ánægð, konar hlutlaus og dapur í kringum próf 0 tíma. Og þá skaltu ekki ná til mín, yfirmaður TF Zamyla, eigin TF þitt, eða einn af CAS að þú veist ef þú vildi eins og til að ræða hvernig hlutirnir fóru. Svo til að heilla foreldra hér í herberginu, það er CS50 bókasafn? [Hlátur] Gott starf. Hvað er CS50 bókasafn? Já. >> [Nemandi] Það er a pre-skrifað sett af kóða [inaudible] Allt í lagi, gott. Það er a pre-skrifað sett af kóða sem við starfsfólkið skrifaði, bjóðum við þér, sem veitir nokkrar algengar virkni, efni eins og fá mér band, fá mér int - allar aðgerðir sem eru taldar upp hér. Byrjar nú byrjum við að virkilega taka þessa þjálfun hjól burt. Við ætlum að byrja á að taka í burtu band frá þér, sem muna var bara samheiti fyrir það raunverulegur gögn tegund? >> [Margar nemendur] Char *. Char *. Fyrir foreldra, sem var sennilega [gerir whooshing hljóð]. Það er gott. Char * við munum byrja að sjá á skjánum því meir sem við fjarlægjum band úr orðaforða okkar, að minnsta kosti þegar það kemur að því að í raun og veru að skrifa kóðann. Á sama hátt munum við hætta að nota einhverja af þessum aðgerðum eins mikið því áætlanir okkar eru að fara að fá flóknari. Frekar en bara að skrifa forrit sem sitja þar með hvetja blikka, bíða fyrir the notandi til að slá eitthvað í, þú munt fá inntak þinn annars staðar frá. Til dæmis, munt þú fá þá frá röð af bitum á heimamaður harður ökuferð. Þú munt í staðinn fá þau í framtíðinni af net-tengingu, sumir website einhvers staðar. Svo skulum afhýða aftur þetta lag í fyrsta skipti og draga upp CS50 Tæki og þessi skrá heitir cs50.h, sem þú hafir verið # þar í margar vikur, en við skulum raunverulega sjá hvað er inni í þessu. The toppur af the skrá í bláu er bara allt fullt af athugasemdum: ábyrgð upplýsingar og leyfisveitingar. Þetta er tegund af sameiginlegri fyrirmynd í hugbúnaði vegna þess að einhver fjöldi af hugbúnaður þessa dagana er það sem er kallað opinn uppspretta, sem þýðir að einhver hefur skrifað kóðann og gerði það fáanleg ekki bara að keyra og nota, en í raun að lesa og breyta og fella inn í eigin vinnu þína. Svo er það sem þú hefur verið að nota, opinn hugbúnaður, að vísu í mjög litlu formi. Ef ég skruna niður framhjá athugasemdum, þó munum við byrja að sjá nokkrar fleiri kunnugleg hluti. Tilkynning minnsta hér efst að cs50.h skrá inniheldur a heild búnt af skrá haus. Flestir þeirra, sem við höfum ekki séð áður, en einn er kunnuglegt. Hver af þessum höfum við séð, að vísu stutta stund, svona langt? >> [Nemandi] Standard bókasafn. Já, staðall bókasafn. stdlib.h hefur malloc. Þegar við byrjuðum að tala um dynamic minni úthlutun, sem við munum koma aftur í næstu viku og höfum við ma að skrá. Það kemur í ljós að bool og satt og ósatt í raun ekki til í C á se nema þú látir þessa skrá hérna. Við höfum í margar vikur verið meðal stdbool.h þannig að hægt er að nota hugmyndina um a bool, satt eða ósatt. Án þetta, myndir þú verða að tegund af falsa það og nota int og bara geðþótta ráð fyrir að 0 er ósatt og 1 er satt. Ef við skruna niður frekar, hér er skilgreining okkar á band. Það kemur í ljós, eins og við höfum sagt áður, að ef þessi stjarna er ekki máli. Þú getur meira að segja hafa pláss allt í kring. Við þessa önn hefur verið að stuðla að því eins og þetta til að gera grein fyrir að stjarna hefur að gera með tegund, en átta sig alveg eins algeng, ef ekki aðeins algengari, er að setja það þar, en virkni er það sama. En nú ef við lesum niður frekar, láta 'taka a líta á GetInt því við notuðum það kannski fyrst áður en nokkuð annað á þessu misseri. Hér er GetInt. Þetta er það? >> [Nemandi] A frumgerð. >> Er þetta bara frumgerð. Oft höfum við sett frumútgáfur á boli af okkar. C skrár, en þú getur líka sett frumgerð á skrá haus,. h skrá, eins og þessi hér þannig að þegar þú skrifar nokkrar aðgerðir sem þú vilt að annað fólk til að vera fær um að nota, sem er einmitt raunin með CS50 bókasafn, þú ekki bara framkvæma aðgerðir þínar í eitthvað eins cs50.c, þú setur einnig frumútgáfur ekki efst á þessi skrá, en efst á haus skrá. Þá er þessi haus skrá hvað vinir og samstarfsmenn eru með eru # í eigin númer þeirra. Svo allan þennan tíma, hefur þú verið þar öllum þessum frumgerðum, raun efst á skránni, en með því að þetta eru # vélbúnaður, sem í raun afrit og deig þessa skrá inn í þitt eigið. Hér er sumir nokkuð ítarlegar skjöl. Við höfum nokkurn veginn sjálfgefið að GetInt fær int, en það kemur í ljós að það eru nokkur horn tilvikum. Hvað ef notandinn slær í fjölda sem er alltof stór, a quintillion, sem get bara ekki passa inn af int? Hvað er gert ráð fyrir hegðun? Helst er það fyrirsjáanlegt. Svo í þessu tilfelli, ef þú lest í raun smáletur, þú munt í raun að sjá að ef línan er ekki hægt að lesa, þetta skilar INT_MAX. Við höfum aldrei talað um þetta, en miðað við fjármögnun þess, það er það líklega? [Nemandi] A fasti. >> Það er stöðug. Það er einhver sérstakur fasti sem er líklega lýst í einni af þessum haus skrá það er allt hærra í skránni, og INT_MAX er líklega eitthvað eins og u.þ.b. 2 milljörðum Hugmyndin er að þar sem við þurfum einhvern veginn að þar með að eitthvað fór úrskeiðis, Við, já, hafa 4 milljarða tölur ráða okkar: -2000000000 á allt að 2 milljarða króna, gefa eða taka. Jæja, það er algengt í forritun er að stela bara einn af þessum tölum, kannski 0, kannski 2 milljarðar, kannski -2000000000, svo að þú getir einn af hugsanlegum gildum þínum svo að þú getur skuldbinda sig til heimsins að ef eitthvað fer úrskeiðis, mun ég aftur þetta frábær stór gildi. En þú vilt ekki að notandinn að skrifa eitthvað dulinn eins og 234 ..., mjög stór tala. Þú alhæfa það í staðinn sem fasti. Svo í raun, ef þú varst að vera anal á undanförnum vikum, hvenær þú kallaðir GetInt, þú ættir að hafa verið að athuga með að ef ástand gerði notandi tegund á INT_MAX, eða, nánar tiltekið, gerði GetInt baka INT_MAX, því ef það gerði það, sem þýðir í raun að þeir ekki að slá það. Eitthvað fór úrskeiðis í þessu tilfelli. Svo er þetta það sem er almennt þekktur sem Sentinel gildi, sem þýðir bara sérstakt. Við skulum nú snúa í. C skrá. The C skrá hefur verið í vélinni í nokkurn tíma. Og í raun, tækið hefur það fyrirfram saman fyrir þig í þá sem við heitir mótmæla kóða, en það bara skiptir ekki máli fyrir þig þar sem það er vegna þess að kerfið veit í þessu tilfelli þar sem það er: tækið. Við skulum fletta niður núna til GetInt og sjá hvernig GetInt hefur verið að vinna allan þennan tíma. Hér höfum við svipaðar athugasemdir frá áður. Leyfðu mér að stækka bara kóðann hluta. Og það sem við höfum fyrir GetInt er eftirfarandi. Það tekur ekki inntak. Það skilar int, meðan (satt), þannig að við höfum vísvitandi óendanlega lykkju, en væntanlega munum við brjótast út úr þessu einhvern veginn eða aftur úr í þessu. Við skulum sjá hvernig þetta virkar. Við virðumst vera með GetString í þessari fyrstu línu inni í lykkju, 166. Þetta er nú gott starf því undir hvaða kringumstæðum gæti GetString aftur sérstakt leitarorð NÚLL? >> [Nemandi] Ef eitthvað fer úrskeiðis. Ef eitthvað fer úrskeiðis. Og hvað gæti farið úrskeiðis þegar þú hringir eitthvað eins GetString? Já. >> [Nemandi] Malloc ekki að gefa það ints. Já. Kannski ekki malloc. Einhvers staðar undir hetta, GetString kallar malloc sem úthlutar minni, sem gerir tölva geyma allar persónurnar sem notandinn slær inn á lyklaborðinu. Og býst við að notandi hafði allt fullt af frítíma og slegið meira, til dæmis, en 2 milljarða stafir í, fleiri persónur en the tölva hefur jafnvel vinnsluminni. GetString að vera fær um að þar með að þér. Jafnvel ef þetta er frábær, frábær sjaldgæfar horn ræða, það hefur einhvern veginn að geta séð þetta, og svo GetString, ef við fórum til baka og lesa skjöl hennar, er í raun aftur null. Svo nú ef GetString ekki með því að fara NULL, GetInt er að fara til að mistakast því aftur INT_MAX bara sem Sentinel. Þetta eru bara mannleg samninga. The eini vegur þú vildi vita að þetta er raunin er með því að lesa gögn. Við skulum fletta niður þar sem int er í raun fengið. Ef ég skruna niður aðeins lengra, í línu 170, höfum við athugasemd yfir þessum línum. Við lýsum í 172 int n, og bleikju, c, og þá er þetta nýtt hlutverk, sem sum ykkar hafa rakst áður, sscanf. Þetta stendur fyrir scanf band. Með öðrum orðum, gefa mér band og ég mun skanna það fyrir stykki af upplýsingar um áhuga. Hvað þýðir það? Segjum sem svo að ég slá í, bókstaflega, 123 á lyklaborðinu og ýta síðan á Enter. Hvað er gögn gerð af 123 þegar aftur með GetString? >> [Nemandi] String. Það er augljóslega band, ekki satt? Ég fékk band. Svo er 123 í raun, vitna-unquote, 123 með \ 0 í lok þess. Það er ekki int. Það er ekki tala. Það lítur út eins og númer en það er í raun ekki. Svo hvaða hjartarskinn GetInt að gera? Það þarf að skanna þessi band vinstri til hægri - 123 \ 0 - og einhvern veginn umbreyta til raunverulega heiltölu. Þú getur fundið út hvernig á að gera þetta. Ef þú heldur aftur til pset2, fékk væntanlega smá ánægð með keisarans eða Vigenere, svo þú getur iterate yfir band, getur þú umbreyta chars til ints. En Heck, það er a heild einhver fjöldi af vinna. Hvers vegna ekki að kalla virka eins sscanf sem gerir það fyrir þig? Svo ráð sscanf rifrildi - í þessu tilfelli heitir lína, sem er band. Þú verður að tilgreina þá í gæsalöppum, mjög svipað printf, hvað þú búast við að sjá í þessum streng. Og það sem ég er að segja hér er að ég búist við að sjá heiltala og kannski staf. Og við munum sjá hvers vegna þetta er raunin í bara smá stund. Og það kemur í ljós að þetta tákn er nú minnir á efni við byrjuðum að tala um rúmlega viku síðan. Hvað er & n og & C að gera fyrir okkur hér? >> [Nemandi] Heimilisfang n og heimilisfang c. Já. Það er að gefa mér heimilisfang n og heimilisfang c. Hvers vegna er það mikilvægt? Þú veist að með aðgerðum í C, getur þú alltaf farið í gildi eða ekkert gildi á öllum. Þú getur skila int, a band, a fljóta, á char, hvað, eða þú getur aftur tóm, en þú getur bara aftur eitt hámarks. En hér viljum sscanf aftur mig kannski int heiltala, og einnig bleikju, og ég ætla að útskýra hvers vegna bleikju í smástund. Þú vilt í raun sscanf aftur tvennt, en það er bara ekki hægt í C. Þú getur unnið í kringum það með því að láta í tveimur heimilisföng því um leið og þú réttir fall tvö heimilisföng, Hvað getur þessi aðgerð að gera við þá? >> [Nemandi] Skrifa þeim viðtakandi. Það getur skrifað þær tölur. Þú getur notað stjörnu aðgerð og fara þangað, til hvers þær tölur. Það er tegund af þessu bak-dyr vélbúnaður en mjög algengt að breyta gildi breytur meira en bara einn stað - í þessu tilfelli, tveir. Nú eftir að ég er að haka í == 1 og svo aftur n ef það er, í raun, meta til satt. Svo hvað er í gangi? Tæknilega, allt sem við viljum í raun að gerast í GetInt er þetta. Við viljum að flokka, svo að segja, við viljum að lesa strenginn - vitna-unquote 123 - og ef það lítur út eins og það er a tala þar, hvað við erum að segja sscanf að gera er sett að tala - 123 - í þessari breytu N fyrir mig. Svo hvers vegna þá var ég í raun á þessu líka? Hvað er hlutverk sscanf segja að þú gætir líka fengið þér staf hér? [Inaudible nemandi svar] >> kommu raun gæti unnið. Við skulum halda að hugsun um stund. Hvað annað? [Nemandi] Það gæti verið NULL. >> Góð hugsun. Það gæti verið núll staf. Það er reyndar ekki í þessu tilviki. Já. >> [Nemandi] ASCII. ASCII. Eða láta mig alhæfa enn frekar. The% c er bara að stöðva villa. Við viljum ekki að það að vera persóna eftir fjölda, en hvað þetta gerir mig að gera er eftirfarandi. Það kemur í ljós að sscanf, auk geyma gildi í N-og C í þessu dæmi hér, hvað einnig er er það skilar fjölda af breytum það að setja gildi inn Svo ef þú slærð aðeins í 123, þá aðeins% d er að fara að passa, og aðeins N fær geymd með gildi eins og 123, og ekkert verður sett í c. C enn sorp gildi, svo að segja - sorp því það er aldrei verið frumstilla að einhverju gildi. Svo í því tilfelli, sscanf skilar 1 því ég byggja 1 af þessum ábendingum, í því tilviki frábært, ég er int svo ég losa línuna til að losa minni að GetString úthlutað í raun, og þá get ég aftur n, annars ef þú alltaf furða þar sem Reyna yfirlýsing kemur frá, það kemur frá hægri hér. Svo ef hins vegar gerð I í 123foo - bara nokkrar af handahófi röð af texta - sscanf er að fara að sjá númer, númer, númer, F, og það er að fara að setja 123 í n, það er að fara að setja f í C og svo aftur 2. Þannig að við höfum bara með einföldu skilgreiningu á hegðun sscanf er, á mjög einfaldan hátt - Jæja, flókið við fyrstu sýn, en í lok dags frekar einfalt vélbúnaður - að segja er það að int og ef svo er, er að það eina sem ég fann? Og stafabil hér er vísvitandi. Ef þú lest skjöl fyrir sscanf, segir það þér að ef þú setur stykki af bil í upphafi eða í lok, sscanf of vilja leyfa the notandi, hver sem ástæðan er, að lemja rúm bar 123 og það mun vera lögmætur. Þú munt ekki æpa á notanda bara vegna þess að þeir högg the rúm bar í upphafi eða í lok, sem er bara lítið meira notandi-vingjarnlegur. Einhverjar spurningar þá á GetInt? Já. >> [Nemandi] Hvað ef þú setur bara í bleikju? Góð spurning. Hvað ef þú gafst bara í bleikju eins og F og ýttu á Enter án þess nokkurn tíma að skrifa 123? Hvað telur þú að hegðun þessa línu af kóða myndi þá vera? [Inaudible nemandi svar] Já, svo sscanf geta snert það líka vegna þess að í því tilfelli, það er ekki að fara að fylla n eða c. Það er að fara að stað aftur 0, en þá er ég líka smitandi að atburðarás því áætlað verðmæti sem ég vil er 1. Ég vil aðeins eitt og aðeins eitt að vera fyllt. Góð spurning. Aðrir? Allt í lagi. Við skulum ekki fara í gegnum allar aðgerðir hér, en sá sem virðist vera kannski af hinum áhugi er GetString vegna þess að það kemur í ljós að GetFloat, GetInt, GetDouble, GetLongLong allt Punt a einhver fjöldi af virkni þeirra til GetString. Svo skulum taka a líta á hvernig hann er útfærður hér. Þetta eitt lítur svolítið flókið, en það notar sömu grundvallaratriði að við byrjuðum að tala um í síðustu viku. Í GetString, sem tekur engin rök sem á að ógilt upp hér og það skilar streng, ég greinilega er að lýsa a band heitir biðminni. Ég í raun ekki vita hvað það er að fara til vera notaður fyrir enn, en við munum sjá. Það lítur út eins og getu er sjálfgefið 0. Ekki alveg viss hvar þetta er að fara, er ekki viss hvað N er að fara til vera notaður fyrir enn, en nú er að fá aðeins meira áhugavert. Í línu 243, lýsa við int c. Þetta er tegund af heimskulegt smáatriði. A bleikju er 8 bitar, og 8 bitar geta geymt hversu margar mismunandi gildi? >> [Nemandi] 256.. >> 256. Vandamálið er ef þú vilt hafa 256 mismunandi ASCII stafi, sem þar eru Ef þú hugsa til baka - og þetta er ekki eitthvað til að leggja á minnið. En ef þú heldur aftur að stór ASCII töfluna við höfðum vikum, voru í því tilfelli 128 eða 256 ASCII stafi. Við notuðum öll mynstur 0s og 1s upp. Það er vandamál ef þú vilt vera fær um að uppgötva villu því ef þú ert þegar að nota 256 gildi fyrir stafi, þú ekki í raun að skipuleggja fram í tímann vegna þess að nú hefur þú engin leið til að segja, þetta er ekki legit karakter, þetta er einhver röng skilaboð. Svo er það sem heimurinn er að þeir nota næsta stærsta gildi, eitthvað eins og int, þannig að þú ert brjálaður fjölda bita, 32 fyrir 4 milljarða mögulegra þannig að þú getur einfaldlega endað með því að nota fyrst og fremst 257 af þeim, 1 sem hefur einhverja sérstaka þýðingu sem villu. Svo skulum sjá hvernig þetta virkar. Í línu 246, hef ég þetta stóra meðan lykkja sem kallar fgetc, f merkingu skrá, svo getc, og þá stdin. Það kemur í ljós að þetta er bara nákvæmari leið til að segja að lesa inntak frá lyklaborðinu. Standard inntak þýðir hljómborð, staðall framleiðsla þýðir skjár, og staðalskekkja, sem við munum sjá í pset4 þýðir skjánum en sérstaka hluta skjásins þannig að það er ekki conflated með raunverulegum framleiðsla að þú ætlaðir að prenta. En meira um það í framtíðinni. Svo þýðir fgetc bara lesa einn staf af lyklaborðinu og geyma hann þar? Geymið það í c. Og þá stöðva - svo ég er bara með einhverja Boolean conjunctions hér - athuga að það er ekki jafn - \ n, þannig að notandi hefur högg inn, viljum við hætta á þeim tímapunkti, enda hliðar - og við viljum líka að athuga sérstaka stöðuga EOF, sem ef þú veist eða giska, hvað þýðir það standa fyrir? >> [Nemandi] Lok skrá. >> Lok skrá. Þetta er góður af nonsensical því ef ég er að skrifa á lyklaborðinu, Það er í raun engin skrá sem taka þátt í þessu, en þetta er bara svona almenna hugtakið notað til að þýða að ekkert annað er að koma frá fingrum mannsins er. EOF - endir skjals. Sem innskot, ef þú hefur einhvern tíma högg Control D á lyklaborðinu, ekki að þú þyrftir enn - þú hefur högg Control C - Control D sendir þetta sérstaka fasti heitir EOF. Svo nú höfum við bara sumir dynamic minni úthlutun. Svo ef (n + 1> getu). Nú ég skal útskýra n. N er bara hversu mörg bæti eru í biðminni, strengurinn sem þú ert að byggja upp frá notanda. Ef þú ert með fleiri stafi í biðminni en þú hefur getu í biðminni, innsæi hvað við þurfum að gera þá er að úthluta meiri getu. Þannig að ég ætla að Lögð gegnum sumir af the tölur hér og einblína aðeins á þessari aðgerð hér. Þú veist hvað malloc er eða eru að minnsta kosti almennt þekki. Taktu giska hvað realloc gerir. >> [Nemandi] Bætir minni. Það er ekki alveg að bæta minni. Það reallocates minni sem hér segir. Ef það er enn pláss í lok band til að gefa þér meira af því minni en það gefur upphaflega þig, þá munt þú fá þessi auka minni. Svo getur þú bara að halda að setja stafi á streng til baka til baka til baka til baka. En ef það er ekki raunin vegna þess að þú beðið of lengi og eitthvað af handahófi fékk plopped í minni þar en það er auka minni hérna, það er allt í lagi. Realloc er að fara að gera allt þungt að lyfta fyrir þig, færa strenginn sem þú hefur lesið í svona langt áfram, setja það niður, og þá gefa þér nokkrar fleiri flugbraut á þeim tímapunkti. Svo með bylgju af hendi, láta mig segja að það GetString er að gera það er að byrja með litlum buffer, kannski einn staf, og ef notandinn slær inn tvo stafi, GetString endar starf realloc og segir ein persónan var ekki nóg, að gefa mér tvo stafi. Síðan ef þú lest í gegnum rökfræði lykkju, það er að fara að segja notandinn slegið í 3 stöfum, að gefa mér nú ekki 2 en 4 stafir, þá gefa mér 8, þá gefa mér 16 og 32. Sú staðreynd að ég er tvöföldun getu í hvert sinn þýðir að biðminni er ekki að fara að vaxa hægt og rólega, það er að fara að vaxa frábær hratt. Og hvað gæti verið kostur á því? Hvers vegna fæ ég tvöfalda stærð biðminni jafnvel þó að notandinn gæti bara þurft einn auka staf úr lyklaborðinu? [Inaudible nemandi svar] >> Hvað er það? >> [Nemandi] Þú þarft ekki að vaxa það eins oft. Einmitt. Þú þarft ekki að vaxa það eins oft. Og þetta er bara svona þú ert að verja veðmál þín hér, Hugmyndin er að þú vilt ekki að kalla realloc mikið vegna þess að það hefur tilhneigingu til að vera hægur. Í hvert sinn sem þú biður um stýrikerfi fyrir minni, eins og þú munt fljótlega sjá í framtíðinni vandamál setja, gæta þess að taka nokkurn tíma. Svo lágmarkað tíma, jafnvel ef þú ert að sóa pláss, tilhneigingu til að vera gott. En ef við lesum í gegnum það sem kemur síðas hluti af GetString hér - og aftur að skilja hvert einasta lína hér er ekki svo mikilvægt í dag - eftir að það kallar á endanum malloc aftur og það úthlutar nákvæmlega eins mörg bæti sem það þarf á að halda band og þá kastar burt því að kalla frjálsa of stór stuðpúði ef það örugglega fékk tvöfaldast of mörgum sinnum. Svo í stuttu máli, það er hvernig GetString hefur verið að vinna allan þennan tíma. Allt það gerir er að lesa einn staf í einu aftur og aftur og aftur, og í hvert skipti sem það þarf nokkrar auka minni, biður það stýrikerfi fyrir það með því að kalla realloc. Einhverjar spurningar? Allt í lagi. An árás. Nú þegar við skiljum ábendingum eða að minnsta kosti er sífellt þekkja ábendingum, skulum íhuga hvernig allur heimurinn byrjar að hrynja ef þú ert ekki alveg verjast andstæðinga notendur, fólk sem eru að reyna að reiðhestur inn í kerfið, fólk sem eru að reyna að stela hugbúnað með því að sniðganga sumir skráning merkjamál að þeir gætu annars hafa að slá inn Taka a líta á þetta dæmi hér, sem er bara C kóða sem hefur fall helstu neðst sem kallar virka foo. Og hvað er það sem liggur að foo? [Nemandi] Ein rök. >> [Malan] Ein rök. Svo argv [1], sem þýðir fyrsta orðið sem notandinn slegið á stjórn lína eftir a.out eða hvað forritið heitir. Svo foo efst tekur í char *. En char * er bara hvað? >> [Nemandi] A streng. [Malan] A streng, þannig að það er ekkert nýtt hér. Þessi strengur er geðþótta vera kölluð Bar. Í þessari línu hér, bleikju C [12], í konar hálf-tækni ensku, hvað er þetta lína að gera? [Nemandi] An array - >> Array? >> [Nemandi] stafi. >> Litur. Gefðu mér fjölda af 12 stöfum. Svo við gætum kalla þetta biðminni. Það er tæknilega kallast C, en biðminni í forritun bara átt fullt af plássi sem þú getur sett smá dót tommur Þá loks, memcpy við höfum ekki notað áður, en þú getur sennilega giska á hvað það gerir. Það afritar minni. Hvað þýðir það að gera? Það afritar greinilega bar, inntak þess, í C en aðeins upp að lengd bar. En það er padda hér. >> [Nemandi] Þú þarft sizeof staf. >> Lagi. Tæknilega, ættum við í raun að gera strlen (bar) * sizeof (char)). Það er rétt. En í versta tilfelli hér, við skulum gera ráð fyrir að that's - Allt í lagi. Þá er það tveir bugs. Svo sizeof (char)); Við skulum gera þetta aðeins stærra. Svo nú er það enn a padda sem er hvað? >> [Inaudible nemandi svar] Athuga hvað? >> [Nemandi] Athugaðu for null. Við ættum almennt að haka for null vegna slæmur hlutur gerast þegar bendillinn er NULL því þú might endir upp að fara þarna, og þú ættir aldrei að fara að NÚLL með dereferencing það með stjörnu rekstraraðila. Svo er það gott. Og hvað annað eigum við að gera? Rökrétt, það er galli hérna líka. [Nemandi] Athuga hvort argc er> = í 2. Svo athuga hvort argc er> = 2. Jæja, svo það er þrjár villur í þessu forriti hér. Fylgst athuga hvort notandinn í raun slegið á allt í argv [1]. Gott. Svo er það þriðji galla? Já. >> [Nemandi] C gæti ekki verið nógu stór. Gott. Við skoðuðum eitt dæmi. Við skoðuðum óbeint gera afrit ekki meira minni en yrði farið lengd bar. Svo ef band notandinn slegið inn er 10 stafir að lengd, þetta er að segja aðeins afrita 10 stafi. Og það er allt í lagi. En hvað ef notandinn slegið inn orð á að hvetja eins og 20-stafa orð? Þetta er að segja afrit 20 stafi af bar í það? C, annars þekkt sem biðminni okkar, sem þýðir að þú skrifaði bara gögn til 8 bæti stöðum sem þú átt ekki, og þú átt ekki þá í þeim skilningi að þú aldrei úthlutað þeim. Svo er þetta það sem er almennt þekktur sem gnægð biðminni árás eða biðminni umframmagn árás. Og það er árás í þeim skilningi að ef notandi eða forrit sem kallar á virka er að gera þetta af illgirni, hvað raunverulega gerist næst gæti reyndar verið alveg slæmt. Svo skulum taka a líta á þessari mynd hér. Þessi mynd sýnir stafla þinn af minni. Muna að í hvert skipti sem þú hringja í aðgerð sem þú færð þetta litla ramma á stafla og svo annað og svo annað og annað. Og svona langt, við höfum bara svona abstracted þessar sem rétthyrninga annaðhvort í stjórn eða á skjánum hér. En ef við rennum inn á einn af þessum ferhyrninga, þegar þú kallar fall foo, það kemur í ljós að það er meira á stafla innan þess ramma í því rétthyrningur en bara x og y og a og b, eins og við var að tala um skipti. Það kemur í ljós að það er sumir lægra stigi upplýsingar, meðal Return Address. Svo kemur í ljós þegar helstu kallar foo, helstu að upplýsa foo hvaða tölu helstu er í minni tölvu því annars, eins fljótt og foo er gert að framkvæma, eins og í þessu tilfelli hér, þegar þú nærð þessu lokaða hrokkið Brace í lok foo, hvernig Heck er foo veit hvar stjórn áætlunarinnar er ætlað að fara? Það kemur í ljós að svarið við þeirri spurningu er í þessu rauða rétthyrningur hér. Þetta bendi, og það er allt í tölvunni til að geyma tímabundið á svokölluðu stafla heimilisfang helstu svo að um leið og foo er gert framkvæmd, tölva veit hvar og hvaða línu í haf til að fara til baka. Vistað Frame bendillinn tengist álíka þessu. Char * Bar hér stendur hvað? Nú er þetta Blue hluti hér ramma Foo er. Hvað er barinn? Bar er bara rök á foo virka. Svo nú erum við aftur konar kunnuglega mynd. Það er meira efni og fleiri truflanir á skjánum, en þetta ljósblátt hluti er bara það sem við höfum verið að teikna á chalkboard fyrir eitthvað eins skipti. Það er rammi fyrir foo. Og það eina sem í það núna er bar, sem er þessa breytu. En hvað ætti að vera í stafla samkvæmt þessum kóða hér? [Nemandi] bleikju C [12]. >> [Malan] bleikju C [12]. Við ættum einnig að sjá 12 reitum af minni úthlutað til breytu sem heitir c, og reyndar að við höfum það á skjánum. The mjög toppur það er C [0], og svo höfundur þessarar myndinni ekki nennir að teikna alla ferninga, en það eru örugglega 12 þarna því ef þú lítur neðst til hægri, C [11] ef þú telja frá 0 er 12. svo bæti. En hér er vandamálið. Í hvaða átt er C vaxa? Raða af efstu niður ef það byrjar efst og vex til botns. Það lítur ekki eins og við fórum okkur mikið flugbraut hér yfirleitt. Við höfum konar mála okkur út í horn, og C [11] er rétt upp gegn bar, sem er rétt upp gegn Vistaður Frame músina, sem er rétt upp við Heimilisfang aftur. Það er ekki meira pláss. Svo er það óbeint þá ef þú skrúfa upp og þú ert að reyna að lesa 20 bæti í 12-bæti biðminni? Hvar eru þeir 8 til viðbótar bæti að fara? >> [Nemandi] Inside - Inni allt annað, sum hver er frábær mikilvægt. Og mikilvægast, hugsanlega er rauði kassi þar, Return Address, því gera ráð fyrir að þú annað hvort af tilviljun eða adversarially skrifa þá 4 bæti, sem bendillinn tölu, ekki bara með sorp en með fjölda sem gerist að tákna raunverulegt heimilisfang í minni. Hvað er óbeint, þá er rökrétt? >> [Nemandi] aðgerð er að fara að fara aftur á annan stað. Einmitt. Þegar Foo skilar og smellir sem hrokkið borsveif, forritið er að fara að halda áfram ekki að snúa aftur til helstu, það er að fara að fara aftur til hvað heimilisfang í því rauða reitnum. Sé um að ræða kringum hugbúnaður skráningu, hvað ef heimilisfang sem er verið að skila til er fall sem venjulega fær kallað eftir að þú hefur greitt fyrir hugbúnaðinn og inputted skráning merkjamál þinn? Hægt er að raða á bragð tölvuna í ekki að fara hér, en í staðinn að fara upp hér. Eða ef þú ert virkilega snjall, að andstæðingurinn getur í raun slá á lyklaborðinu, til dæmis, ekki raunveruleg orð, ekki 20 stafir, en geri ráð fyrir hann eða hún í raun gerðir í tákn sem tákna kóða. Og það er ekki að fara að vera C kóða, það er í raun að fara að vera stafir sem tákna tvöfaldur vél númer, 0s og 1s. En geri ráð fyrir að þeir eru sniðug nóg til að gera það, að einhvern veginn líma í GetString hvetja eitthvað sem er í raun saman kóða, og síðustu 4 bytes skrifa það aftur heimilisfang. Og hvað heimilisfang er að inntak að gera? Það geymir í raun í þessum rauða rétthyrningur heimilisfang fyrsta bæti í biðminni. Svo þú verður að vera mjög sniðug og það er mikið af réttarhald og villa fyrir slæmt fólk þarna úti, en ef þú getur fundið út hversu stórt þetta biðminni er þannig að síðustu bæti í inntak þú gefa til the program verður að vera jafngild á heimilisfang upphafi biðminni, getur þú gert það. Ef við segjum venjulega halló og \ 0, það er það sem endar í biðminni. En ef við erum meira snjall og við fylla það biðminni með það sem við munum generically kalla árás númer - AAA, árás, árás, árás - ef þetta er bara eitthvað sem gerir eitthvað slæmt, hvað gerist ef þú ert virkilega snjall, þú gætir gert það. Í rauða reitnum hér er röð af tölum - 80, C0, 35, 08. Takið eftir því að það passar við fjölda sem er hérna. Það er í öfugri röð, en meira um það seinna. Takið eftir að þessi aftur veffang vísvitandi breytt til að jafna tölu upp hér, ekki heimilisfang Main. Svo ef slæmur strákur er frábær sviði, hann eða hún er að fara að setja í þeim árás númer eitthvað eins og eyða öllum skrám notandans eða afrita lykilorð eða búa til notanda sem ég get þá skráð þig inn í - eitthvað. Og þetta er bæði hætta og kraftur C. Þar sem þú hefur aðgang að minni með ábendingum og þú getur því að skrifa eitthvað sem þú vilt inn í minni í tölvu, þú geta gera a tölva gera neitt sem þú vilt einfaldlega með því að hafa það hoppa um innan eigin minni hennar. Og svo í dag svo margir programs og svo margir vefsíður sem eru í hættu sjóða niður til fólks að taka sér þetta. Og þetta kann að virðast eins og a frábær háþróuð árás, en það þýðir ekki alltaf að byrja svona. Staðreyndin er sú að það sem vont fólk yfirleitt gera er hvort sem það er forrit á stjórn lína eða GUI forrit eða vefsíðu, þú byrjar bara að veita bull. Þú slærð inn í mjög stórt orð í leitarreitinn og ýta á Enter, og að bíða til að sjá hvort vefsvæðið hrun eða þú að bíða til að sjá hvort forritið birtist sumir villuboð því ef þú færð heppinn og slæmur strákur og þú veita brjálaður inntak sem hrun program, sem þýðir að forritarinn gerði ekki ráð fyrir slæma hegðun þína, sem þýðir að þú getur sennilega með nóg áreynsla, nóg réttarhald og villa, reikna út hvernig á að heyja nákvæmari árás. Svo eins og mikill hluti af öryggi er ekki bara að forðast þessar árásir öllu en greina þá og í raun að horfa á logs og sjá hvað brjálaður aðföng hafa fólk slegið inn vefsíðuna þína, hvaða leitarorð hafa fólk slegið inn vefsíðuna þína í von um að barmafullur sumir biðminni. Og þetta snýst allt um að einföld grunnatriði Hvað er fylki og hvað þýðir það að úthluta og nota minni. Tengt því þá er líka þetta. Við skulum bara litið inni í disknum enn og aftur. Þú minnist úr viku eða tveimur síðan að þegar þú draga skrár í ruslafötuna eða ruslakarfa, hvað gerist? >> [Nemandi] Ekkert. >> Nákvæmlega ekkert, ekki satt? Að lokum ef þú keyrir lítið um pláss diskur, Windows eða Mac OS mun byrja að eyða skrám fyrir þig. En ef þú dregur eitthvað í það, það er alls ekki öruggur. Allt herbergisfélagi eða vinur eða fjölskyldumeðlimur þarf að gera er tvöfaldur smellur og voila, það er allt sketchy skrár sem þú reyndir að eyða. Flest af okkur að minnsta kosti vita að þú þarft að hægri smella eða Control smelltu og tæma ruslið eða eitthvað svoleiðis. En jafnvel þá sem er ekki alveg að gera the bragð því hvað gerist þegar þú ert með skrá á harða disknum þínum sem felur í sér nokkra Word skjal eða einhver JPEG, og þetta táknar harða diskinn, og við skulum segja að þetta Sliver hér táknar að skrá, og það samanstendur af heild búnt af 0s og 1s. Hvað gerist þegar þú ekki aðeins draga að skrá í ruslið geta eða ruslafötuna en einnig tæma það? Raða af engu. Það er ekki nákvæmlega ekkert núna. Nú er það bara ekkert vegna þess að litla eitthvað gerist í formi þessa töflu. Svo er það einhvers konar gagnagrunni eða borð inni minni í tölvu sem hefur í raun einn dálk fyrir skrár 'nöfn og einn dálkur fyrir skrár' stað, þar sem þetta gæti verið staðsetning 123, bara af handahófi númer. Þannig að við gætum haft eitthvað eins x.jpeg og staðsetningu 123. Hvað gerist svo þegar þú tæma raunverulega ruslið? Það fer í burtu. En það þýðir ekki að fara í burtu er 0s og 1s. Svo hvað er þá tenging við pset4? Jæja, með pset4, bara vegna þess að við höfum óvart eytt um Compact Flash kort sem hafði allar þessar myndir eða bara vegna þess að það af óheppni varð skemmd þýðir ekki að 0s og 1s eru ekki enn. Kannski nokkrar þeirra hafa tapast vegna þess að eitthvað fékk skemmd í þeim skilningi að sumir 0s varð 1s og 1s varð 0s. Slæmur hlutur getur gerst vegna buggy hugbúnaði eða gölluð vélbúnaði. En margir af þeim bita, jafnvel 100% af þeim eru enn þarna. Það er bara að tölvan eða myndavélin veit ekki hvar JPEG1 byrjaði og þar JPEG2 byrjaði. En ef þú, forritari, ég veit með smá kunnátta sem þessir JPEG eru eða hvað þeir líta út svo þú getur greina 0s og 1s og segja JPEG, JPEG þú getur skrifað forrit með þannig bara fyrir eða á meðan lykkja að batna hvert og eitt af þessum skrám. Lexían er þá að byrja tryggilega eyða skrám Ef þú vilt koma í veg fyrir þetta með öllu. Já. [Nemandi] Hvernig kemur það segir á tölvunni þinni að þú hefur meira minni en þú gerðir áður? Hafa meira minni en þú gerðir áður - >> [nemandi] Meira tiltækt minni. Oh. Góð spurning. Svo hvers vegna þá eftir að tæma ruslið er tölvan þín að segja þér að þú ert með fleiri pláss en þú gerðir áður? Í hnotskurn, því það er að ljúga. Meira tæknilega, þú þarft meira pláss því nú þú hefur sagt þú getur sett annað efni þar sem að skrá einu sinni var. En það þýðir ekki að bitar eru að fara í burtu, og það þýðir ekki að bita eru breytt í öll 0s, til dæmis, til verndar. Svo hins vegar ef þú eyða tryggilega skrár eða líkamlega eyðileggja tækið, sem er í raun eina leiðin stundum um það. Svo hvers vegna eigum við ekki að fara á þessi hálf-ógnvekjandi huga, og við munum sjá þig á mánudaginn. [Lófaklapp] [CS50.TV]