[Musik spiller] DAVID MALAN: Okay. Dette er CS50, og dette er slutningen af ​​uge 2. Jeg er så ked af jeg ikke kunne være der med jer alle i dag, men du er i meget gode hænder. Tillad mig at introducere CS50 egen Rob Bowden. ROB BOWDEN: Og selvfølgelig, så vi er nødt til at gøre grin med det faktum, at han har sendt os en vertikal video og vise dette. [VIDEO PLAYBACK] [Musik spiller] [FOOTSTEPS] -Denne Video ikke nødt til at se på denne måde. Det kunne have været forhindret. Sig nej til lodrette videoer. -Lodret Videoer ske, når du Hold dit kamera den forkerte vej. Din video vil ende med at ligne lort. - [GRUNT] -Der Er flere og flere mennesker afhængige at gøre vertikale videoer hver dag. Det er ikke revne eller ingenting, men det er stadig virkelig dårlig. Der er to forskellige slags mennesker, der er ramt af VVS. Den første gruppe behandler videoer, de skyder ligesom billeder. De behøver ikke betyde nogen skade. De bare ikke forstå, at mens du kan slå et billede, du kan ikke rigtig vende en video. [CRASH] - [MONKEY SOUNDS] -Den Anden gruppe er folk som ikke giver et [BLEEP]. -Lodret Video Syndrome er farligt. Levende billeder har altid været vandret. Fjernsynet er vandret. Computerskærme er vandret. Folks øjne er vandret. Vi er ikke bygget til at se lodrette videoer. -Jeg Elsker lodrette videoer. -Nobody Bekymrer sig om dig. -Hvis Dette problem er ikke gøres noget, du også vil begynde at vise fire videoer på én gang blot for at spare båndbredde. -Letterboxed Lodrette videoer ville være på størrelse med et frimærke. -Og Det vil sprede overalt. Film skærme har altid været vandret. Hvis lodrette videoer bliver accepterede, biografer skal være høj og tynd. -Og Alle biografer ville nødt til at få revet ned og genopbygget. Og ved den tid, de blev genopbygget, Mila Kunis ville være gammel og grim. -Birds Vil gå ned i dem og dø. -Vi Alle få stive halse fra at se op. -Og Ingen vil sidde i den forreste række nogensinde igen. -George Lucas vil re-release stjerne Krige igen-- skinny udgave. -Jeg Var aldrig rigtig i stand til at fortælle den historie, som jeg ønskede at fortælle. Dette var en stor chance for mig at eksperimentere med en ny teknologi. -Du Et ryk. -Hver Gang en mobil enhed der bruges til at optage video, fristelsen er der. Bare sige nej. Sig nej til George Lucas. Sig nej til gamle Mila Kunis. Sig nej til lodrette videoer. -Og Hvis du ser nogen gøre det, siger, "du er ikke at skyde denne ret dummy!" [Musik spiller] [END AFSPIL] [Applaus] [AUDIO OUT] ROB BOWDEN: --simple form for kryptografi, som er dybest set kryptering og dekryptering af hemmelige meddelelser. Så her har vi en meget simpel stykke legetøj. Og ideen er den ydre ring roterer omkring den indre ring. Og du kan se, måske hvis jeg zoome i, at-- det er svært at se. Men ligesom antallet 1-- godt, det flyttet. Tallet 1 kort til brevet X, nummer 2 kort til brevet J. utroligt svært ikke at springe frem. Brev 2 kort til J. Nummer 3 kort til D. Så med denne ring, du kan give nogen en besked 1, 2, 3. Af en eller anden grund du ønsker at fortælle dem XJD. Men du kan give dem nogle budskab af tal, og så længe de har denne ring, de kan dekryptere hvad du prøver at sige. Så du kan have set dette særligt eksempel på kryptografi før, hvis omkring juletiden du har set A Christmas Story. Hvis du aldrig har set det før, så bare tænde TBS ved bogstaveligt enhver tid juleaften, fordi de bare vise det tilbage til tilbage til tilbage til tilbage til tilbage hele dagen. Og den relevante video er dette. [VIDEO PLAYBACK] -Vær Det kendt for alle og enhver at Ralph Parker er hermed udnævnes til medlem af Den Lille Orphan Annie Secret Circle og har ret til alle de æresbevisninger og fordele forekommende dertil. Signeret Lille Orphan Annie. Medunderskrives Pierre Andre med blæk! Honors og fordele allerede i en alder af ni! [YELLING fra radio] -Kom nu. Lad os komme videre med det. Jeg behøver ikke alt det jazz om smuglere og pirater. Lyt i morgen aften med den afsluttende eventyr af Black Pirate Ship. Nu er det tid til Annies hemmelig besked for dig medlemmer af Secret Circle. Husk børn, kun medlemmer af Annies Secret Circle kan afkode Annies hemmelig besked. Husk, er Annie afhængig af dig. Sæt dine ben til B2. Her er budskabet. 12. 11. 2. -Jeg Er i min første hemmeligt møde. -25. 14.. 11. 18. 16. -OH, Pierre er i stor stemme i aften. Jeg kunne fortælle, at aftenens budskab var virkelig vigtigt. -3. 25.. Det er en besked fra Annie selv. Husk, ikke fortælle nogen. -fem Sekunder senere, jeg er i den eneste rum i huset, hvor en dreng på ni kunne sidde i fred og afkode. Aha! B! Jeg gik til den næste. E. Det første ord er "være". S. Det kom nemmere nu. U. 25. Det er R. -Kom På, Ralphie! Jeg mĺ gå! -Jeg Være helt ned, Ma! Gee Whiz. T. O. "Sørg for at" - være sikker på hvad? Hvad var lille Orphan Annie prøver at sige? Vær sikker på at hvad? -Randy Har fået til at gå! Vil du venligst komme ud? -Alle Ret, mor! Jeg kommer lige ud! Jeg var ved at blive tættere nu. Spændingen var forfærdeligt. Hvad var det? Den skæbne af planeten kan hænge i balance! -Ralphie, Randys fik at gå! -Jeg Være lige ud, for skriger højt! Er der næsten! Mine fingre fløj. Mit sind var en stål fælde. Hver pore vibrerede. Det var næsten klar! Ja. Ja. Ja. Ja. Vær sikker på at drikke din Ovaltine. Ovaltine? En mærkværdige kommercielle? Søn af en tæve. [END AFSPIL] ROB BOWDEN: Så det er sådan Ovaltine vedrører kryptering. Dybest set CS50 netop annonceret Ovaltine, så vi kunne være en mærkværdige reklame for Ovaltine. Okay. Så nu faktiske datalogi. Husk på mandag vi slap dykning dybere ind strenge. Så vi havde at gøre med strengen "Zamyla." Og vi var anerkende det faktum, at vi kan behandle "Zamyla" som en sekvens af tegn. Og husk, at vi har lært beslaget notation. Så hvis dette blev opbevaret i en streng "s" og derefter hvis vi sagde s beslag 0, der ville angiver hovedstaden Z. bogstav Og hvis vi sagde s beslag 1, at ville indikere den første små bogstaver a, og så videre op til s beslag 5, hvilket indikerer den sidste a. Husk nu, at det Længden af ​​denne streng er 6, men indeksene i strengen er 0 til 5, Z gennem denne vare. Så det nu passer ind i et større billede af computerens hukommelse, din RAM. Så sted det program, du kører din computer skal huske Zamyla et sted i hukommelsen. Så kan jeg have en frivillig? Ja tak. Og hvad er dit navn? DEAN: Dean. ROB BOWDEN: Dean? Rart at møde dig, Dean. Så kom herover, og vi vil have du tegner på vores dejlig fiks indretning af hukommelse. Nu vil jeg gerne tænke på hukommelsen som en lang strimmel af bytes, men bare for visning vi får bare venstre til højre, top til bund. OK? Så jeg har tænkt mig at vise en program-- Getstrings.c. Og så alt dette program er gør anmoder fire strygere fra brugeren med GetString og derefter udskrivning hvad det så første streng indtastet var. Vi ignorerer to gennem fire. OK. Så herovre nu-- når Jeg første anmodning S1. Så du er på computeren. Og du gennemfører getString. Så du anmode om en snor fra mig, og jeg siger, OK, Dean. Giv strengen "Dean". Så et eller andet sted i hukommelsen, du nødt til at huske "Dean". Så skriv det i hukommelsen eller andet sted. Perfekt. OK. Så nu har vi S2. Og S2 bliver en anmodning til getString. Så jeg har tænkt mig at indtaste en streng. Jeg har tænkt mig at skrive "Hannah". Så indtaste "Hannah" et sted i hukommelsen. Ja. A-H. OK, så nu s3. Og det vil være en anden anmode om at getString. Og så nu indtaste "Maria". Okay. Og så er der en sidste anmodning til getString, S4. Så ved jeg ikke. Hvad med vi gå med antidisestablishmentarianism. Så indtast det i hukommelsen. Ja. Så bare gøre "Rob". OK. Så nu explain-- hvorfor gjorde du lader disse rum? Hvorfor har du denne tomt plads her, her, og her? Ja. Så bemærke, når jeg går at udskrive s1-- så hvis vi havde "Hannah" kører lige op ved siden af ​​"Dean", hvordan kan vi vide, når strengen "Dean" slutter? Så udskriver strengen S1 kan have netop trykt "DeanHannahMariaRob" hvis det ikke har nogen anelse af, når "Dean" faktisk afsluttes. Okay. Så i hukommelsen den måde, vi faktisk repræsenterer denne ende af en snor er med backslash nul. Så dette rum er præcis, hvad vi ønskede. Det bør være en omvendt skråstreg nul. Dette vil være en omvendt skråstreg nul, og dette vil være en omvendt skråstreg nul. Og du kan have en fabelagtig præmie for at være en perfekt frivillig. Tag en stress bold! OK. Så denne karakter omvendt skråstreg nul er hvordan vi angive slutningen af ​​en streng. Det er hvordan når et givent program ønsker at udskrive en streng, Det er how-- husker vi lært den strlen funktionen i sidste uge? String længde? Det er, hvordan strengen længde er i stand til at bestemme, hvor længe en streng er. Det bare holder iteration over tegn indtil den finder det backslash nul tegn. Så det vigtige ting at indse om backslash nultegnet er det er repræsenteret af alle nuller i bits. Så opdager, at dette er særskilt fra nultegnet. Så nul tegn, hvis du kan huske i eksemplet, at han gav i slutningen af foredrag hvor karakterer kort at-- ligesom kapital A maps til 65. Små bogstaver et kort til 97. Små bogstaver b ville være 98. Så antallet 0 kortene at-- jeg ikke kender fra toppen af ​​mit hoved. 44 eller 45. Et eller andet sted i denne region. Så tegnet 0 er en faktiske antal. Men backslash nul kort til alle nul bit. Så der er en forskel mellem backslash nul, som vi vil kalde null terminator. Der er en forskel mellem backslash nul og karakteren nul. Okay. Så taler lidt mere om strenge. Så vi ser her er det sådan det ville blive lagt ud i hukommelsen. Så denne idé om strenge som en sekvens af characters-- så den officielle computer sciency betegnelse for sekvens er et array. Så vi ville kalde en streng et array af tegn. Og der er faktisk andre data typer, som vi kan gøre arrays ud af. Så for at motivere dette, se på et eksempel. Vi vil kalde det ages0.c jeg vil kopiere og indsætte vores skabelon. OK. Så i dette program, hvad vi ønsker, er at få fat i en alder af tre studerende på kurset. Så vi kender den int age-- og nu vil jeg sige 0. Så du måske ønsker at sige alder1, men til formål, vi vil se meget snart, Jeg vil sige int age0 lig GetInt. Så den samme kald til GetInt at vi har brugt I ikke tilfældigvis være at spørge siger: "giv mig en alder." Men bare anmoder om det. Og alder1 lig GetInt. Og int Alder2 lig GetInt. Så igen, tre elever, men i sidste ende de variable indeks er age0 gennem Alder2. OK. Så dette program vil gøre, hvad Vi vil med age0, alder1, og Alder2, men dette program i sidste instans arbejder for tre studerende. OK. Så nu, hvad hvis jeg ønsker fire studerende? Tja, jeg har tænkt mig at gå tilbage ind i min kode, ændre kommentaren, og nu har vi en int alder3 lig GetInt. OK. Så der ser problemet her? Hvad er problemet med denne form for opsætning? Ja. Ja. Så vi er ved at oprette et variabel for hver elev. Nu, virker, men der i sidste ende, hvis jeg nu sige, "Jeg ønsker at få fat i en alder af otte studerende eller 16 elever eller dog mange studerende af de hundredvis af studerende i CS50 eller de tusindvis af studerende på campus eller de milliarder af mennesker i verden? Så i sidste ende er det ikke bæredygtigt. Hver gang du ser dig selv kopiering og indsætte koden som denne, bør du generelt føler at der er en bedre måde. Så dette er, hvor vi indfører et array erklæring. Så når du erklærer et array, dette er, hvad den generelle format kommer til at se ud. Vi kommer til at sige typen. og så vil vi giver navnet på denne array, ligesom vi definere en given variabel. Og så endelig vi bruger dette beslag notation igen men i en anden sammenhæng end hvordan vi bruger det tidligere. Så her det ligner en normal variabel erklæring om, at vi har set. Så vi har set int x semikolon før. Nå nu kan vi se noget ligesom int x konsoller 5. Og sætte denne idé ind i det GetInt program, som vi have-- så vi kan implementere dette på samme måde. Lad os sige i CS er vi tilbøjelige til at bruge n er antallet af noget. Så her vil vi gemme fire elever. Og nu kan vi sige int alder beslag n- ikke helt få det yet-- at erklære et array af fire elever. Så hvordan det vil se ud i hukommelse vil svare til dette. Ryd dette. Og vi kommer til at have et sted i memory-- Jeg vil sætte dette op der. Så et sted i hukommelsen. En to tre fire. Vi har fire heltal i træk for denne række af fire tal. Så i øjeblikket, hvad der er størrelse på et af disse felter? Ja. Det er fire bytes. Det er 32 bit. Så nu er det anderledes fra arrayet, at vi så tidligere, den vifte af tegn. I en streng hver kasse var kun én byte, fordi et tegn er kun én byte. Men med et array af heltal, hver boksen skal være fire bytes med henblik på at passe en hel heltal. Så dette er hvad et array af fire ints ville se ud. Og så tilbage til kode. Nu vil vi faktisk butik heltal i den opstilling. Så nu er det en meget, meget, meget fælles mønster, der vil på et tidspunkt bliver muskel hukommelse. Så int i er lig med 0. I mindre end n. jeg plus plus. Aldersgruppe jeg lig GetInt. Så denne for-løkke, dette format, Du bør få meget vant til. Så dette er generelt, hvordan vi vil gentage over næsten enhver opstilling. Bemærk nu denne slags forklarer, hvorfor fra begyndelsen vi havde ikke efter sløjfer går til int I er lig med 1, i mindre end eller lig med 10. Begrundelsen er, at startende fra nul gør dette arbejde godt sammen med arrays. Så arrays er nul indekseret. Hvis dette array er længden 4, indeksene er 0 til 3. Så gennem den første iteration af denne for-løkke Vi kommer til at sætte alder beslag 0 svarer til et opkald til GetInt. Så uanset hvad jeg tilfældigvis at komme ind på tastaturet. I den anden aflevering, vi er indstilling alder1 lig med GetInt. Tredje aflevering, Alder2. Afsluttende pass alder3. Så hvis i det første gennemløb af løkken Jeg indtaster nummer 4 på tastaturet, så vil vi indsætte en 4 her. Hvis på den anden pass jeg indtaste 50, vil vi sætte en 50 her. På den tredje pass jeg måske Indtast negative 1, negative 1, og så endelig, hvis jeg indtaster 0-- og nu huske, at dette var indeks tre. Efter at vi loop tilbage, jeg er vil blive forøget til 4. Jeg er ikke længere mindre end n, hvilket er 4. Og vi bryder ud af løkken. Så hvad ville være galt med dette? [Uhørligt]? PUBLIKUM: [uhørligt] Ja. Så array har kun fire steder, hvilket betyder som indeks 0 til 3. Så hvis dette var tilfældet, ville jeg tage på værdien 4 på et tidspunkt. aldersgruppe, 4 vil sætte uanset hvad der sker for at være herovre til, hvad jeg har at sige, indtaste 6. Det vil være at sætte denne til 6. Men vi ved ikke, hvad der er herovre. Dette er ikke hukommelse at vi havde adgang til. Så hvis du kan huske fra den foregående forelæsning, han udskrivning ud værdier Zamyla og på et tidspunkt han ramte denne segmentering fejl. Så du vil sandsynligvis være at se mange segmentering fejl som dig gennemføre nogle af de problemområder sæt. Men dette er en af ​​de måder, hvorpå du kan støde på en segmentering fejl, når du begynder at få adgang hukommelse på måder, du ikke bør være. Så vi havde ikke adgang til denne placering, og det er en fejl. Så dette er bedre. Nu er der stadig en lille problem med denne kode. Og det er dybest set, at vi er stadig fast på fire studerende. Nu, hvis jeg vil bruge otte studerende, OK. Det er ikke så stor en aftale. Jeg kan gå i, ændre kommentere og ændre n. Nu er dette vil arbejde med otte elever. Hvis jeg kompilere denne og køre dette, vil det vise mig-- den vil anmode heltal til otte studerende og det vil bare arbejde. Men det er mindre end ideel til at nødt til at rekompilere programmet hver eneste gang Jeg ønsker at ændre antallet af studerende at jeg ønsker at indtaste aldre for. Så den endelige forbedring dette, da vi vil se her-- er vi kommer til at anmode om antallet af personer. Her har vi en række af folk i værelserne eller eventuelle aldre af mennesker i lokalet. Men vi kommer til at anmode om antallet af personer i rummet fra brugeren. Så dette er nøjagtig den samme gør-mens løkke, som vi har set før. Det er præcis de samme gør-while-løkke, som du kan gennemføre på problemet sæt. Så længe de er ind i et n mindre end 1, så der er nødt til at være på mindst én person i rummet. Så længe de er ind i et n mindre end 1, så vi kommer til at holde stille igen. Indtast tallet af mennesker i lokalet. Nu når vi har det antal af mennesker i room-- så jeg kunne komme ind, at der ikke er 200 mennesker i dette rum. Så hernede vi vil komme og erklære en vifte af størrelse 200. Vi erklære array, der er stor nok til at holde 200 aldre. Kommer ned, er det for-løkken at du vil få meget brugt til. Så iteration i dette array, at tildele hver placering i den opstilling er et heltal, og så i sidste ende her er vi blot at få et eksempel på iteration i den opstilling, for ikke at tildele værdier, men for at få adgang til værdier. Så over her ser vi, at vi siger, et år fra nu, person,% vil jeg være% Jeg år, hvor det første% i er jeg plus 1. Så jeg er dette indeks variabel. Og den anden% Jeg vil være den lagret i alderen matrix plus 1. Så dette plus 1 er bare fordi vi er saying-- dette plus 1, aldre jeg plus 1. Dette plus 1 er bare fordi vi er siger, et år fra nu den person, bliver denne gamle. Så hvorfor er dette jeg plus 1? Derfor har vi en plus 1 er der? Ja. Ja. Så husk arrays nul indekseret. Så hvis vi udskriver det ud for nogen til bare læse outputtet, så sandsynligvis de ønsker at se noget Ligesom person én, person, nummer et, vil være 20 år. Person nummer to vil være 15 år gammel. De vil hellere ikke se personen tallet nul er 15 år gammel. Så kompilere dette, og bare se, hvad det ser like-- Opret noget plads. Foretag aldre kompilerer. Løb aldre. Vi ser antallet af personer i lokalet. Så jeg vil sige, der er tre personer i værelset. Age of persons nummer et, lad os sige 15, 20, 25. Og nu vil jeg sige et år fra nu vil de være 16, 21, 26. Lad os se, at dette fungerer med en n, der ikke er lig med 3. Så hvis jeg siger antal mennesker er 5, en, to, tre, to, en, et år fra nu de vil være to, tre, fire, tre, to år. Så jeg kunne lige så let har n være 10.000. Nu vil jeg sidde her i temmelig et stykke ind aldre, men det virker. Så nu i hukommelsen et sted vi har en bred vifte af størrelse 10.000, så i sidste ende 40.000 byte, fordi der er fire bytes for hver af disse tal. Så der er en bred vifte af størrelse 10.000, hvor vi kan lagre i alderen disse 10.000 mennesker. Okay. Spørgsmål om noget af dette? Ja. Hvad hvis du gav et negativt tal? Lad os se hvad der sker. Så i dette særlige case-- nummer af mennesker i lokalet, negativ. Den afviste det, fordi heroppe vi tilfældigvis at håndtering, at hvis n er mindre end en vi vil spørge igen. Hvis du forsøger at erklære en vifte af negativ størrelse, det generelt ikke virker. Så lad os prøve. Lad os se bort uanset værdi, de input til n og bare sige int aldre negativ. Lad os se, om det selv kompilerer. Jeg er ikke sikker. Nej. Så aldre er erklæret som en array med en negativ størrelse. Så upfront det genkender et array kan ikke være af negativ størrelse og forkaster det. Nu, hvis vi ikke håndterer Dette gør-mens loop korrekt, hvis vi ikke var kontrol hvis n er mindre end 1-- Lad os sige, at vi bare afse dette overhovedet og i stedet vi bare snuppe et heltal. Ligegyldigt hvad det heltal er, vi erklærer en vifte af denne størrelse. Så compileren ikke kan eventuelt klager nu. Hvis jeg kompilere denne-- så det kan ikke klage, fordi det kan ikke vide, at jeg er kommer til at indtaste et negativt tal, som kan være ugyldige. For alle den kender, jeg kunne Indtast et positivt tal, hvilket er helt gyldig. Så jeg forestiller mig, hvis jeg indtaster negativ 1 mennesker i lokalet, segmentering fejl. Så ok. Så lad os tilføje dette tilbage bare holde det, hvad det oprindeligt var. Så gør aldre. Nu, hvis jeg ønsker at prøve en negativ age-- så lad os sige, at der er fem personer i værelset. Age of persons nummer et er negativ 4, person, tre er nul, person, three-- OK. Så her, et år fra nu, personnummeret vil være negativ 3 år. Så sandsynligvis ikke giver mening. Men det er bare fordi at kigge på den kode alle vi laver anmoder GetInt. Nu, hvis vi havde haft den GetPositiveInt funktion eller vi havde simpelthen gjort dette slags samme, mens løkken dernede, så ville det virke helt fint. Men i dette særlige tilfælde, gør vi bare ikke tilfældigvis håndtere negative værdier. Andre spørgsmål om arrays? OK. Så vi har nu set arrays. Og vi kommer til at bruge dette for kommandolinje-argumenter. Så i problemer sæt to-- Jeg kender mange af jer kan stadig arbejder på problemet sæt en, men problemet sæt to kommer op. I sæt problem to, er du nødt til skal gøre med strygere, arrays, og kommandolinje-argumenter. Så hvad er kommandolinjeargumenter? Nu kan du se hernede et lille teaser til præcis, hvad der er kommer til at ske. Vi ser int main, inc argc, string argv parentes. Så først lad os prøve at tolke hvad, der forsøger at sige. Nu, OK. Så på kommandolinjen skal du være at vænne sig til nogle af disse kommandoer nu, og du har sikkert kørt cd i terminalen før. Så hvis vi siger cd pset1, du ved, at der skulle være at ændre i pset1 mappe. Nu mærke til, at du aldrig har skrevet et program som dette før. Hvert program, som du har skrevet, du ville køre, siger, dot skråstreg Mario, dot skråstreg grådige, og så er det måske bede dig om input. Nu, det er ikke hvad skift mappe gør. Når du kører cd, betyder det ikke så sige, hvilken mappe vil du cd ind? I stedet kan du bare sige, cd pset1, og det bare går ind i pset1 mappe. Så på samme måde vi har andre eksempler. gøre hej. Når du kører gøre, betyder det ikke så sige, hvilket program vil du gerne gøre? Du skal bare sige, på det kommandolinjen gøre hej. Move er et andet eksempel. Denne ene vi flytter mario.c fil op en mappe. Så nu ved vi med dette eksempel Vi er virkelig passerer to argumenter. Der er mario.c som det første argument, og dot prik er det andet argument. Og så når du kører gøre, du se, at virkelig lang kommando line-- der virkelig lang kommando trykt på kommandolinjen. Så længe command-- dette er blot en kort del af det, men nu har vi tre kommandolinjeargumenter. Dot Dash nul, hej, og hello.c. Så dette er kommando-linje argumenter, argumenter at du passerer på kommandolinjen, så det behøver ikke at blive bedt når du kører programmet. Det ville være frustrerende, hvis når du kørte clang det sagde, "OK, som program-- som fil du kompilere? Hello.c. Hvilke flag ville du gerne indtaste? Dash o. Hvad kunne du tænke dig filen skal hedde? hej. Nej, du bare køre klang dash o hej hello.c. Så ser tilbage på dette. Nu argc-- argc er argument tæller. Det er antallet af kommandolinjen argumenter indtastes på kommandolinjen. Nå, argv-- teknisk v står for vektor, som dybest set betyder array. Men du kan ignorere det. Argv-- vi har snor argv, så streng argv parentes. Så dette er en anden form for beslag du ikke har set før. Så vi har set beslag notation, når vi har sagt, lignende, string s lig Zamyla. s beslag 0 adgang tegnet Z. Vi har også set konsoller når vi sagde int aldre beslag 5. Det erklærede en vifte af størrelse 5. Så her er en version af beslag vi ikke har set før. Så denne slags snor argv som ville være helt fortrolig at det bare ville være en streng. Nu parenteser angiver at dette er et array. Så snor argv beslag midler at argv er en vifte af strenge. Nu teknisk en streng er en vifte af tegn. Så det er nu et array af en vifte af tegn. Men det er meget lettere at tænke over dette som blot et array af strenge. Så hvorfor kan beslagene være tom? Ligesom, hvorfor kan ikke sige, vi, beslag 5, beslag n? Ja. Ja. Vi ved ikke, hvor mange indgange der vil være. Så hvis vi ser på den klang eksempel Vi siger clang streg o hej hello.c. I dette særlige tilfælde, der sker at være tre kommandolinje-argumenter. Og så brackets-- vi vil se i en anden det ikke ville være tre. Det teknisk ville være fire. Men beslagene, vi ville sige, at der er tre. Men nu, hvis vi kiggede på farten mario.c dot dot, beslagene vi ønsker at sætte to i dem. Og der er en masse kommandoer, har et variabelt antal kommandolinjen argumenter. Hvad denne version af beslag notation angiver er, at argv er en vifte af strenge. Men vi ved ikke, hvor mange strenge er i den opstilling. Og hvordan kan vi så vide, hvordan mange strenge er i array? Det er hele pointen argc. argc fortæller os, hvor længe argv er. Så den sidste ting at huske på sind er, at teknisk, tæller kommandoen sig som en af de kommandolinjeargumenter. Så cd pset1, der er to kommandolinjeargumenter. Programmet i sig selv, cd, og derefter den faktiske argument del af det, pset1. Ethvert program, som du har skrevet indtil nu har haft en kommando-linje argument-- prik skråstreg Mario. Det er den eneste kommandolinjen argument. Så nu ser på klang dash o hej hello.c. Så hvad er argc? 4. Så argc er 4. Klang, så argv beslag 0 er klang. argv beslag 1 er bindestreg 0. argv beslag 2 er hej, og argv beslag 3 er hello.c. Ok, så spørgsmål om dette, og så vil vi se på nogle programmatiske eksempler. OK. Så vi vil tage et kig på hello3.c. Så dette bør være bekendt fra et af de første eksempler c vi havde, hvor vi bare ville sige, hej verden, men nu er det mere generelt. Så her vi siger goddag % s backslash n argv beslag 1. Notice-- så indtil dette punkt, det er hvad min skabelonfil har lignede. Jeg havde int main (void), og så ville jeg gøre noget i den vigtigste funktion. Nu i stedet, når vi begynder at behandle med kommandolinjeargumenter, vi nødt til at angive et anden form for vigtigste. Så se på hello3 igen, det vigtigste er at gå at tage to argumenter nu-- int argc, antallet af kommandolinjeargumenter, og snor argv parentes, er det faktiske strygere indtastes på kommandolinjen. Så jeg har tænkt mig at ændre det skabelon til at afspejle dette. Nu når du skriver et program, hvis du ikke gør nødt til at tage nogen kommando-line argumenter, så bare bruge int main (void). Men nu når du skriver kommando-line argument programmer, som du kommer til at gøre for problemet sæt to-- så nu, at du kører programmer, der skal tage kommandolinjeargumenter, du skal have vigtigste af denne formular. Så her-- dette er den store forbrug af kommando-linje argument. Så udskrivning argv 1. OK, så lad os kompilere og køre dette program. Gøre hello3. Kompilerer. Dot skråstreg hello3. Og lad os sige, "Rob". Hej Rob. Hvis jeg siger, "goddag Maria," hello Maria. Hej Maria. Hannah stadig siger, "goddag Maria ", fordi jeg ikke er gør noget med vores argv 2. Argv 2 nu ville være "Hannah". Argc ville være 3. Hvad hvis jeg gjorde det? Så hej null. Han kort berørt det faktum at teknisk, getString kunne vende tilbage null, men vi får en meget mere i, hvad null rent faktisk er. Men tag det som et spørgsmål om at der ikke er generelt dårlige. Vi gjorde noget galt, hvis det er udskrivning "Hej null". Og årsagen til at vi gjorde noget galt is-- godt, da jeg kørte dot skråstreg hello3, argc var 1. Så det betyder længden af ​​argv var 1. Hvis et array har længden 1, den eneste gyldige indeks er nul. Og så her argv 1 er uden for intervallet i denne matrix. Det var magen til før, da jeg forsøgte at lagre 6 uden for enden af ​​grupperingen. Så jeg forsøger at få adgang noget uden for argv tæller, og vi får nul. Så en bedre version af dette en forbedring, udtrykkeligt tjekker argc. Så hvis argc lig med 2, der betyder, at vi kørte noget lignende dot skråstreg hello3 Rob. Og det vil udskrive "Hello Rob." Hvis argc er ikke lig 2, så det bare at gå at ignorere, hvad du lægger ved kommandolinjen argument som kommandolinje-argumenter. Eller hvis du ikke har bragt nogen overhovedet, er det bare at ignorere det og bare sige, "Hej dig." Så kompilering dette. Gøre hello4. Og kører hello4. Løb det på denne måde, hvad der skal udskrives? "Hej dig." Hej dig. Hvad med hello4 Rob? "Hej Rob." Og endelig, hej Rob Maria er bare "hej Du" igen, fordi du ikke rigtig komme ind noget, som det forventede. Du har indtastet flere navne end det kunne håndtere, så det bare misligholdt til det hej du adfærd. Så spørgsmål om dette? Eller kommandolinjeargumenter? OK, så tage et kig på en par flere eksempler på brug af kommando-linje arguments-- først vi har argv streg 1 prik c. Så kommentarerne give væk, hvad dette program bør gøre. Men bemærke nu-- dette for løkke, dette svarer til nøjagtige mønster Jeg sagde før. Vi har lige tilfældigvis hjælp argc stedet for n. Nu argc er virkelig n. Det er længden af ​​argv array. Så er iteration over argv vifte printf-ing hver argv værdi. Så hvis jeg gør dette. Gøre argv 1. Det kompilerer. Dot skråstreg argv 1. Bare kører dette, udskrifter dot skråstreg argv 1 da det var den eneste kommandolinjen argument-- navnet programmet. Der vil altid være least-- argc kan ikke være mindre end én, da der vil altid mindst være programnavnet at køre. Så argv 1 Rob udskriver argv 1 og derefter på den nye linje "Rob". Så i den første iteration af denne sløjfe, i er 0. Argv 0 er navnet programmet. Dot skråstreg argv 1. Og så argv 1 er min første kommando-linje argument, som er Rob. På dette tidspunkt, er vi lig argc. Vi bryde ud af løkken, og vi er færdig. Så dette vil arbejde for en vilkårlig Antallet af kommandolinje-argumenter. Læg mærke til den udskriver argv 0, argv 1, argv 2, argv 3, argv 4. Og der er ingen argv 5. argc er lig med 5. Så på argc-- på jeg er lig 5, vi bryde ud af løkken. OK. Så spørgsmål om, at før vi se på en mere komplekst eksempel? Så argv 2. Okay. Så vi er stadig udskriver de kommandolinjeargumenter. Men nu opdager vi har en indlejret for løkke. Så hvad er det gør? Så det første loop gør præcis, hvad det gjorde før. Vi er stadig looping løbet hver kommando-linje argument, men nu er denne anden loop-- vi har også set noget lignende før. Da han blev iteration løbet Zamyla udskrive Z-A-M-Y-L-A. Så denne anden sløjfe for int j lig 0, n er strlen af ​​argv beslag i. Så lad os først tænke til-- lad os gå igennem. Lad os tænke, hvad computeren ville gøre, hvis jeg kørte dette program som bare dot skråstreg argv Dash 2. Så hvis jeg kørte denne kode, så argc vil være lig med 1. Og snor argv-- der kun vil være en indekset i argv, og det kommer til at være lig med dot skråstreg argv 2-- programmets navn. OK, så nu jeg er lig 0, jeg mindre end 1, jeg plus plus for int j lig 0, n er strlen af ​​argv beslag 0, så i den første iteration af denne løkke. argv beslag 0 er dot skråstreg argv 2. Så hvad er længden af ​​denne streng? Nå, dot skråstreg A-R-G-V Dash 2. Så strlen af ​​dette vil være 8. Så j lig 0, n er lig med 8. Så længe j er mindre end 8, j ++. Og med at vi kommer til at være udskrivning af et enkelt tegn, som er argv beslag jeg beslag j. Så den eneste i er nul. Vi har stadig kun har én kommando-linje argument. I den første iteration af for-løkken, vi er vil være udskrivning argv beslag 0 0 beslag. Og så j kommer til at forøge. Og vi kommer til at udskrive argv beslag 0 konsol 1. Og så argv beslag 0 beslag 2. Så dette er vores første møde flerdimensionale arrays. Husk tidligere, at jeg sagde at argv er teknisk et array af arrays af tegn. Så her hvis jeg sagde noget lignende string s lig argv beslag i, og så sagde jeg, s beslag j, dette ville udføre de samme ting. Nu du har set s beslag j før. Det er bare at få adgang til j-te karakter af denne streng. Så med dette, får vi den j-te karakter i'te argv. Så hvad skal dette i sidste ende output? Gøre argv 2. Det kompilerer. Dot skråstreg argv 2. "Rob Maria Hannah," og give os lidt plads. Så vi kan se, at dette er udsende prik på sin egen linje og skråstreg på sin egen linje og en på sin egen linje. Det er at udskrive hver individuel karakter af hver kommando-linje argument. Og så i mellem dem, på grund af denne nye linje vi udskriver hernede, i mellem dem det vil udskrive en ny linje. Så dette ligner forudgående argv bindestreg 1, der udskrives hver kommando-linje argument, men nu er vi udskriver de kommandolinjeargumenter og derefter gennem hver iteration karakter af hver enkelt kommando-line argument at få denne udgang. OK? Så spørgsmål om dette? Én ting at bemærke, er, at kommando-linje arguments-- så de er adskilt af mellemrum, som du ville naturligvis forvente, at være. Så en streng kan have mellemrum i det. Det er ikke super vigtigt, men hvis jeg ønskede den tredje kommandolinjen argument at have en plads i det, så jeg kunne sige noget som dette. OK? Så det nu stadig kun har tre kommando-linje arguments-- godt 4. Dot skråstreg argv bindestreg 2, Rob, Maria og Hannah Bloomberg. OK. Spørgsmål til dette? Der er ikke noget særligt om rummet karakter. Det sker blot at være at kommando-linje behandler mellemrumstegnet hvordan du adskille hvert argument. Okay. Så Problem sæt to-- du kommer til at være kigge på hemmelig-nøgle kryptografi. Så ligner dette eksempel vi så fra A Christmas Story, du kommer til at være at gennemføre nogle algoritmer, der, givet en besked, du kommer til at være i stand til at kryptere den besked at kun en person med at hemmelige nøgle, med denne dekoder ring, skal kunne dekryptere. Så det er den standard udgave. Du kommer til at være at gennemføre to forskellige versioner. Hvis du tilfældigvis til at tage et kig ved hacker Edition nu, vi vil give du en streng som denne, som repræsenterer et krypteret password. Så dit mål er at finde ud af hvad den dekrypterede password er. Nu er dette er faktisk hvordan adgangskoder lagres i en masse computere, og det bare gemmer dette tilfældig streng af tegn. Du er nødt til at regne ud, hvordan du får fra denne tilfældige streng af tegn til, hvad den oprindelige adgangskode var. Og endelig, efter denne problem sæt, bør du være i stand til at forstå, hvad det betyder. Så du vil lære at dekryptere denne form for tilfældig streng. Tilsvarende, hvis du husker fra uge 0, du måske har set denne webadresse. Og du bør være i stand til dekryptere dette i sidste ende. Du vil måske ikke være glad, når du dekryptere den og klik på linket. Okay. Det er det for i dag. Så se dig i næste uge! [ELEKTRONISK musik spiller]