[MUSIK SPELA] DAVID MALAN: Okej. Detta är CS50, och detta är slutet av vecka 2. Jag är så ledsen att jag inte kunde vara där med er alla i dag, men du är i mycket goda händer. Tillåt mig att presentera CS50: s egen Rob Bowden. ROB BOWDEN: Och naturligtvis, sedan Vi måste göra narr av det faktum att han sände oss ett vertikalt video och visa denna. [VIDEOAVSPELNING] [MUSIK SPELA] [FOTSTEG] -detta Video inte måste titta på detta sätt. Det kunde ha förhindrats. Säg nej till vertikala videoklipp. -Vertikal Videor hända när du Håll din kamera på fel sätt. Din video kommer att sluta se ut som skit. - [GRYMT] -Det Finns fler och fler människor beroende att göra vertikala videoklipp varje dag. Det är inte spricka eller ingenting, men det är fortfarande riktigt illa. Det finns två olika typer av människor som lider av VVS. Den första gruppen behandlar videor de skjuter som bilder. De menar inte någon skada. De bara inte förstå att medan du kan vända en bild, du kan inte riktigt vända en video. [CRASH] - [APA SOUNDS] -Den Andra gruppen är människor som inte ger en [BLEEP]. -Vertikal Video syndrom är farligt. Rörliga bilder har alltid varit horisontella. Tv: n är horisontellt. Datorskärmar är horisontella. Människors ögon är horisontella. Vi är inte byggda för att titta på vertikala videoklipp. -Jag Älskar vertikala videor. -Nobody Bryr sig om dig. -Om Detta problem s lämnas därhän, du också kommer att börja som visar fyra filmer på en gång bara för att spara bandbredd. -Letterboxed Vertikala videoklipp skulle vara storleken på ett frimärke. -och Det kommer att sprida överallt. Biodukar har alltid varit horisontella. Om vertikala videor blir accepterade, biografer måste vara lång och smal. -Och Alla biografer skulle måste få rivas och byggas om. Och när de byggdes, Mila Kunis skulle vara gammal och ful. -Birds Kommer att krascha in i dem och dö. -Vi Alla får hård halsar från tittar upp. -Och Ingen kommer att sitta i den främre raden någonsin igen. -George Lucas kommer återutgivning Star Krig igen-- mager upplagan. -Jag Var aldrig riktigt kunna berätta berättelsen som jag ville berätta. Detta var en stor chans för mig att experimentera med en ny teknik. -Du Ett ryck. -varje Gång en mobil anordning används för att spela in video, är frestelsen där. Säg bara nej. Säg nej till George Lucas. Säg nej till gamla Mila Kunis. Säg nej till vertikala videoklipp. -Och Om du ser någon som gör det, säger, "du är inte skytte denna rätt dummy!" [MUSIK SPELA] [END SPELA] [Applåder] [AUDIO OUT] ROB BOWDEN: --simple form av kryptografi, vilket egentligen är krypteringen och dekryptering av hemliga meddelanden. Så här har vi en mycket enkel leksak. Och tanken är den yttre ringen roterar runt den inre ringen. Och du kan se, kanske om jag zooma i, that-- det är svårt att se. Men, liksom antalet 1-- väl flyttade det. Siffran 1 kartor till bokstaven X, nummer 2 kartor till punkt och pricka J. Otroligt svårt inte för att hoppa framåt. Brev 2 kartor till J. Nummer 3 kartor till D. Så med denna ring du kan ge någon ett meddelande 1, 2, 3. Av någon anledning vill berätta för dem XJD. Men du kan ge dem några budskap av siffror, och så länge som de har denna ring, de kan dekryptera vad du försöker säga. Så du kanske har sett denna särskilt exempel på kryptografi tidigare om runt julen du har sett A Christmas Story. Om du aldrig har sett det förut, så är det bara aktivera TBS på bokstavligen helst på julafton, eftersom de bara visa det rygg mot rygg tillbaka till rygg mot rygg hela dagen. Och relevanta videon är detta. [VIDEOAVSPELNING] -vara Det känt för alla och envar att Ralph Parker är härmed utsett en ledamot av den lilla Föräldralösa Annie Secret Circle och är berättigad till alla de utmärkelser och fördelar uppträder därtill. Signerad Little Orphan Annie. Kontra Pierre Andre med bläck! Heder och fördelar redan vid nio års ålder! [Yelling från RADIO] -Kom igen. Låt oss gå vidare med det. Jag behöver inte all that jazz om smugglare och pirater. -listen I morgon kväll med den avslutande äventyr i svart piratskepp. Nu är det dags för Annies hemligt meddelande för dig medlemmar av Secret Circle. Minns ungar, endast medlemmar Annie hemliga Circle kan avkoda Annies hemligt meddelande. Kom ihåg att Annie beroende av dig. Ställ dina stift till B2. Här är budskapet. 12. 11. 2. -Jag Är i mitt första hemliga mötet. -25. 14. 11. 18. 16. -Oh, Är Pierre i stark röst i kväll. Jag kan tala om att kvällens budskap var verkligen viktigt. -3. 25. Det är ett meddelande från Annie själv. Kom ihåg att inte berätta för någon. -Fem Sekunder senare, jag är i den enda rum i huset där en pojke på nio kunde sitta i avskildhet och avkoda. Aha! B! Jag gick till nästa. E. Det första ordet är "vara." S. Det kom lättare nu. U. 25. Det är R. -Kom Igen, Ralphie! Jag har gotta go! -Jag Är rätt ner, Ma! Gee vina. T. O. "Var noga med att" - se till vad? Vad var Little Orphan Annie försöker säga? Var noga med vad? -Randy Har fått gå! Kan du komma ut? -Alla Rätt, mamma! Jag kommer att vara rätt ut! Jag var att komma närmare nu. Spänningen var hemskt. Vad var det? Ödet av planeten kan hänga i balans! -Ralphie, Randy har fått gå! -Jag Är rätt ut, för crying out loud! Nästan där! Mina fingrar flög. Mitt sinne var en stål fälla. Varje por vibrerade. Det var nästan klar! Ja. Ja. Ja. Ja. Var noga med att dricka din Ovaltine. Ovaltine? En crummy kommersiell? Son of a bitch. [END SPELA] ROB BOWDEN: Så det är hur Ovaltine avser kryptografi. I grund och botten CS50 bara annonserade Ovaltine, så vi kunde vara en crummy reklamfilm för Ovaltine. Okej. Så nu faktiska datavetenskap. Kom ihåg på måndag vi slutade dykning djupare i strängar. Så vi hade att göra med strängen "Zamyla." Och vi erkänner det faktum att vi kan behandla "Zamyla" som en följd av tecken. Och kom ihåg att vi lärt oss fästet notation. Så om detta lagrades i en sträng "s" och sedan om vi sa s konsol 0, skulle det ange bokstaven kapital Z. Och om vi sa s konsol 1, som skulle indikera den första gement a, och så vidare upp till s konsol 5, vilket skulle indikera sista a. Nu kom ihåg att Längden på denna sträng är 6, men indexen in i strängen är 0 till 5, Z genom att hålla en. Så detta passar nu till en större bild av datorns minne, RAM-minnet. Så någonstans det program som du kör din dator behöver komma ihåg Zamyla någonstans i minnet. Så kan jag ha en volontär? Ja tack. Och vad är ditt namn? DEAN: Dean. ROB BOWDEN: Dean? Trevligt att träffa dig, Dean. Så kom hit, och vi kommer att ha du ritar på vår fina tjusig layout minne. Nu har jag gillar att tänka på minnet som en lång remsa av byte, men bara till för att vi ska bara inte från vänster till höger, uppifrån och ned. OK? Så jag kommer att visa en program-- Getstrings.c. Och så allt det här programmet är gör begär fyra strängar från användaren med GetString och sedan skriva ut vad det första strängen angav var. Vi ignorerar två till fyra. OK. Så hit now-- när I första begäran s1. Så du är datorn. Och du genomför getString. Så du begär en sträng från mig, och jag säger, OK, Dean. Ge strängen "Dean". Så någonstans i minnet du måste komma ihåg "Dean". Så skriv det i minnet någonstans. Perfekt. OK. Så nu har vi s2. Och s2 kommer att bli en begäran till getString. Så jag kommer att komma in en sträng. Jag kommer att gå in "Hannah." Så ange "Hannah" någonstans i minnet. Yeah. A-H. OK, så nu s3. Och det kommer att vara en annan begära att få getString. Och så nu ange "Maria." Okej. Och så finns det en sista begäran till getString, s4. Så, jag vet inte. Vad sägs om vi går med antidisestablishmentarianism. Så ange den i minnet. Yeah. Så bara göra "Rob." OK. Så nu explain-- varför gjorde du lämnar dessa utrymmen? Varför har du detta tomt utrymme här, här och här uppe? Ja. Så märker när jag går att skriva ut s1-- så om vi hade "Hannah" kör rätt upp bredvid "Dean" Hur vet vi när strängen "Dean" slutar? Så skriver ut strängen s1 kan ha precis tryckt "DeanHannahMariaRob" om den inte har någon aning om när "Dean" faktiskt slutar. Okej. Så i minnet hur vi faktiskt representerar denna ände av en sträng är med omvänt snedstreck noll. Så detta utrymme är precis vad vi ville ha. Det bör vara en backslash noll. Detta kommer att bli ett omvänt snedstreck noll, och detta kommer att vara ett omvänt snedstreck noll. Och du kan ha en fantastisk pris för att vara en perfekt volontär. Ta en stress boll! OK. Så denna karaktär backslash noll hur vi indikera slutet av en sträng. Det är hur när ett visst program vill skriva ut en sträng, Det är how-- minns vi lärt oss det strlen funktionen förra veckan? Stränglängd? Det är hur stränglängden kan avgöra hur länge en sträng är. Det håller bara iteration över tecken tills den hittar backslash noll tecken. Så viktiga att inse om det omvända snedstrecket noll tecken det är representerade av alla nollor i bitar. Så märker att detta är distinkt från noll karaktär. Så noll tecken, om du kommer ihåg i exemplet som han gav i slutet föreläsning där tecken map att-- som kapital A kartor till 65. Gemener en kartor till 97. Gemener B skulle vara 98. Så siffran 0 kartorna att-- jag inte vet från toppen av mitt huvud. 44 eller 45. Någonstans i denna region. Så tecknet 0 är ett faktiskt antal. Men omvänt snedstreck noll kartor till alla nollbitar. Så det finns en skillnad mellan omvänt snedstreck noll, som vi kallar noll terminator. Det finns en skillnad mellan bakstreck noll och tecknet noll. Okej. Så talar lite mer om strängar. Så då vi ser här är hur skulle läggas ut i minnet. Så denna idé om strängar som en sekvens av characters-- så officiellt dataregister sciency term för sekvensen är en array. Så vi skulle kalla en sträng en array av tecken. Och det finns faktiskt andra data typer som vi kan göra matriser av. Så för att motivera detta, titta på ett exempel. Vi kallar det ages0.c jag ska kopiera och klistra in vår mall. OK. Så i det här programmet som vi vill göra är att ta ålder av tre studenter på kursen. Så vi vet int age-- och nu ska jag säga 0. Så du kanske vill säga age1, men för ändamål vi får se mycket snart, Jag ska säga int age0 lika getInt. Så samma samtal till getInt att vi har använt I inte råkar vara tillfrågas sade "ge mig ålder." Men bara begär det. Och age1 lika getInt. Och int age2 lika getInt. Så, återigen, tre studenter, men i slutändan de variabla indexen är age0 genom age2. OK. Så det här programmet kommer att göra vad Vi vill med age0, age1 och age2, men detta program i slutändan fungerar för tre studenter. OK. Så nu vad om jag vill fyra studenter? Tja, jag kommer att behöva gå tillbaka i min kod, ändra kommentaren, och nu har vi en int ålder 3 lika getInt. OK. Så som ser problemet här? Vad är problemet med denna typ av inställning? Yeah. Yeah. Så vi skapar en variabel för varje student. Nu som fungerar, men i slutändan vad händer om jag nu säger: "Jag vill ta ålder åtta studenter eller 16 studenter eller hur många studenter i de hundratals studenter i CS50 eller tusentals studenter på campus eller de miljarder människor i världen? Så i slutändan är detta inte hållbart. Varje gång du ser dig själv kopierar och klistra in koden så här, bör du i allmänhet känna att det finns ett bättre sätt. Så det är där vi introducerar en array deklaration. Så när du deklarerar en array, Detta är vad det allmänna formatet kommer att se ut. Vi kommer att säga typ. och sedan ska vi ange namnet på den matris, precis som vi definierar en given variabel. Och sedan slutligen vi använder denna konsol notation igen men i ett annat sammanhang från hur vi använder den tidigare. Så här ser detta ut som en normal variabeldeklaration som vi har sett. Så vi har sett int x semikolon innan. Och nu kan vi se något liknande int x konsoler 5. Och sätta denna idé till GetInt program som vi have-- så att vi kan genomföra detta på samma sätt. Låt oss säga i CS vi tenderar att använda n som antalet något. Så här vi kommer att lagra fyra studenter. Och nu kan vi säga int ålder fäste n-- inte riktigt få det yet-- att förklara ett arrangemang av fyra studenter. Så hur det kommer att se ut minne kommer att likna denna. Rensa detta. Och vi kommer att ha någonstans i memory-- Jag lägger här uppe. Så någonstans i minnet. Ett två tre Fyra. Vi har fyra heltal i rad för denna uppsättning av fyra heltal. Så, för närvarande, vad är storleken på en av dessa rutor? Yeah. Det är fyra byte. Det är 32 bitar. Så nu är annorlunda från arrayen som vi såg tidigare, uppsättningen av tecken. I en sträng varje låda var bara ett byte, eftersom ett tecken är bara ett byte. Men med en rad av heltal, varje låda måste vara fyra bytes i ordning för att passa en hel heltal. Så detta är vad en rad fyra Ints skulle se ut. Och sedan tillbaka till koden. Nu vill vi faktiskt lagra heltal i den arrayen. Så nu detta är en mycket, mycket, mycket gemensamma mönster som kommer vid någon tidpunkt blir muskelminne. Så int i lika med 0. i mindre än n. i plus plus. Åldersgrupp i lika getInt. Så detta för loop, detta format, Du bör få mycket van vid. Så det här är i allmänhet hur vi kommer iterera över nästan alla matris. Nu märker denna typ av förklarar varför från början vi behövde för slingor går för int i är lika med ett, jag mindre än eller lika med 10. Orsaken är att från noll gör detta fungerar bra med arrayer. Så arrayer är noll indexeras. Om denna matris är av längd 4, indexen är 0 till 3. Så genom den första variant av denna för loop vi kommer att ställa ålder konsol 0 lika med ett anrop till getInt. Så vad jag råkade att komma in på tangentbordet. I det andra passet, vi är inställning age1 lika med getInt. Tredje passet, age2. Slutlig pass ålder 3. Så om i det första passet av slingan Jag ange numret 4 på tangentbordet, då vi kommer att sätta in en 4 här. Om å andra passet jag skriver 50, kommer vi att sätta en 50 här. På tredje passet kanske jag anger -1, -1, och slutligen om jag anger 0-- och nu ihåg att detta var index tre. Efter att vi loop back, i är kommer att inkrementeras till 4. Jag är inte längre är mindre än n, vilket är fyra. Och vi bryta sig ut ur loopen. Så vad skulle vara fel med det? [OHÖRBAR]? PUBLIK: [OHÖRBAR] Ja. Så arrayen har endast fyra ställen, vilket innebär som index 0 till 3. Så om detta vore fallet, skulle jag ta på värdet 4 vid något tillfälle. åldersgruppen 4 kommer att sätta vad som än händer att vara över här vad jag har att säga, skriv 6. Det kommer att ställa detta till sex. Men vi vet inte vad som finns här. Detta är inte minne att vi hade tillgång till. Så om du kommer ihåg från föregående föreläsning, han skriva ut värden för Zamyla och någon gång han slog denna segmentering fel. Så du kommer förmodligen att få se många segmenteringsfel som du genomföra några av de problemsamlingar. Men detta är ett av de sätt på vilka du kan stöta på en segmente fel, när du börja använda minne på ett sätt som du inte bör vara. Så vi inte har tillgång till denna plats och det är en bugg. Så det här är bättre. Nu finns det fortfarande en liten problem med denna kod. Och det är i princip att vi är fortfarande fast vid fyra studenter. Nu om jag vill använda åtta studenter, OK. Det är inte så stor en affär. Jag kan gå in, ändra kommentera och ändra n. Nu detta kommer att fungera med åtta elever. Om jag sammanställa denna och kör detta, kommer det att visa mig-- Det kommer att begära heltal för åtta studenter och det kommer bara att fungera. Men det är mindre än idealisk att behöva kompilera om programmet varje gång Jag vill ändra antalet studenter som jag vill ange åldrar för. Så den slutliga förbättring detta, eftersom vi får se här-- vi är kommer att begära att antalet personer. Här har vi ett antal människor i rummen eller någon åldrarna personer i rummet. Men vi kommer att begära att antalet av personer i rummet från användaren. Så det här är exakt samma do-while loop som vi har sett tidigare. Det är exakt samma gör-while-slinga som du kan genomföra på problemet set. Så länge de är in i en n mindre än 1, så det har fått vara på minst en person i rummet. Så länge de är in i en n mindre än 1, då ska vi hålla ber igen. Vänligen ange numret av personer i rummet. Nu, när vi har numret människor i room-- så jag kan ange att det är 200 personer i det här rummet. Sedan här nere vi kommer att komma och förklarar en rad storlek 200. Vi förklarar array som är stor nog att rymma 200 åldrar. Coming down, det är för loop att du kommer att få mycket van vid. Så iteration över denna matris, tilldela till varje plats i den arrayen ett heltal, och sedan slutligen här är vi bara få ett exempel på iteration över den arrayen, inte att tilldela värden, men för att komma åt värden. Så hit ser vi att vi säger, ett år från nu, personen% jag kommer att vara% i år, där den första% i är i plus en. Så jag är här indexvariabel. Och den andra% i kommer att vara värdet som lagras i åldrar arrayen plus 1. Så detta plus ett är bara för att vi är saying-- detta plus 1, åldrar I plus 1. Detta plus en är bara för att vi är sade ett år från och med nu den person kommer vara så här gammal. Så varför är detta i plus 1? Varför vi har en plus en där? Yeah. Ja. Så kom ihåg arrayer noll indexeras. Så om vi skriver detta för någon att bara läsa utgången, då kanske de vill se något som människa en, person nummer ett, kommer att vara 20 år gammal. Person nummer två kommer att vara 15 år gammal. De vill helst inte se personen siffran noll är 15 år gammal. Så sammanställa detta och bara se vad det ser like-- skapa utrymme. Gör åldrar sammanställer. Köra åldrar. Vi ser många människor i rummet. Så jag ska säga att det finns tre personer i rummet. Age of persons nummer ett, låt oss säga 15, 20, 25. Och nu ska jag säga ett år från Nu kommer de att vara 16, 21, 26. Låt oss se till att detta fungerar med en n som inte är lika med tre. Så om jag säger antal personer är 5, en, två, tre, två, ett, ett år från och med nu de ska vara två, tre, fyra, tre, två år gammal. Så jag kunde lika lätt har n vara 10.000. Nu ska jag sitta här under ganska en stund in åldrar, men det fungerar. Så nu i minnet någonstans vi har en rad storlek 10000, så i slutändan 40 tusen bytes, eftersom det finns fyra byte för var och en av heltal. Så det finns en rad storlek 10000 där vi kan lagra åldrarna dessa 10.000 personer. Okej. Frågor om något av detta? Yeah. Vad händer om du gav ett negativt tal? Låt oss se vad som händer. Så i denna case-- nummer människor i rummet, negativ. Det avvisade detta, eftersom här uppe vi råkar som hantering det faktum att om n är mindre än en vi kommer att fråga igen. Om du försöker att förklara en matris med negativ storlek, det i allmänhet fungerar inte. Så låt oss försöka. Låt oss bortse från vad värde de ingång för n och bara säga int åldrar negativ. Låt oss se om det även sammanställer. Jag är inte säker. Nej. Så åldrar deklareras som en matris med en negativ storlek. Så upfront den känner igen en array kan inte vara negativ storlek och avvisar det. Nu, om vi inte hanterar Detta gör-medan bygeln, om vi inte kontrollera om n är mindre än 1-- Låt oss säga att vi bara hade inte detta alls och i stället vi bara ta ett heltal. Oavsett vad det heltal är, Vi deklarerar en matris av den storleken. Så kompilatorn kan inte möjligen klagar nu. Om jag sammanställa this-- så det kan inte klaga, eftersom det kan inte veta att jag är kommer att ange ett negativt tal, som kan vara ogiltig. För alla den vet, jag kanske ange ett positivt tal, vilket är helt giltiga. Så jag kan tänka mig om jag anger -1 människor i rummet, segmentering fel. Så okej. Så låt oss lägga detta tillbaka bara hålla det vad det ursprungligen var. Så gör åldrar. Nu om jag vill prova en negativt age-- så låt oss säger att det finns fem personer i rummet. Age of persons nummer ett är negativ 4, person tre är noll, personen three-- OK. Så här ett år från och med nu, personnummer en kommer att vara negativ 3 år gammal. Så förmodligen inte vettigt. Men det är bara för att titta på koden allt vi gör begär getInt. Nu, om vi hade haft GetPositiveInt funktion eller vi hade helt enkelt gjort detta sorts samma stund slinga där nere, då detta skulle fungera alldeles utmärkt. Men i detta särskilda fall, gör vi bara inte råkar vara hantera negativa värden. Alla andra frågor om arrayer? OK. Så vi har nu sett matriser. Och vi kommer att behöva använda detta för kommandoradsargument. Så i problembild two-- Jag vet att många av er kan fortfarande arbeta med problem set en, men problem ställa in två kommer upp. I problem set två, kommer du att måste ha att göra med strängar, arrayer, och kommandoradsargument. Så vad är kommandoradsargumenten? Nu kan du se här nere en liten teaser för exakt vad som är kommer att hända. Vi ser int main, inc argc, string argv parentes. Så låt oss först försöka tolka vad det försöker säga. Nu, OK. Så på kommandoraden bör du vara vänja sig några av dessa kommandon nu, och du har förmodligen köra cd i terminalen innan. Så om vi säger cd pset1, du vet att det bör att förändras i pset1 katalogen. Nu märker att du har aldrig skrivit ett program liknande förut. Varje program som du har skrivit, du skulle köra, säg, dot slash Mario, dot slash giriga, och då är det kan be dig för inmatning. Nu, det är inte vad förändring katalog gör. När du kör cd, inte då säga, vilken katalog vill du cd i? Istället kan du bara säga, cd pset1, och det bara går in i pset1 katalogen. Så på samma sätt vi har andra exempel. gör hej. När du kör gör, inte då säga, vilket program vill du göra? Du säger bara, vid kommandoraden gör hej. Move är ett annat exempel. Denna vi flyttar mario.c fil upp en katalog. Så nu vet vi med det här exemplet vi verkligen passerar två argument. Det finns mario.c som det första argumentet, och dot dot är det andra argumentet. Och sedan när du kör gör du se att riktigt lång kommandot line-- som verkligen länge kommandot skrivs på kommandoraden. Så det länge command-- här är bara en kort del av den, men nu har vi tre kommandoradsargument. Dot streck noll, hej, och hej.c. Så dessa är kommandoraden argument, argument att du passerar på kommandoraden, så att det behöver inte bli tillfrågad när du kör programmet. Det skulle vara frustrerande om när du sprang klang det sade, "OK, som program-- som filen du sammanställa? Hej.c. Vilka flaggor skulle du vilja att komma in? streck o. Vad skulle du vilja filen att kallas? Hallå. Nej, du bara köra clang dash o hej hej.c. Så ser tillbaka på detta. Nu argc-- argc är argument räknas. Det är antalet kommandoraden argument anges på kommandoraden. Tja, argv-- tekniskt v står för vektorn, vilket i princip innebär array. Men du kan ignorera det. Argv-- vi har sträng argv, så sträng argv parentes. Så det här är en annan form av fästen du inte har sett förut. Så vi har sett fäste notation när vi har sagt, liknande, string s lika Zamyla. s konsol 0 åtkomst tecknet Z. Vi har också sett fästen när vi sade int åldrar fästet 5. Det förklarade en rad storlek 5. Så här är en version av den konsoler vi inte har sett förut. Så denna typ av sträng argv som skulle vara helt bekant att det bara skulle vara en sträng. Nu parentes anger att detta är en array. Så sträng argv konsoler medel att argv är en array med strängar. Nu tekniskt en sträng är en array med tecken. Så det här är nu en array av en uppsättning tecken. Men det är mycket lättare att tänka på detta som bara en array med strängar. Så varför skulle konsolerna vara tom? Liksom, varför kan vi inte säga, konsol 5, fäste n? Yeah. Yeah. Vi vet inte hur många ingångar där kommer att bli. Så om vi tittar på den klang exempel vi säger klang streck o hej hej.c. I det här fallet, det råkar att vara tre kommandoradsargument. Och så brackets-- vi får se i en andra det inte skulle vara tre. Det tekniskt sett vore fyra. Men konsolerna, vi skulle säg, det finns tre. Men nu om vi tittat på flytt mario.c dot dot, konsolerna Vi vill sätta två i dem. Och det finns en hel del kommandon som har ett varierande antal kommandoraden argument. Så vad den här versionen av hakparenteser indikerar är att argv är en array av strängar. Men vi vet inte hur många strängar är i den arrayen. Och hur vet vi hur många strängar är i arrayen? Det är hela poängen argc. argc berättar hur länge argv är. Så det sista för att hålla åtanke är att tekniskt, kommandot själv räknas som en av kommandoradsargument. Så cd pset1, det finns två kommandoradsargument. Programmet i sig, cd, och sedan det aktuella argumentet del av det, pset1. Alla program som du har skrivit hittills har haft en kommandoraden argument-- dot snedstreck Mario. Det är den enda kommandoraden argument. Så nu tittar på clang dash o hej hej.c. Så vad är argc? 4. Så argc är 4. Klang, så argv konsol 0 är klang. argv fäste 1 är streck 0. argv fästet 2 är hej, och argv fästet 3 är hej.c. OK, så frågor om detta, och då kommer vi titta på några programmatiska exempel. OK. Så vi tar en titt på hello3.c. Så detta bör vara bekant från ett av de första C Exempel vi hade där vi bara skulle säga, hej värld, men nu är det mer generellt. Så här är vi säger hej % s backslash n argv konsolen 1. Notice-- så fram till denna punkt, är detta vad min mallfilen har sett ut. Jag hade int main (void), och sedan skulle jag göra något i huvudfunktionen. Nu i stället, när vi börja ta itu med kommandoradsargument, Vi måste konstatera en annan form av huvud. Så titta på hello3 igen, det viktigaste är att gå att ta två argument now-- int argc, Antalet kommandoradsargument, och sträng argv parentes, den faktiska strängar in på kommandoraden. Så jag kommer att ändra på det mall för att återspegla detta faktum. Nu när du skriver ett program om du inte behöver ta något kommando-line argument, sedan bara använda int main (void). Men nu när du skriver kommandoradsargument program, som du ska göra för problem ställa two-- så nu när du kör program som behöver ta kommandoradsargument, du måste ha huvud av detta formulär. Så här-- detta är den stora användnings av kommandoraden argument. Så utskrift argv 1. OK så låt oss sammanställa och kör detta program. Gör hello3. Sammanställer. Dot slash hello3. Och låt oss säga, "Rob." Hej Rob. Om jag säger, "Hej Maria," Hej Maria. Hej Maria. Hannah fortfarande säger, "Hej Maria ", eftersom jag inte gör något med vår argv 2. Argv 2 nu skulle vara "Hannah." Argc skulle vara tre. Vad händer om jag gjorde det här? Så hej null. Han berörde kort på det faktum att tekniskt, getString kan returnera null, men vi får en mycket mer i vad null egentligen är. Men ta det som en fråga om faktum att ingen är generellt dåliga. Vi gjorde något fel om det skriver ut "Hej null." Och anledningen till att vi gjorde något fel är-- bra, när jag körde dot slash hello3 var argc 1. Så det betyder längden av argv var 1. Om en array har längden 1, det enda giltiga index är noll. Och så här argv en är utanför intervallet för denna matris. Det liknade förut när jag försökte att lagra sex utanför slutet av arrayen. Så jag försöker komma åt något utsidan av argv räknas, och vi får null. Så en bättre version av detta, en förbättring, uttryckligen kontroll argc. Så om argc är lika med 2, betyder att vi körde något liknande dot slash hello3 Rob. Och det kommer ut "Hej Rob." Om argc inte är lika 2, då är det bara att gå att ignorera vad du lägger på kommandoraden argument som kommandoradsargument. Eller om du inte sätta någon alls, är det bara att ignorera det och bara säga, "Hej du." Så sammanställa detta. Gör hello4. Och kör hello4. Kör det här sättet, vad som ska skrivas ut? "Hej du." Hej du. Vad sägs om hello4 Rob? "Hej Rob." Och slutligen, hello Rob Maria är bara "Hej du" igen, eftersom du inte riktigt komma in något som förväntas. Du angav fler namn än den kunde hantera, så det bara som standard hello du beteende. Så frågor om detta? Eller kommandoradsargument? OK, så ta en titt på en några fler exempel på att använda kommandoraden arguments-- först Vi har argv streck 1 dot c. Så kommentarerna ge bort vad Detta program borde göra. Men märker now-- detta för loop, Detta matchar exakt mönster Jag sade innan. Vi råkar bara vara användning argc istället för n. Nu argc är verkligen n. Det är längden på argv arrayen. Så är iteration över argv array printf-ing varje argv värde. Så om jag gör detta. Gör argv 1. Den sammanställer. Dot slash argv 1. Bara kör det här, det tryck dot snedstreck argv 1 eftersom det var den enda kommandoraden argument-- programnamnet. Det kommer alltid att finnas på least-- argc kan inte vara mindre än ett, eftersom det kommer alltid minst vara programnamnet för att köra. Så argv 1 Rob skriver ut argv 1 och sedan på den nya linjen "Rob." Så i den första iterationen av denna slinga, jag är 0. Argv 0 är programnamnet. Dot slash argv 1. Och sedan argv 1 är min första kommandoraden argument, som är Rob. Vid denna punkt, är vi lika med argc. Vi bryta sig ur slingan och vi är klara. Så det här kommer att arbeta för en godtycklig antal kommandoradsargument. Lägg märke till det skriver argv 0, argv 1, argv 2, argv 3, argv 4. Och det finns ingen argv 5. argc är lika med fem. Så vid argc-- på i är lika med 5, vi bryta sig ut ur loopen. OK. Så frågor om det innan vi titta på ett mer komplext exempel? Så argv 2. Okej. Så vi fortfarande skriver ut de kommandoradsargument. Men nu märker vi har en kapslad för slinga. Så vad är detta gör? Så den första slingan gör exakt vad den gjorde innan. Vi är fortfarande kretsa över varje kommandoradsargument, men nu detta andra loop-- vi har också sett något liknande förut. När han var iteration över Zamyla utskrift av Z-A-M-Y-L-A. Så här andra slingan för int j lika 0, n är lika strlen av argv fäste i. Så låt oss först tänka the-- låt oss gå igenom. Låt oss tänka vad datorn skulle göra om jag körde det här programmet som just dot slash argv streck 2. Så om jag körde denna kod, då argc kommer att vara lika med 1. Och snöre argv-- det bara kommer att bli ett index i argv, och det kommer att vara lika med dot slash argv 2-- programnamnet. OK, så nu har jag lika med 0, i mindre än 1, jag plus plus för int j lika med 0, n är lika strlen av argv bygel 0, så i den första variant av denna slinga. argv konsol 0 är dot slash argv 2. Så vad är längden på strängen? Tja, dot slash A-R-G-V streck 2. Så strlen av detta kommer att vara 8. Så j är lika med 0, n är lika med 8. Så länge som j är mindre än 8, j ++. Och med att vi kommer att vara skriver ut ett enda tecken, som är argv konsol jag fästet j. Så det enda jag är noll. Vi har fortfarande bara en kommandoraden argument. I det första iteration av for-slingan, vi är kommer att bli utskrift argv konsol 0 konsol 0. Och sedan j kommer att öka. Och vi kommer att skriva ut argv konsol 0 konsolen 1. Och sedan argv konsol 0 konsol 2. Så detta är vårt första möte flerdimensionella arrayer. Kom ihåg tidigare att jag sa att argv är tekniskt en matris med rader av tecken. Så här om jag sa något i stil string s lika argv fäste i, och då sa jag, s fäste j, detta skulle åstadkomma samma sak. Nu har du sett s fäste j innan. Det är bara komma åt den j: te karaktären av denna sträng. Så med detta, vi får det j: te karaktär i: te argv. Så vad bör detta i slutändan utgång? Gör argv 2. Den sammanställer. Dot slash argv 2. "Rob Maria Hannah" och ge oss några rum. Så vi ser att detta är utmatning prick på en egen rad och snedstreck på en egen rad och en på en egen rad. Det skrivs ut varje särprägel av varje kommandoraden argument. Och sedan i mellan dem, på grund av denna nya serie vi skriver ut här nere, i mellan dem det kommer ut en ny linje. Så detta liknar den kända argv streck 1, som trycks varje kommandoraden argument men nu är vi utskrift de kommandoradsargument och sedan iterera igenom varje karaktären hos varje kommandoradsargument att få denna utgång. OK? Så frågor om detta? En sak att notera är att kommandoraden arguments-- så att de skiljs åt av mellanslag som du skulle naturligtvis förvänta sig att vara. Så en sträng kan ha utrymmen i det. Det är inte super viktigt, men om jag ville tredje kommandoraden argument att ha ett utrymme i det, då jag kunde säga något sådant. OK? Så detta nu fortfarande bara har tre kommandoraden arguments-- brunn 4. Dot slash argv streck 2, Rob, Maria, och Hannah Bloomberg. OK. Frågor om detta? Det finns inget speciellt om blanksteg. Det råkar bara vara att kommandoraden behandlar blanksteg hur du separera varje argument. Okej. Så då Problem set two-- du kommer att vara tittar på hemlig nyckel kryptering. Så, som liknar den som exempel vi såg från A Christmas Story, du kommer att genomföra vissa algoritmer som, givet ett meddelande, du kommer att kunna att kryptera det meddelande som bara någon med att hemliga nyckel, med den dekoder ring, bör kunna dekryptera. Så det är standardversionen. Du kommer att genomföra två olika versioner. Om du råkar ta en titt vid hackaren Utgåva nu, vi kommer att ge du en sträng som denna, som representerar ett krypterat lösenord. Så ditt mål är att räkna ut vad dekrypterade lösenordet är. Nu är faktiskt hur lösenord lagras i en massa datorer, och det bara lagrar denna slumpmässig teckensträng. Du måste räkna ut hur man får från detta slumpmässiga teckensträng vad det ursprungliga lösenordet var. Och slutligen, efter detta problem, skall du kunna förstå vad detta innebär. Så du kommer att lära dig att dekryptera denna typ av slumpmässiga sträng. På samma sätt, om du kommer ihåg från vecka 0, kanske du har sett denna URL. Och du bör kunna dekryptera detta så småningom. Du kanske inte är nöjd när du dekryptera den och klicka på länken. Okej. Det var allt för i dag. Så ser du nästa vecka! [ELEKTRONISK MUSIK SPELA]