ANDI Peng: Vi er næsten gennem alle psets. Faktisk er vi gennem de fleste af de vanskeligste psets. Så vi er faktisk bare kommer til at slags vind gennem de næste par uger. Vi kommer til at begynde at tale om vores afgangsprojekter, de begivenheder, der kommer op i de næste par uger. Og livet bliver en leg. Så ikke for meget i dag. Forhåbentlig vil faktisk brise gennem dagsordenen for i dag, og derefter være ude af her med lidt tid til overs. Også, jeg vil gerne undskylde for manglen på candy dag. Jeg ved ikke hvorfor. Men i ugen op Halloween, ville jeg glemmer slik. Så jeg er faktisk bare et stort skuffelse for dig lige nu. Fordi jeg bogstaveligt huske slik for hver enkelt klasse, men Halloween. Men i næste uge, vil jeg bringe fordoble mængden af ​​slik at gøre op for det, hele for dig. Det vil være stor. Så jeg har et par meddelelser om nogle planlægning. Jeg har nogle planlægning spørgsmål. Så vi kommer til at gå videre til tale om, hvad der kaldes chmod. Vi kommer til at tale om hurtigt TCP / IP HTTP. Og så vil vi at kode vores egen hjemmeside ved hjælp af HTML og CSS. Og så vil jeg faktisk forlader måske ligesom 20 minutter til at tale om pset6. Fordi pset6 er faktisk en masse ting, som vi allerede har set før, men jeg ønskede at opdatere nogle af disse begreber samt undervise en par nye funktioner. Cool. Så først og fremmest, velkommen tilbage fra pause. Jeg håber, du er pause var sjovt. Vil gjorde du for pause? PUBLIKUM: Gik til New York. ANDI Peng: Du gik til New York? Jeg tror halvdelen vores skole gik til New York. Det er i orden. Jeg tilbragte det meste af min pause stillesiddende i sengen Netflixing. Og det var en god tid. Men vi er nu tilbage, tilbage i session, tilbage i swing ting. Vi har en pset grund denne fredag ​​ved middagstid. Jeg tror, ​​du har allerede afhentet din quiz, ja? Så alle andre, der har ikke havde deres quizzer, kan du komme og få dine quizzer fra mig i slutningen af ​​afsnittet. Eller spore mig ned på campus. Jeg vil gerne have det med mig et eller andet sted. Vores endelige projekt pre-forslag også. Så for dem af os, der aldrig har taget denne klasse før, slutstenen af ​​CS50 er meget kulminerede i denne grand projekt, at de studerende foreslår. Og det foreløbige forslag, blot en generel idé af hvad man måske ønsker at gøre for deres projekt, denne idé skyldes mandag næste mandag ved middagstid. Så temmelig meget, David jeg tror vil tale mere om dette i foredrag hvis han ikke har allerede. Og der er en fast side på vores hjemmeside forklarer alle krav i projektet. Men det væsentlige, pluk ethvert emne, som du har været interesseret i i hele din tid her på CS, hvad enten det er spil eller design eller video eller noget. Og du kan virkelig slags nu anvende nogle af de erfaringer, at vi har lært her i CS50-- hej, welcome-- til temmelig meget ledende et afsluttende projekt efter eget valg. Alle, der er på grund af mandag er kun en kort bagsidetekst via e-mail til mig, en hurtig sætning, ligesom, hey, Andi, Jeg er virkelig interesseret i at designe et spil, der gør dette til iOS. Cool. Lad mig lige dit korte indledende ideer til din endelige projekter. Og vi vil tale gennem hvorvidt det er faktisk en god idé eller ej, hvis det er en realistisk idé eller ej. Men netop det foreløbige forslag skyldes næste mandag. pset6, vores dejlige web-- der er forkert. Pset7? pset6? Det er pset6, ikke? pset6, vores webserver, skyldes Fredag ​​middag med sene dag. Kontortid genoptages normalt mandag til torsdag fra 8:00 til 11:00 i denne uge. Jeg tror Commons for de næste tre nætter. Cool. Før vi havde i materiale, der nogen har spørgsmål, vittigheder, historier? Hvad gjorde du til efteråret pause? PUBLIKUM: Hvad gør jeg? ANDI Peng: Allerede det er længe siden faktisk. Christabel gik til New York. Jeg opholdt sig her og Netflixed. PUBLIKUM: Oh, yeah, jeg var her. ANDI Peng: Åh, OK. PUBLIKUM: Jeg kan ikke huske hvad specifikt. ANDI Peng: Det er OK. PUBLIKUM: Netflixing sandsynligvis. ANDI Peng: Netflixing. Ja, det er et godt tidspunkt. OK. Okay. Eventuelle spørgsmål før Vi hopper ind materiale? Også, vi vil forsøge at hastighed gennem sektion i dag, ikke for meget at dække. Og forhåbentlig vil vi få herude lidt tidligt. Sorry for ikke slik, også. Jeg er en skuffelse især under Halloween. Okay. Cool. Så vi kommer til at begynde at tale om en kommandolinje argument kaldet chmod. chmod, alt det er er bare en Unix-system kalder udført fra kommandolinjen at ændre filrettigheder. Så for eksempel, vi har alle stødt på en side ligesom dette sandsynligvis engang i vores levetid være en internet bruger, hvor vores web-server har givet os fejl Forbidden. Du har ikke tilladelse til at få adgang, yadda, yadda, yadda, på denne server. Alle, der virkelig betyder er, at tilladelser der var vedlagt uanset side du forsøgte at få adgang var ikke åben for dig. Så temmelig meget, chmod er den måde, hvorpå Vi kan ændre disse systemet tilladelser at give alle, brugeren, gruppen, eller verden, eller Kombinationen af ​​disse adgangsrettigheder til bestemte filer, mapper, noget virkelig, nogen form for systemet et operativsystem. Så hvis nogen af ​​fyre har computere, hvis du føler ligesom følgende sammen med mig i dag, helt velkommen til bare skrive ting i. Hvis ikke, kan du bare hænge ud. Så jeg har tænkt mig at rent faktisk at trække min terminal lige nu. Så kommandoen til at køre chmod, eller i det mindste lige til listen tilladelserne for dit fil mappe, er bare ls-l. Som du kan se, en flok ting popper op hvoraf de fleste er vigtigt for os på den venstre side her. Du fyre se en masse rs, ws, 1 /. Ja. De er i det væsentlige blot alle filens tilladelser at forklare, hvad visse mapper og filer i dit system har. Så lad os gå tilbage til power point her. Så ud over filnavnene som du fyre kan se til højre, vi glæder til at se væsentligt bare kolonnen til venstre. Så udover blot filnavnene, vi kan se tilladelserne til filer, deres ejer-gruppen, gruppens navn, dato at filen sidst blev modificeret, et cetera. Du kan se en masse ting der bruger chmod. Så den måde, som vi læser chmod er, at det første bogstav vi temmelig ignorere i form af tilladelser læsning. Det første bogstav bare fortæller os, hvad type system, vi får adgang. d, i dette tilfælde, er en mappe eller bibliotek. Så vi ved, at i øjeblikket mit arbejdsområde afsnit syv var en mappe. Og så skal du se tre treklange, hovedsagelig bare tre sæt af tre tegn. Og du kan tænke på hver som lidt. Så du bare have tre sæt tre bits, ni bit i alt. Du behandler dem i grupper på tre. Så den første gruppe af tre er altid dine brugertilladelser. Din anden gruppe af tre er altid din gruppe tilladelser. Og din tredje sæt af tre er altid som verden, de overalt tilladelser. Så jeg gætter den nemme spørgsmål er, hvad der er forskellen mellem bruger og gruppe. Den væsentligste forskel mellem bruger og gruppe er, at en bruger er du bare personligt adgang uanset hvad det er lige nu. En gruppe kan være, hvis du har flere brugere på en computer, for eksempel. Alle af dem kan behandles som en gruppe. Og så er verden lige verden, alle. Så vi kan se senere om, hvordan vi kan ændre dem i forskellige tilladelser. Så temmelig meget, vi er vil fortsat fokusere på den del til venstre, hvor til biblioteket CS50 vi ser drwx, hvor R betyder bare, det er læsbar. Den w betyder bare, det er skrivbar. Og derefter x bare betyder det er eksekverbar. Man skulle tro den slags af ikke giver mening. Det bør være e. Men x faktisk slags fungerer lidt bedre, fordi du kan huske det bedre. Så de tre typer af ting, du kan gøre, kan du enten læse en fil, du kan have tilladelse til at skrive en fil, eller du kunne have tilladelse at udføre en fil. Og så den måde, at vi faktisk repræsenterer dem i bit er tallene 4, 2 og 1. Så noget, der er læsbar er repræsenteret ved antallet af 4. Alt, hvad der er skrivbar er repræsenteret ved 2. Og noget, der er eksekverbare som repræsenteret ved 1. Så i denne forstand, kan vi også udgør disse numbers-- hej, velkommen, på en anden måde. Undskyld. Før alle, vil jeg undskylder på vegne af alle ind i klassen nu. Jeg glemte slik i dag. Jeg er ked af jeg er en fiasko denne uge af Halloween. Jeg vil bringe det dobbelte af mængden af slik næste gang for at gøre op for det. Men anyways, sorry om at fyre, undskyld. Så den måde, at vi rent faktisk kan input på vores kommando det argument er, at vi kan gøre chmod gruppe skråstreg tilladelser, hvor gruppen er netop hvad gruppe vi prøver at ændre. Og tilladelserne er hvad vi ønsker at tilføje til det. Så for eksempel plus tilføjer tilladelser, og subtrahere tager væk tilladelser. Og de typer af gruppe vi har vores en for alle, u for brugere, g for grupper, eller o for andre. Det er lidt abstrakt lige nu. Men vi vil gå over et par eksempler bare for at demonstrere dette virkelig hurtig. Alle godt på denne dias, så jeg kan komme videre? Cool. Så for eksempel, rwx. Før vi taler om, hvad det repræsenterer, først og fremmest hvad betyder rwx betyde? Hvis du kan se, at denne bestemte filen har tilladelser rwx, hvad betyder det person kunne være i stand til at gøre? PUBLIKUM: læse, skrive og udføre. ANDI Peng: Ja, præcis. Du kan læse skrive og udføre. Da alle tre af dem tegn er til stede. Så hvis vi går videre og snak om dette i form af bits, den rwx kan også repræsenteres som 700. Fordi som du kan se i enhver slags fil mappe tilladelse, Der er tre triader. I dette tilfælde er det kun den første triade har noget der. Så i dette tilfælde, at r er 4, w er 2, og x er 1. Hvis du tilføje dem sammen, er det 7. Og så hvis du konvertere det til binær, det er 700. Fordi 7 er den første triade. 0, er der intet til stede i den anden triade. Og så er der ikke noget til stede i den tredje triade, så det er en anden 0. Så i samme forstand, en flok af treklange kan repræsenteres lige bits, lige i binær så godt. Så 700 betyder præcis det samme som rwx ------ i form af tilladelser. Alle klar på det? Cool. Og så chmod 111 ville give hvilke tilladelser til filen? Giv jer et par sekunder for at konvertere dette. Husk, den første triade er op til brugeren. Den anden triade er for gruppen. Og den tredje treklang er for alle. Og så chmod 111 ville give som type tilladelser og til hvem? Tag et par sekunder for at tænke over det og vende tilbage. Ja. PUBLIKUM: Så alle kan udføre den. ANDI Peng: Yup, præcis. PUBLIKUM: Men ingen kan læse eller skrive. ANDI Peng: Og velkommen at forklare alle hvordan du kom til denne konklusion. PUBLIKUM: Tja, for brugeren, gruppe, og verden, det hele er 1, som er koden for eksekverbare. ANDI Peng: Ja, præcis. Så 1, i dette tilfælde, alt vi ved er at det er den eksekverbar kode. Fordi læsning er 4. Skrivning er 2. Og den eksekverbare er 1. Så er alle tre treklange er 1, at betyder, at til verden, til brugeren, og til gruppen, de er alle eksekverbare. Alle godt med det? OK. Og så den anden måde at vi kan faktisk skriver dette også er dig kunne bare gøre chmod et plus på x. et betyder alle eller alle. Plus betyder at give tilladelser til. Og så x betyder eksekverbare. Så der er to kommandoer faktisk er identiske. Så hvis du vil køre dette i din terminal, du chmod 111, navn på din mappe eller din fil. Eller du kan gøre chmod et plus x, navnet på din mappe fil. Samme ting, bare en nemmere måde, måske, for nogle at repræsentere eller ændre filrettigheder. Hver eneste OK med chmod før vi går videre? Cool. Så nu vil vi hovedet ind i en få lysbilleder af meget abstrakte begreber at jeg er temmelig meget kommer til at brise gennem. Og det er helt OK, hvis du forstår ikke alt. Selv nu, jeg stadig ikke rigtig forstår alt helt. Men det er mere for at få det øverste niveau forståelse af, hvordan nogle af disse ting fungerer. Så vi kommer til at tale hurtigt om TCP / IP, som er lige Transmission Control Protokol skråstreg Internet Protocol. Recall fra foredrag David, han lære dig eksemplet, hvor han ville passere noterne i en kuvert op til gerne toppen af ​​foredragssalen? Så i jura auditorium David demonstrerede væsentlige hvordan TCP / IP fungerer i den forstand, at alle det er er et middel til at sikre, at data er blevet leveret på tværs af en server eller på internettet. Så i eksemplet med kuverten og budskabet, at brugeren i slutningen kunne se, at, åh, jeg havde brug for at modtage fire pakker af information. Men jeg faktisk kun modtaget tre. Det betyder, at jeg skal mangle en. Og en blev ikke leveret. Og så TCP / IP på internettet, via din computer og serveren, gør præcis de samme ting. Alt det gør, er at angive et ramme, hvori en tabt data pakker kan harmes og modtages. Ligesom på internettet, når du forsøger at få adgang til filer online eller sende filer til din ven eller se på internettet browsere, tusinder og atter tusinder af milliarder og milliarder bytes information overføres per millisekund. Og det er virkelig, virkelig forvirrende. Og det er virkelig svært at rent faktisk ved, hvad der er blevet sendt og hvad er ikke blevet sendt. Og så TCP / IP bare specificerer en sammenhængende ramme hvor din web browser og din server kan slags kommunikere med hinanden, lige sørge for, at pakkerne er alle her og intet er tabt og alle de data, som du har anmodet om er faktisk viser korrekt. Alle OK på netop det meget korte højt niveau forstå? Cool. Så vi kommer til at bevæge sig til at tale om HTTP, som er lige Hypertext Transfer Protocol. HTTP, alt det er, er hvad som helst side eller fil tilgås på din hjemmeside, serveren returnerer en HTTP statuskode som svar anmodningen at sikre, at enten, åh, denne anmodning gik igennem. Og alt er at vise korrekt. Eller, åh, nej, 404. Noget gik galt. Åh, jeg kan ikke vise. Alt det er, at uanset du forsøger at få adgang til, bruge som brugeren forsøger at få adgang til, på internet-- bare at sørge at du enten har med succes tilgås uanset hvad det var eller ej held tilgås uanset hvad det var. Og så HTTP status kode bare giver dig et middel til at kunne vide, om eller det var ikke en succes eller ej. Så for eksempel et eksempel anmodning. Du kan se her er det normalt typisk fire linjer. Vi har en GET HTTP 1.1, som er lige metoden anmodning URL, protokollen udgave, navnefeltet, og feltet værdi. Så ingen grund til helt at huske noget her. Lige slags bekendt dig selv med, hvordan disse ser. I dette eksempel anmodningsmetoden URL er bare hvad anmodning du sender til serveren. Ligesom, hey, server, jeg virkelig ønsker at adgang yadda, yadda, yadda, HTTP side. Protokollen version er netop, hvad versionen din vært eller din server bruger til at få adgang til oplysninger. Feltet navn er hjemmesiden eller Webadresse, som du forsøger at få adgang til, i dette tilfælde www.apple.com. Og feltet værdi bare typisk navn, værdi. Og det kan være enhver slags kombination af bogstaver eller tal eller hvad. Så en typisk anmodning, så hvad din computer rent faktisk sender til serveren, der siger, hey, du ved hvad jeg har brug for denne viste, det er den slags anmodning at de rent faktisk får. Et eksempel reaktion på, hvad server ville sende tilbage til dig ville være stort set den samme, med undtagelse af en statuskode på toppen. Så 200, 2 0 0 er altid statuskoden for OK. Ligesom, OK, denne anmodning gik igennem. Du var i stand til at få adgang alt korrekt. Livet er godt. Livet er fint. Alt er helt godt. Og så dette bare fortæller din browser og din server, hey, alt er godt. Jeg fik alle de oplysninger, jeg har brug for. Cool. Men problemet er nogle gange problemer kommer op når du have-- vare jeg tror Jeg talte om dubletter. Du har mindre gode svar. Så for eksempel 404 er den Siden blev ikke fundet. Du har undertiden en Forbidden adgang. Du har forskellige andre statuskoder, som jeg er sikker på at du har alle set, når du er forsøger at gøre forskning på internettet. Og din browser giver dig den, nej, kan ikke få adgang. Og du er ligesom, godt, crap. Så bare temmelig meget, er der nogle ret almindelige statuskoder. Måske sætte dig med hvilke de er. Den sjoveste en, Jeg tror, ​​jeg nogensinde har hørt of-- hvis du tilfældigvis se dem alle online, en eller anden grund er der faktisk en reel statuskode kaldt 418 Jeg er en tepotte. Jeg googlede hvor oprindelsen af ​​denne var fra. Og tilsyneladende en aprilsnar ' Dag for et par årtier siden, nogen troede det ville være vanvittigt morsomt at oprette en ny statuskode kaldet 418 Jeg er en tepotte. Legitimt, navnet på denne kode kaldes jeg er en tepotte. Jeg glemmer, hvad side, du er nødt til at gå til faktisk at gøre dette display. Men tilsyneladende, kan du faktisk få en status kode jeg er en tepotte eller anden måde ved at gøre noget. Så der er hundreder og hundredvis af statuskoder. Nogle af dem gør mere forstand end andre. Men stort set bare sætte dig selv med de mest almindelige. Den ønskede enhed krop er korte og stout, tilsyneladende. Så nogle gange er der mere skræmmende fejl end jeg er en tepotte. Men det er en, som jeg gætte du slags håber at ramme. Men jeg tror ikke, du vil. Alle gode på lige status koder, anmodninger, processer, making sikker oplysninger leveres korrekt? Så nu vil vi overgang ind på en sjov del af sektionen i dag, hvor vi taler lidt om HTML. HTML, alt det er HyperText Markup Language. Det er bare standard sprog du bruger til at oprette alle web sider på internettet. Så enhver webside, hvad er din foretrukne webside? Hvad er dit foretrukne webside? PUBLIKUM: [uhørligt]. ANDI Peng: Beklager? PUBLIKUM: Tumblr. ANDI Peng: Tumblr. Så Tumblr er skrevet i HTML. Og så vi vil faktisk gå igennem og lege med nogle af disse ting senere. Stort set alt, hvad du brug for at lære, for at vide, at skrive HTML kan du sikkert bare Google på internettet. HTML, det er ikke et program som C hvor du kan oprette variabler og gøre seje ting med det. Det er mere bare, åh, det er sådan jeg ønsker tingene skal vises på min hjemmeside. Og jeg bare at sætte det i. Og det kommer til at style det. Så HTML, på en måde, det er ligesom en formatering eller skabelon sprog. Det er meget nemmere. Det er meget nemmere at lære, meget nemmere at skrive i end din typiske programmering sprog, meget let, meget brugervenlig tilgængelig og venlige. Så vi faktisk kommer til at spille rundt, skriver vores egne sider i dag. Men før vi begynder, jeg ønsker blot at gå over nogle korte bedste praksis. Fordi HTML er sådan en nem sprog og fordi selv hvis du gør et par ting galt, det undertiden kan ikke mærke, Vi ønsker at sikre, at vi er faktisk overholde vores bedste praksis at sikre, at ting, der kunne være at gå rundt, men ikke altid vil ikke gå ret sørge for, at de er minimeret. Så temmelig meget, så sørg for din afsluttende alle dine tags når du skriver i HTML. Hvis du åbner en krop, så sørg for at du er lukke den med et organ eller andet sted. Du ønsker at sikre, at din webside validerer ved hjælp hvad der kaldes W3 Validator. Du kan bare Google, online, og der er et link til det. Og så du ønsker at separat HTML, som er din markup sprog fra din stil, som er den CSS sprog, David viste, at vi er også kommer til at spille lidt med foredrag. Cool. Så når du har lyst til at køre HTML på CS50 apparatet, vi kommer til at køre en program kaldet apache, som alle er det bare en indbygget webserver, der alle i CS50 har adgang til. Vi kalder det apache50 bare fordi vi gerne kalde alt 50 i CS50. Så den måde, du starter CS50 web server er ved at skrive på din kommando line apache50 starte prik. Og hvis du ønsker at afslutte den til enhver tid, behøver du apache50 ophører prik. Og du bare trykke Enter. Og det skal være på vej op her snart. Ja. Så jeg bare kommer til at hurtigt at gå over et eksempel på en rigtig kort webside. Og vi kommer til at tilbringe ligesom 10, 15 minutter spiller omkring at skrive vores egne websider. OK. Så her i IDE-- kan alle se det? Ikke rigtig. Her vil jeg zoome ind. Jeg har lige fået denne korte skabelon her med noget faktisk i det. Vi er lige at gå til hurtigt at skrive en HTML program, hvor vi lige sige goddag til verden. Så samme som i C, nu er vi bare kommer til at gøre det i HTML. Er der nogen ønsker at faktisk bare prøve at give mig den første ting du ville have til at sætte i et HTML-dokument? Ja. PUBLIKUM: Konsollerne, den [uhørligt]. ANDI Peng: Yep. Så noget, der er meget unikt for HTML at vi typisk traditionelt ikke støder i andre kommando Line-niveau programmeringssprog er, at vi faktisk at angive den type fil at dette vil være på toppen af ​​vores kode. Så i denne instance-- jeg tror det er den rigtige kommando, ikke? Ja. På toppen, du blot ønsker at inkludere bang DOCTYPE html i parentes bare til at fortælle computeren, hey, ser ud. Og HTML-dokument kommer. Og så hvordan gør vi ønsker at starte fra vores fil? Hvis vi bare ønsker at sige hej, har en webside, der siger hej til verden, hvordan kan vi gå om opbygningen af ​​denne? Faktisk, lad os vende til Google. Og vi kan faktisk gøre dette. Ja. Der vi går. Så HTML. Som du kan se, min browser er faktisk automatisk styling dette for mig. Samme som i C, når man skabe et åbent krøllet tandbøjle, din browser automatisk tilføjer i en tæt krøllet tandbøjle. Heldigvis, vores IDE elsker at gøre dette for os så godt. Så nu kan vi slags skrive begyndelsen af ​​et tag, og det vil altid fortælle os at Husk at skrive ende af tag. Jeg tror, ​​dette skal kapitaliseres. Og så ønsker vi at tilføje, altid, et hoved, hvor er titlen. Vi ønsker blot at måske kalde denne hej, og derefter krop. Og der du går. Det er faktisk vores HTML-dokument. Så den måde, at enhver HTML-dokument er altid stylet in-- samme ting med int main tomrum. Du ønsker altid at have HTML en åben og tæt tag på toppen og i bunden af ​​koden. Du ønsker at have et hoved inde i som indeholder titlen, lige uanset kommer til at vise fanen din web side, og derefter et organ inden i hvilken rent faktisk vil vise indholdet af hvad du vil gøre. Så hvis du ønsker at faktisk køre dette, jeg har tænkt mig at zoome ud igen. Du kan faktisk starte apache50 starte prik. Cool. Og så som du kan se, nu dette link er poppet op. Den siger dit websted er nu tilgængelig på nogle nedenstående link. Så alle vores IDE har done-- ikke IDE, sorry-- yeah, vores IDE har gjort, er at skabe en web link hvorpå alle vores websider kan tilgås på serveren. Så lad os tage et kig her. Lad os klikke på dette, gå til hello.html. Og du ser en meget simpel webside for Hello world. OK. Vi faktisk vil bare har everyone-- yeah, hvad sker der? PUBLIKUM: Jeg har et grundlæggende spørgsmål. ANDI Peng: Yup. PUBLIKUM: Hvordan du gemmer din fil som en HTML? ANDI Peng: Ja. Så hvis jeg skulle oprette en ny fil, hvis jeg gør Ny fil, Untittle, hvis jeg gør, section.html, boom, det er alt jeg har at gøre. PUBLIKUM: [uhørligt]? ANDI Peng: Nej. PUBLIKUM: [uhørligt]. ANDI Peng: Nej. PUBLIKUM: [uhørligt]. ANDI Peng: Ja. Temmelig meget, udvidelse på den fil, der er inde i din IDE, der fortæller computeren, at fortæller browseren, hey, ser ud. Dette vil være koden skrevet på dette sprog. Så for eksempel i Microsoft Word, hvad gør alle Word-dokumenter afsluttes med, hvad forlængelse? .doc eller .docx, ikke? Alle, der gør, er angivet at dit operativsystem, hey, du har fået et Word-dokument kommer op. Åbne den med Word. Samme ting med PDF-filer. Den kender, åh, jeg har brug for at åbne op denne fil med Adobe Reader eller Adobe Acrobat. Og så udvidelser betjene samme måde som i din computer. Hvis du angiver din kode side at blive navngivet HTML, så er det ved, Åh, du har fået HTML-kode. Jeg har tænkt mig at behandle det som html-kode. Så det er super smart i den forstand. Så alle, lad os tage ligesom 10 minutter og bare skabe vores egne hjemmesider. Lad os tilføje de dejlige ting. Du er velkommen til at sige hvad du vil. Jeg vil bare være sikker på, at alles servere kører korrekt inden vi frigøre dig ind i pset. Fordi hvis dine servere ikke køre for pset, der vil være virkelig, virkelig dårlig. Jeg bare at flyde rundt og se, hvad alle arbejder på. Hvordan går det? PUBLIKUM: Jeg har lige tændt min computer. ANDI Peng: Det er OK. PUBLIKUM: [uhørligt]. ANDI Peng: Bare din IDE. Ja. PUBLIKUM: [uhørligt]. ANDI Peng: Det er OK. PUBLIKUM: [uhørligt]. ANDI Peng: Helt fint. Er alle adgang deres web-server OK? Er apache50 kører OK? Jeg tror i nogle af de andre sektioner, vi havde problemer med folk ikke at kunne få adgang til serveren. Ja. Så du bare køre apache50 plads begynder plads periode. PUBLIKUM: [uhørligt]. ANDI Peng: Yup. God? PUBLIKUM: [uhørligt]. ANDI Peng: Åh, OK. Så du skulle have en plads. Så apache50-- PUBLIKUM: jeg gjorde. ANDI Peng: --start plads. PUBLIKUM: Åh, rum prik. ANDI Peng: Yup, rum prik. Værs'go. Så hvis du har en HTML-side oprettet, så kan du bare gå direkte til linket, at det angiver. Og du bør være i stand til at få adgang til det. Alle kunnet adgang til deres websider OK? PUBLIKUM: [uhørligt]. ANDI Peng: Åh, det er OK. PUBLIKUM: [uhørligt]. ANDI Peng: Ja. Jeg tror, ​​du rent faktisk kan åbne det inden for din browser, browser og ikke bare din IDE browser. Ja, jeg tror, ​​at hvis du kopiere og indsætte det. PUBLIKUM: Og så hvordan kan vi slå det fra? [Uhørligt] ANDI Peng: Ja, du gør apache50 stoppe med ingen periode. Ja. PUBLIKUM: [uhørligt]. ANDI Peng: Uden periode. Ja. Der vi går. Ja. Vi skaber vores egne websider. PUBLIKUM: Åh, cool. ANDI Peng: Ja. PUBLIKUM: Jeg har et spørgsmål. Så apache 50-- ANDI Peng: 50, ja. PUBLIKUM: [uhørligt]. ANDI Peng: Hvad? Det er underligt. Se, det var slags spørgsmålet der foregik før. OK. Se mig efter afsnit. Fordi vi har nogle problemer med serveren. Og du ønsker at gøre sikker på, at din server er kører, før du starter pset. Fordi du får brug for det. Ja. Er der nogen andre, der ikke har været stand til at få deres server til at starte? For dem af jer, der ønsker at tilføje ekstra stil til dine websider, vi rent faktisk kan gøre, hvad David gjorde i forelæsning så godt, som er at skabe en ekstra stil ark, som er en prik CSS, Cascading Style Sheet og faktisk bare tilføje det i. Så for eksempel, har jeg netop oprettet temmelig meget næsten nøjagtig samme én David gjorde i forelæsning. Du kan stort set bare gøre kroppen. Du har det, der kaldes tags, hvor du kan anvende til IDE hvad sektion du ønsker i din faktiske til HTML-side. Så kroppen på siden, du kan gøre tekst align center. Og så vil jeg kreativ et tag kaldet top inde som jeg ønsker, at disse ting til ske, tildele en større pixelstørrelse for skrifttypen. Jeg vil have den skrifttype vægt til at være fed. Og jeg vil have farven til være blå, lige vilkårlig værdier, som jeg besluttede at vælge. Jeg kan oprette en anden tag kaldet midten. Skriftstørrelse, gøre det lidt mindre. Og så kan jeg oprette en anden tag kaldes bunden, hvor jeg vil skriftstørrelsen at være endnu mindre stadig. Og så temmelig meget dette er blot eksempel af kildekode eller kilde style sheets at det er meget nemt at bare Google. Hvis du siger, åh, jeg vil have min skrifttype skal kursiv og mørkegrønne, du kan sikkert Google, og så vil det fortælle dig de relevante tags eller id'er til at skabe. Og så den måde, ville du faktisk slags har denne i et HTML-dokument eller bruge det er alt hvad du har at gøre her er i spidsen tilføje et link til den stil ark. Så du kan bare linke href ligemænd uanset navnet på din typografiark er. Og så forholdet er en stil ark. Så inden for en HTML-dokument, så længe som du medtage denne dot CSS ark, du bør være i stand til at få adgang og har de egenskaber, der. Så for eksempel, her har jeg bare skabe et andet eksempel webside. Dette er velkommen til CS50 sektion Tirsdage fra 02:00 til 03:30 med mig. Og så har jeg tilføjet en dejlig billede, vi potentielt skal kunne se. Så hvis du tager et kig her, hvis du går til style.html, vi skabt en webside med killinger. Fordi killing er awesome. Så tilføje et billede er bare img src link. Temmelig meget, hvis der er nogen form for funktion du ønsker at tilføje til din website-- så lad os sige, du ønsker at tilføje en menu eller en søgning bar eller lignende en image-- bare Google hvordan man gør det. Og du bare plop i dette format. Og du kan bare smuk meget bare tilføje det i. Det er virkelig, virkelig nemt. Vi skaber vores egen websider lige nu. Hvis du vil-- PUBLIKUM: [uhørligt] ANDI Peng: Beklager? PUBLIKUM: [uhørligt]. ANDI Peng: Åh, div er blot en division fortæller mig, at, åh, jeg har en vis afsnit kaldet midten, hvor jeg anvender min CSS tag, og derefter min anden division med bunden. Det er alt, det er at fortælle dig. Fordi det er rart at holde ting pæne i orden, så programmet ved, hvordan netop til at køre. Og tror jeg kan kopiere indsætte denne ind i min egentlige browser så godt. Det bør være fint. Ja. Yay. Så hvis alle ønsker at bare prøve at oprette en webside, vi vil tage endnu to til tre minutter. Jeg vil bare være sikker på, alles servere kører og alle har en idé om, hvordan man gør det. Hvis du fyre ønsker at tage ud af dine computere. Stadig ikke? PUBLIKUM: Jeg er bare [uhørligt]. ANDI Peng: Måske prøve opdatere 50 så godt. Ja. PUBLIKUM: [uhørligt]. ANDI Peng: Ja. Så den måde, at du starter en ny webserver på IDE er bare gøre apache50 plads starten plads prik. Jeg ville bare være sikker alles servere kører OK. PUBLIKUM: Her på terminalen? ANDI Peng: Ja. PUBLIKUM: [uhørligt]. ANDI Peng: Apache. Faktisk, jeg tror, ​​du er kører noget allerede. Ja, du er faktisk kører en anden server. Ja, du er god. Så længe der er arbejde, er du OK. PUBLIKUM: OK. ANDI Peng: Der er to måder at køre servere. Så længe en af ​​de måder fungerer, det er i orden. Vi vil tage et andet minut bare at slags slutte op finpudse uanset webside, du fyre ønskede at gøre. Er alle, der arbejder ved den måde? Alles servere er kører ud til din? Vi vil finde ud af. Og HTML er forholdsvis enkel. Så jeg tror, ​​vi er alle gode. Ja. Jeg kommer tilbage. PUBLIKUM: [uhørligt]. ANDI Peng: OK. PUBLIKUM: Så er det bare begyndte at lægge op. ANDI Peng: Ingen bekymringer. Så HTML, der er kilde kode, vil være online efter sektion. Også, David har en hel flok online så godt. Lige slags blik over det til se, hvordan HTML-sider er skrevet. Det er forholdsvis let. Noget, du ikke kender, du stort meget bare Google og du er god. Jeg vil bare være sikker på, at dine servere kører. PUBLIKUM: Er det gør det ofte? ANDI Peng: Det er aldrig sket for mig. Jeg vidste ikke, det kunne endda dvale. PUBLIKUM: [uhørligt]. ANDI Peng: Jeg tror everyone-- mine har aldrig overvintrede før. Og jeg ved ikke hvorfor. Det er underligt. PUBLIKUM: [uhørligt]. ANDI Peng: Er jeres dvale? PUBLIKUM: [uhørligt]. ANDI Peng: Ja. PUBLIKUM: Det er OK. Så når det er åbent. ANDI Peng: OK. Vi vil behandle nogle server problemer efter sektion. Du skal være fint. Selv om du ønsker at sikre, at du få dem løst, før du forlader. Fordi hvis din server ikke kører, så er du ikke vil være i stand til at gøre det pset, som enhver del af pset. Så du vil være sikker på at der er arbejde. Cool. Okay. Sig farvel killinger. Jeg brugte lang tid på udkig efter at killingen billedet for at tage på. Så anyways. PUBLIKUM: [uhørligt]. ANDI Peng: Beklager? PUBLIKUM: [uhørligt]. ANDI Peng: Jeg synes det er på hjemmesiden. Ligesom spec? PUBLIKUM: [uhørligt]. Jeg tror, ​​at spec er bare online i uge syv. Jeg tror, ​​det hedder pset6, selv selvom vi er på uge syv, som er en smule computing. PUBLIKUM: Men jeg mener, hvis du ønsker at se at-- hvis du ønsker at trække op vores version af webstedet fra vores sever? Så ligesom server.c er pset, ikke? Hvis du ønsker at se på dette, ligesom hvordan det tjekker? ANDI Peng: Åh, så faktisk den pset, er alt, hvad vi laver her er implementing-- her, Jeg vil gå over dette kort. Så for alle, der er lige fået til afsnittet jer er i lykke. Der er meget lidt materiale faktisk dække dag. Jeg er bare kommer til at tilbringe den næste 20 minutter går over pset hjælp. Fordi der er nogle nyttige funktioner, der vil hjælpe dit liv. Og forhåbentlig vil vi være ude herfra i ligesom 20 minutter. OK. Så pset7 er forkert. Selvom vi er på uge syv, det er faktisk pset6. Jeg vil ændre det. Alt, hvad vi laver i pset6 skaber en webserver. Det lyder super skræmmende. Og især for dem, af jer, der allerede har så på fordelingen koden, der er en masse kode, en masse kode. Men er helt OK. Fordi Nitty Gritty del af faktisk at skabe serveren er udført af os. Alt du virkelig spurgt at gøre i denne pset er bare at gøre nogle strenghåndtering i fil I / O. Det er faktisk som forholdsvis enkel. Så når du først hente at-- der her har faktisk allerede downloadet den pset og taget et kig? Okay. Ja. Der er ligesom 500 linjer kode at du kommer til at være ligesom, Hvad foregår der? Og det er helt fint. Sørg for at du se walk-through. Fordi David og-- ved jeg ikke. Jeg tror ikke, det er Zamyla Dette ene. Men jeg tror nogle andre walk-through er ret nyttige i form af bare fortælle dig, hvad der foregår inde i din kode. Og det er helt OK. Fordi de fire funktioner, som du er bedt om at gennemføre faktisk har nul at gøre med selve serveren. Alt hvad de skal gøre, er bare parsing forskellige strenge, søge gennem strygere, for at sikre ting gør hvad de skulle gøre. Så i denne retning er der nogle meget, meget brugbare funktioner, især for streng manipulation, at vi alle bør gå over, at jeg troede, jeg havde være meget nyttigt for jer at lære, før du forsøger pset. Og de er alle indeholdt inden for dit string.h bibliotek. Der er sikkert mere nyttig funktioner Jeg har ikke medtaget her, fordi jeg enten aldrig bruge dem eller måske jeg bare ikke ved, at de eksisterer. Du er velkommen til blik gennem student.h. Fordi der kommer til at være en masse funktioner, som er meget nyttige. Så de seks, som jeg bruger mest i min pset da jeg gjorde det i sidste uge var strtok, strchr, strrcher, strstr, strcasecmp og strcpy. Og så de sidste to kan synes temmelig velkendt for de fleste af jer. Str tilfælde sammenligne, alt det gør, er at sammenligne strenge at tjekke dem for ligestilling, herunder tilfælde. Og strcpy bare kopier en streng i en buffer. Og så de to bør synes meget velkendt for jer på dette punkt. Fordi vi har brugt dem en masse, især for de sidste psets. Men de første fire måske du ikke har set indtil nu. Men jeg har tænkt mig at bare gå igennem dem. Fordi de kommer til at gøre dit liv virkelig, virkelig nemt for-- ikke nemt, men meget lettere for denne kommende pset. OK. Så char * strtok, dette er den funktion definition for denne funktion, der er indeholdt inden strengen, h bibliotek. Hvis du får et input af char * streng, som er blot en streng, eller en konstant char * deliminator, delim for korte, alt det gør er at bryde de større streng i en række, hvad vi kalder tokens adskilt af en vis værdi. Så i en vis forstand, hvis jeg var at give du section.7.php, det er en streng. Så det ville være, hvis jeg skulle gå i dette som min str, min char * str, hvis min deliminator var dot, alt dette ville gøre er at søge gennem streng. Og for første gang den ser en prik, Det vil blot vende tilbage til markøren til den sidste token fundet i strengen, før dette. Så det ville gå lige her. Og det ville bare give mig 7.php. Og hvis jeg skulle kalde fungere en gang mere, det ville give mig bare php. Og så alt denne funktion gør er at nedbryde større strengen i mindre strenge afhængigt på, hvad du leder efter. Og så for eksempel i dit look up funktion hvis du ønsker at se på, hvad bestemte tegn ske eller hvis prikker ske eller udvidelser ske, denne funktion ville være temmelig nyttig. Ja. Ingen problemer. Dette vil alt være-- yeah, hvad sker der? PUBLIKUM: Så i den første linje, hvis vi bruger dette eksempel hvad ville vi indsætte i det? ANDI Peng: Ja. Du ville bare kalde en strtok snor komma delim. Og streng er lig med section.7.php. Og så er du delim kunne være lig med bare prik. PUBLIKUM: OK. ANDI Peng: Ja. Bare sådan. Alle disse funktioner er temmelig lignende, når vi går igennem dem. De bare gøre lidt forskellige ting. Men de er alle kommer til at gøre dit liv meget lettere. Anden funktion, denne ene er ligesom super, super, super vigtigt, er til-- hold op. Ups. Strchr søger efter den første occurrence-- faktisk, ja. Strchr er den funktion, Jeg absolut lige gik over. Så ignorere, hvad jeg sagde for den første funktion. Det er faktisk hedder strchr. Så hvad ville der skete her, er, hvis du fik en streng i en char c, det ville bare give dig, uanset hvad det var. Ja. Så tænk på det som str, som er en streng, og chr som char. Så alt du forsøger at gøre er at søge for hvor en char er inden for en streng. Og så det søger efter den første forekomst af tegnet ci strengen str. PUBLIKUM: [uhørligt]. ANDI Peng: Yup. Og derefter, hvis det ikke finde det, går det at vende tilbage NULL. Så noget, der kommer til at være meget nyttigt for jer i at gøre det pset hvis, siger, var du på udkig efter en udvidelse som en .docx til et Word dokument eller en .pdf til et PDF-dokument, du kan slags bruge det til at se for hvad der er bagefter hver gang du ser en prik, ikke? Og så temmelig meget, hvis du køre det gennem den funktion, hvis det returnerer NULL, så ved du, at det ikke fandt det prik, hvilket betyder klart er ikke en gyldig filtype. Eller hvis det returnerer noget, så ved du det kommer til at vende tilbage uanset s faktisk efter udvidelsen. Så dem af jer der havde begyndte at kigge gennem opslag og parse, denne funktion er vil være super nyttig. Så vi er faktisk vil at påvise ved hjælp af dette. Hvorfor tager du ikke fyre prøve at skrive en funktion bool sætning char * s, der bare returnerer true, hvis s er en sætning og falsk ellers. Så tip, du vil til sandsynligvis bruge strchr. Eller du søger lige i streng for en bestemt karakter. Og så i en sætning, hvad der adskiller en sætning fra en ikke-sætning, hvilke specifikke karakter? PUBLIKUM: Et rum. ANDI Peng: Et rum, ikke? Og så hvad gør vi sandsynligvis vil ønsker at gøre inden denne funktion her? PUBLIKUM: [uhørligt]. ANDI Peng: Vi kommer til at ønsker at strchr streng for udseendet af rummet. For hvis det vender tilbage noget, så vi ved, at dette skal være en sætning. Det betyder, at vi må har en plads i denne streng. Hvis der er ikke plads, så vi ved, at, hey, gæt det ikke er en streng. Det er nok bare en virkelig lang ord. Så jeg vil give jer et par minutter til at skrive denne funktion. Ja. PUBLIKUM: Fik du denne streng fra brugeren? ANDI Peng: Ja. Så dette er bare en funktion. Så forestil dig inde i din vigtigste funktion du allerede have-- lad os gå her. OK. Så jeg har skrevet dette program, hvis Jeg har min primære funktion, hvor Jeg har lige oprettet to strenge. Den første er Hej, mit navn er Andi-- klart, en sætning. Min anden er bare Andi, tydeligvis ikke sætning. Og så jeg kører både af dem strings gennem denne funktion. Jeg vil have jer til at skrive koldt sætning. Og jeg opbevare disse værdier, og så bare udskrive dem ud. Så mener, at brugeren er kommer til at passere i en streng. Og så er du kommer til at væsentlige regne ud, hvis det er en sætning eller ej og returnere sandt eller falsk i overensstemmelse hermed. Hvis du fyre ønsker at give en Tommelfinger op eller heads up, hoved nik, er nogen, er klar til at starte dette, ville det være godt. Måske ligesom 30 sekunder mere? Okay. Lad os se om du kan prøve skrive denne funktion. Så pseudo coding-- jeg bare gå til slags går gennem dette lige nu. Temmelig meget, vi kender funktion, som vi skal bruge. Vi kommer til at kalde denne funktion på vores snor og søgen efter en plads. Hvis den returnerer noget, så må vi ved, at det er klart, det er en sætning. Fordi der er mellemrum. Så vi kommer til at returnere sandt. Else, vi vil vende tilbage falsk. Er der nogen ønsker at give mig den første linje kode at vi faktisk kommer at bruge til at skrive dette? Det er faktisk den sværeste linje kode samt. Ja. PUBLIKUM: Hvis strtok S-- ANDI Peng: Bare strchr. PUBLIKUM: [indskyde VOICES] plads er ikke lig med nul. ANDI Peng: Cool. Helt rigtigt. Alle forstår, at første linje? Vi kommer til at kalde strstr, som er en funktion, der søger strengen s for tegn i rummet. Og hvis den finder det, vil det returnere en pointer til hvor det er. Hvis den ikke finder den, det kommer til at vende tilbage NULL. Så hvis det returnerer andet end NULL, så vi ved, det er fundet en plads. Giver det mening? Cool. Okay. Så hvis vi ved, det er fundet en plads, hvad ønsker vi at gøre? PUBLIKUM: Retur sandt. ANDI Peng: Yup. Returnere sandt. Og så, nogen ønsker at slutte op funktionen for mig? Ja. Else, bare sådan. Og prøve at oversætte dette. Ja. Så som du fyre kan se fra udgange, husk Booleans i C er altid udtrykt i binær. 1 er sandt. 0 er falsk. Hvis vi skulle køre dette funktionen på strengen én, som er Hej, mit navn er Andi-- klart, en sentence-- resultatet udskrives til 1, som er sandt. Den anden, som er lige et ord, resultat udskrives til 0, hvilket er forkert. Alle klar slags om, hvordan denne funktion blev skrevet? Ja. PUBLIKUM: Kan vi også gøre, i stedet for ikke er lig nej, lig lig med 0, så det er lig med? ANDI Peng: Nej. Fordi strchr er en funktion. Jeg har tænkt mig til tilbage til dette. Så hvad er returtypen vores strchr funktion? PUBLIKUM: Åh, OK. Eller NULL. ANDI Peng: Ja. Det er en char *, der fortæller mig, at uanset hvad denne funktion vil vende tilbage, Det kommer til at være en pegepind. Enten markøren vil være peger på, hvor det er fundet det, eller det kommer til at vende tilbage en pegepind til NULL. I begge omstændighed, går det at returnere en pegepind til noget. Og så hvis du var at sidestille dette er lig med, er lig med 0, du kommer til at få en samling fejl. Fordi det kommer til at returnere en pegepind. Og du kommer til at forsøge at sammenligne en pointer til et heltal. Og computeren er ikke kommer til at lide det. Ja, præcis. Cool. Alle godt? Og for det andet, vi kommer til at gå over en funktion kaldet strstr. Ingen bekymringer Hvis disse funktioner er forvirrende dig. De er forvirrende mig. Som sådan kunne du fyre har set, de alle lyder stort set den samme. Bare når du er forvirret, trække op string.h biblioteket. Og du fyre kan sortere hvorigennem ens som. Så strstr, alt, gør, er søgninger en snor til en helt anden streng. Så hvor strchr bare søgninger for et enkelt tegn, strstr søger efter en hel streng. Så jeg ønskede at se på, det gør jeg ikke kender, Hej, mit navn er Andi. Og min bedste vens navn er også Andi. Hvis jeg ønskede at se i denne sætning for hele ord Andi, min nål ville have været uanset hvad du leder efter. Og din høstak er hvad du søger efter det i. Så hvis du leder efter en specifikke ord i en sætning, det ord kommer til at være din nål. Og så den sætning selv kommer til at være din høstak. Og så er det bare søger den første forekomst af strengen nålen i strengen høstak. Den returnerer markøren til den første forekomst. Bortset fra, husk i denne sag, er det den første forekomst af hele strengen at du søger for, ikke bare et tegn. Og så dette er næsten det samme som funktionen vi bare gjorde, bare med lidt mere specificitet. Fordi du søger efter mere end blot ét tegn. Og brugen er nøjagtig den samme som den, vi lige gjorde. Alle OK med dette? OK. Sidste vi kommer til at gå over, er strrchr, som ikke er forveksles med strstr eller med strchr. strrchr har en ekstra r derinde. Vær forsigtig, når du skriver. Du kan finde dig selv herunder en ekstra R eller ikke indbefatter en r, og derefter din funktion der fik ikke vil arbejde. Og du kommer til at være forvirret. Vær forsigtig, at du stave alle disse funktioner højre. Så strrchr er det stik samme ting som strchr undtagen den søger efter ikke den første indtrædelsen af ​​en bestemt karakter, men snarere den sidste forekomst. Og så, i den forstand, det er næsten nøjagtigt den samme. Men i stedet for at flytte sende i en streng, du kommer til at bevæge sig bagud i en streng. Præcis de samme ting, du bare søge i en anden rækkefølge. Og så dette kunne være super, super nyttigt for din opslag funktion, den første funktionen på din pset. Lad os lade som om vi havde brug for at skrive en funktion af tomrum udvidelse, hvor vi passere en konstant char * filnavn, blot en snor, et filnavn, der tager i dette navn og udskriver ud forlængelse af denne fil. Altså for eksempel, hvis jeg skulle passere i strengen af ​​pset7.zip, det vil udskrive bare udvidelse, som er .zip. Og det ville arbejde for nogen form for udvidelse, .docx til Word eller .pdf for en PDF fil eller .html til en HTML-fil. Temmelig meget, skriver en funktion, der kan gøre det. Jeg er faktisk at gå til skifte over til IDE. Det er ikke load-- der vi gå. Så alt jeg har gjort her er skabte en char *, en første streng, kaldet pset7.zip. Jeg har tænkt mig at zoome ind. Jeg har oprettet en anden streng kaldt finalpaper.docx. Og skriv til mig en funktion, når kaldet vil bare udskrive de filtypenavne. Måske tage et par minutter til at tænke om, hvordan du kommer til at gøre dette. Lidt mere udfordrende end den sidste, men brugen er næsten præcis det samme. Ja. Så skriv en funktion kaldet lokalnummer at hvis jeg giver dig navnet på en fil, hvis jeg skulle give dig pset7.zip-- jeg vil have dig til at udskrive netop .zip. Hvis jeg giver dig gerne finalpaper.docx, bare udskrive .docx, lige forlængelse uanset fil. Dette faktisk kun tager to linjer kode. Så prøv at se om du kan måske gøre det i det. Faktisk kun det tager én linje kode. Men to linjer er nok mere standard. Hvilken funktion er vi sandsynligvis vil ønsker at ringe? PUBLIKUM: strrchr. ANDI Peng: strrchr, højre. Fordi vi leder efter fra højre til venstre. Jeg ikke give jer et eksempel som dette, men hvis jeg gav dig et eksempel gerne www.apple.com og jeg ville bare .com, ville det være en eksempel på, hvor du vil ringe sidste instans af perioden og ikke den første, ikke? Hvis du var opkald strchr, det ville have givet dig apple.com. Hvis du kaldte strrchr, det ville have givet dig .com. Og så vær forsigtig, hvorpå ways-- i mit eksempel, kunne du sandsynligvis kunne have lige skrevet den ved hjælp strchr, da der kun er én prik. Men i andre tilfælde, der kan ikke være tilfældet. Og så forsøger altid at designe din kode godt, så at-- ja? PUBLIKUM: Så i eksempel du lige sagde, når du strrchr det ville give dig .com eller bare komme? ANDI Peng: Det ville give dig .com. PUBLIKUM: OK. ANDI Peng: Ja. Det peger på, hvor den fandt det. Ja. 30 sekunder måske? Ja. Alle gode eller måske en smule mere tid? Håndsoprækning? Vis hoveder? Cool. Nogen ønsker at give mig den første linje kode til dette program? PUBLIKUM: [uhørligt]. ANDI Peng: Så først og fremmest, lad os måske opdele det. Så hvad er afkastet type strrchr? Lad os gå tilbage. strrchr, hvad er afkastet type? PUBLIKUM: Char * ANDI Peng: Det er en char *, ikke? Hvilket betyder, at du sandsynligvis kommer at ønsker at oprette en anden char * at slags af butikken, når det er vender tilbage til, ikke? Fordi hvis du ringer funktionen strrchr, det kommer til at give dig en pointer til hvor det fandt, at sidste periode, højre? Men du vil gerne opbevare, at et sted, ikke? Og så hvordan kan vi kode dette i vores program? PUBLIKUM: Du gør char * [uhørligt]. ANDI Peng: Yep. PUBLIKUM: [uhørligt]. ANDI Peng: strrchr. Ja. Åh, savnede en r der. PUBLIKUM: Filnavn [uhørligt]. Hvad er det? Åh, det er bare s. ANDI Peng: Åh, det er bare s. Yup, undskyld. Min fejl. Eksempler matchede ikke. PUBLIKUM: Og så prik. ANDI Peng: Yup. Vær forsigtig, når du fyre are-- her, lad mig zoome ind. Der vi går. Vær forsigtig, når du fyre skriver, især når du laver bare en char. Det er virkelig nemt at uheld bare gøre dobbelte anførselstegn i stedet for single. Det vil ikke fungere. Din compiler vil klage. Og din funktion er bare ikke kommer til at køre. Og så vær forsigtig, når du laver ting med chars, at det er enkelte anførselstegn. Og det gør denne linje kode mening for alle? Vi skaber en char * pointer. Fordi strrchr afkast noget af typen pointer. Og så vil vi kalde strchr på s, hvilket er den streng, filen navn, at vi passerer i. Og vi leder efter den sidste forekomst af en periode, som er bare enkelt citat dot enkelt tilbud. Ja. PUBLIKUM: Hvornår skal vi bruge dobbelte anførselstegn og når bruger vi enkelte anførselstegn? ANDI Peng: Ja. Så dobbelte anførselstegn er altid bruges, når du har en streng af mere end blot én. Så hvis du laver strstr, som er den, du søge en streng til streng, du ville passere det i anførselstegn. Men enhver tid er det bare et enkelt tegn, du ønsker at gøre enkelte anførselstegn. Det er en god ting at huske på. Så nu, at vi har vores pointer, hvad gør vi med det? Jeg beder jer til printe det ud, ikke? Så [uhørligt], du ønsker at give mig linje kode? PUBLIKUM: printf-- ANDI Peng: Ja. PUBLIKUM: --you brug for et sted holder. ANDI Peng: Yup. PUBLIKUM: Udskriv sted holderen. Jeg ved ikke, hvad stedet indehaveren er, men peger på det. OK. Lad os springe, at for nu da. PUBLIKUM: Og så comma-- ANDI Peng: Pointer, ikke? PUBLIKUM: Pointer, yup. ANDI Peng: Så slags et trick spørgsmål, har at gøre med pointere og strenge at vi har sådan talt om allerede. Hvilken slags pladsholder gøre vi behov for en pointer til en char *? PUBLIKUM: [uhørligt]. ANDI Peng: Ja. Det er nemmere end du fyre synes, det er. PUBLIKUM: String? ANDI Peng: Det er bare en snor, nøjagtigt. Fordi huske strygere ikke rigtig eksisterer. En char * er den præcise samme ting som en streng. Og så virkelig dette s er hvad burde have været anvendt alle sammen. OK. Lad os se om vi kan prøve at køre dette. Lad os gøre en make forlængelse. Cool. Du fyre se, hvordan jeg passerede i psset7.zip og finalpaper.docx, og det bare udskriver .zip og .docx? Give mening? OK Så jeg tror i dit look op funktion i pset du er vil blive spurgt, om de streng har en vis slutning, du nødt til at give en vis fejlkode. Og så vil dette være temmelig forfærdeligt. For hvis du kan regne ud af, hvad udvidelsen er, du kan derefter sammenligne det udvidelse at se om det matcher op med en vis forlængelse. Og så kan du vende tilbage en fejlmeddelelse, ikke? Ja. PUBLIKUM: Så gør vi ikke nødt til at tilføje 1 eller noget? Markøren vil gå til-- ANDI Peng: Nope. PUBLIKUM: --point efter det. ANDI Peng: Ja. Det peger nøjagtigt til hvor forekomsten var. Så for eksempel her, er vi søge efter perioden. Så det kommer til at vende tilbage en pointer til perioden. Og så det kommer til at udskrive startende ved periode. Så du behøver ikke at tilføje 1. Selvom, det er helt fint at, hvis du nogensinde i tvivl, til bare lidt af prøve det af dig selv. Byg en prøve-program. Prøve det af dig selv og se, hvor det er udskrivning. Det er heller ikke en dårlig måde at gøre det. Cool. Og det er temmelig alle Jeg havde til jer i dag. Vi gjorde en masse pset ting i dag. Så når du er i tvivl, ligesom Jeg sagde, altid se op den string.h bibliotek for denne pset. Der kommer til at være en masse af funktion derinde som kan være nyttige. Nogle kan ikke være nyttigt. Jeg ved ikke rigtig kender. Vade igennem det, er der en hel masse af dem. strstr, strchr, strrchr er super, super nyttige, samt de strcpys og strcasecmps at vi allerede har brugt. Det er bare meget rode rundt med strenge, afgøre, om de er ens, få ting ud af strygere, og være i stand til at åbne filer korrekt. Det er en masse fil I / O. pset er virkelig ikke så slemt. Du kommer til at tage en se på det, så download den, og se en hel masse kode. Ingen bekymringer, den kode, du rent faktisk at skrive er ikke dårligt overhovedet. Hvis nogen har problemer med deres server, kom og se mig efter afsnit. Undskylder endnu en gang for ikke bringe slik til Halloween. Jeg ved ikke, hvad der var galt med mig. Men vi vil have dobbelt candy næste gang. Og held og lykke i dit pset denne uge. Ja.