ANDI PENG: Vi er nesten gjennom alle psets. Faktisk er vi gjennom de fleste av de vanskeligste psets. Så vi er faktisk bare kommer til å slags vind gjennom de neste par ukene. Vi kommer til å begynne å snakke om vår siste prosjekter, hendelsene kommer opp i de neste ukene. Og livet vil være en lek. Så ikke så mye i dag. Forhåpentligvis vil faktisk bris gjennom agendaen for i dag, og så være ute av her med litt tid til overs. Også vil jeg be om unnskyldning for mangelen på godteri i dag. Jeg vet ikke hvorfor. Men i uken frem Halloween, ville jeg glemmer godteri. Så jeg er egentlig bare et stort skuffelse for deg akkurat nå. Fordi jeg bokstavelig talt husker godteri for hver enkelt klasse, men Halloween. Men neste uke, vil jeg ta doble mengden av godteri å gjøre opp for det, alt for deg. Det vil være stor. Så jeg har et par kunngjøringer om noen planlegging. Jeg har noen planlegging problemer. Vi så kommer til å gå videre til snakke om det som kalles chmod. Vi kommer til å snakke om raskt TCP / IP HTTP. Og så skal vi koden vår egen nettside ved hjelp av HTML og CSS. Og så skal jeg faktisk la kanskje som 20 minutter å snakke om pset6. Fordi pset6 er faktisk mye ting som vi allerede har sett før, men jeg ønsket å oppdatere noen av disse begrepene samt lære et par nye funksjoner. Kjølig. Så først av alt, Velkommen tilbake fra ferie. Jeg håper du er pause var hyggelig. Vil gjorde du for pause? PUBLIKUM: Dro til New York. ANDI PENG: Du dro til New York? Jeg tror halvparten skolen vår dro til New York. Det er greit. Jeg tilbrakte mesteparten av min pause stillesittende i sengen Netflixing. Og det var en god tid. Men vi er nå tilbake, tilbake i sesjon, tilbake i swing ting. Vi har en PSet grunn dette fredag ​​midt på dagen. Jeg tror du allerede har plukket opp quiz, ja? Så noen andre som har ikke hadde sine quizer, kan du komme og få dine quizer fra meg på slutten av seksjonen. Eller spore meg opp på campus. Jeg skal ha den med meg et sted. Vårt siste prosjekt pre-forslaget også. Så for de av oss som aldri har tatt denne klassen før, hjørnestein av CS50 er veldig mye kulminerte i denne grand prosjekt som studentene foreslår. Og pre-forslaget, bare en generell idé av hva man kanskje ønsker å gjøre for deres prosjektet, er at ideen på grunn mandag, neste mandag midt på dagen. Så ganske mye, David tror jeg vil snakke mer om dette i foredraget hvis han ikke allerede. Og det er en solid side på vår hjemmeside forklarer alle kravene i prosjektet. Men i hovedsak, plukke et emne som du har vært interessert i hele tiden din her på CS, enten det er spill eller design eller video eller noe. Og du kan virkelig slags nå bruke noen av leksjonene at vi har lært her i CS50-- hi, welcome-- til ganske mye å drive et avsluttende prosjekt etter eget valg. Alt som er grunn Mandag er bare en kort blurb via e-post til meg, en rask dom, som, hei, Andi, Jeg er virkelig interessert i å utforme et spill som gjør dette for iOS. Kjølig. Bare la meg ditt kort innledende ideer for dine endelige prosjekter. Og vi skal snakke gjennom hvorvidt det er faktisk en god ide eller ikke, hvis det er en mulig idé eller ikke. Men bare pre-forslaget skyldes neste mandag. pset6, vår herlige web-- som er galt. Pset7? pset6? Det er pset6, ikke sant? pset6, vår webserver, skyldes Fredag ​​på middag med den avdøde dag. Kontortid gjenoppta normalt fra mandag til torsdag 08:00 til 11:00 denne uken. Jeg tror Commons for de neste tre nettene. Kjølig. Før vi hadde i materialet, er det noen har spørsmål, vitser, historier? Hva gjorde du for høstferien? PUBLIKUM: Hva gjør jeg? ANDI PENG: Allerede det er lenge siden faktisk. Christ dro til New York. Jeg bodde her og Netflixed. PUBLIKUM: Å, ja jeg var her. ANDI PENG: Oh, OK. PUBLIKUM: Jeg husker ikke hva som konkret. ANDI PENG: Det er OK. PUBLIKUM: Netflixing sannsynligvis. ANDI PENG: Netflixing. Ja, det er en god tid. OK. Greit. Eventuelle spørsmål før vi hopper inn i materialet? Dessuten skal vi prøve å fart gjennom seksjonen i dag, ikke for mye å dekke. Og forhåpentligvis vil vi få her ut litt tidlig. Sorry for ikke godteri, også. Jeg er en stor skuffelse spesielt under Halloween. Greit. Kjølig. Så vi kommer til å begynne å snakke om en kommandolinje argument heter chmod. chmod, er alt det er bare et Unix-system kaller gjennomført fra kommandolinjen å endre filrettigheter. Så for eksempel, har vi alle møtt en side som dette trolig en gang i vår levetid være en internett bruker, hvor vår web-server har gitt oss feil av forbudte. Du har ikke tillatelse til å få tilgang til, yadda, yadda, yadda, på denne serveren. Alt som egentlig betyr er at tilgangen som var festet til hva siden du prøvde å få tilgang var ikke åpent for deg. Så ganske mye, chmod er den måten Vi kan endre disse systemtillatelser å gi alle, brukeren, gruppen, eller verden, eller en hvilken som helst Kombinasjonen av disse tilgangs til visse filer, kataloger, noe virkelig, noen form for system på et operativsystem. Så hvis noen av dere har datamaskiner hvis du føler som følger sammen med meg i dag, helt gjerne bare skrive ting i. Hvis ikke, kan du bare henge ut. Så jeg kommer til å faktisk trekke opp terminalen min akkurat nå. Så kommandoen for å kjøre chmod, eller i det minste bare å liste tillatelsene for din fil katalog, er bare ls-l. Som du kan se, en haug med ting dukker opp de fleste av disse er viktig for oss på venstre side her. Dere se en haug med hs, ws, 1 /. Yeah. De er egentlig bare alle filrettigheter å forklare hva visse kataloger og filene i systemet ditt har. Så la oss gå tilbake til power point her. Så i tillegg til filnavnene som dere kan se på høyre side, vi er ute etter å se hovedsak bare kolonnen til venstre. Så i tillegg til å bare filnavnene, vi kan se rettighetene på filene, deres eiergruppe, gruppenavnet, dato at filen sist modifisert, et cetera. Du kan se en masse ting som bruker chmod. Så måten vi leser chmod er at den første bokstaven vi ganske mye ignorere i form av lesetillatelser. Den første bokstaven bare forteller oss hva type system vi får tilgang. d, i dette tilfellet, er en mappe eller katalog. Så vi vet at tiden min arbeidsplass § sju var en katalog. Og så ser dere tre triader, i hovedsak bare tre sett med tre tegn. Og du kan tenke på hver som en bit. Slik at du bare har tre sett med tre biter, ni biter totalt. Du behandler dem i grupper på tre. Slik at den første gruppe av tre er alltid dine brukertillatelser. Den andre gruppe på tre er Alltid grupperettigheter. Og tredje sett av tre er alltid sånn i verden, de overalt tillatelser. Så jeg antar det lett spørsmål å stille er hva som er forskjellen mellom bruker og gruppe. Den største forskjellen mellom bruker og gruppe er at en bruker er bare deg personlig tilgang til hva det er akkurat nå. En gruppe kan være hvis du har flere brukere på én datamaskin, for eksempel. Alle av dem kan bli behandlet som en gruppe. Og så er verden bare verden, alle sammen. Så vi kan se senere om hvordan vi kan modifisere dem inn i ulike tillatelser. Så ganske mye, vi er skal fortsatt fokusere på den delen til venstre, der for katalog CS50 vi se drwx, der r bare betyr at det er lesbart. W bare betyr at det er skrivbar. Og deretter x bare betyr at det er kjørbar. Man skulle tro det slag av ikke fornuftig. Det bør være e. Men x faktisk slags fungerer litt bedre, fordi du kan huske det bedre. Så de tre typer ting du kan gjøre, kan du enten lese en fil, du kan ha tillatelse til å skrive en fil, eller du kan ha tillatelse å utføre en fil. Og så den måten at vi faktisk representere dem i biter er tallene 4, 2 og 1. Så alt som er lesbar er representert ved antallet fire. Alt som er skrivbar er representert ved to. Og alt som er kjørbar som representert ved en. Så i denne forstand, kan vi også representere disse numbers-- Hei, velkommen, på en annen måte. Unnskyld. Før alle, kommer jeg til å beklager på vegne av alle inn i klassen nå. Jeg glemte godteri i dag. Jeg beklager at jeg er en fiasko denne uken av Halloween. Jeg vil gi dobbelt så mye godteri neste gang å gjøre opp for det. Men anyways, beklager om at gutta, sorry. Så den måten at vi kan faktisk inngang på vår kommando argumentet er vi kan gjøre chmod gruppe slash tillatelser, hvor konsernet er bare hva gruppe vi prøver å endre. Og tilgangen er hva vi ønsker å legge til det. Så for eksempel, pluss legger tillatelser, og subtrahere tar bort rettigheter. Og hvilke typer gruppe vi har vår en for alle, u for brukerne, g i grupper eller o for andre. Det er litt abstrakt akkurat nå. Men vi vil gå over et par eksempler bare for å demonstrere dette virkelig rask. Alle gode på dette lysbilde, så jeg kan gå videre? Kjølig. Så for eksempel, rwx. Før vi snakke om hva det representerer, først av alt hva betyr rwx? Hvis du ser at denne bestemte filen har rettighetene på rwx, hva betyr det at person kan være i stand til å gjøre? PUBLIKUM: lese, skrive og utføre. ANDI PENG: Ja, akkurat. Du kan lese skrive og utføre. Fordi alle tre av disse tegn er til stede. Så hvis vi går videre og snakke om dette i form av bits, den rwx kan også være representert som 700. Fordi som du kan se i hvilken som helst slags fil katalog tillatelse, det er tre triader. I dette tilfelle, bare det første triaden har noe der. Så i dette tilfellet er r 4, w er 2, og x er en. Hvis du legger 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, det er ingenting stede i det andre triade. Og så er det ingenting stede i den tredje triaden, så det er en annen 0. Så på samme måte, en haug med treklanger kan representeres bare i biter, bare i binær også. Så 700 betyr akkurat det samme som rwx ------ i form av tillatelser. Alle klare på det? Kjølig. Og så chmod 111 ville gi som rettigheter til filen? Gi dere et par sekunder for å konvertere denne. Husk, det første triaden er for brukeren. Den andre triaden er for konsernet. Og den tredje triaden er for alle. Og så chmod 111 ville gi noe type tillatelser og til hvem? Ta et par sekunder for å tenke på det og komme tilbake. Yeah. PUBLIKUM: Så alle kan kjøre den. ANDI PENG: Yup, akkurat. PUBLIKUM: Men ingen kan lese eller skrive. ANDI PENG: Og gjerne å forklare for alle hvordan du kom til den konklusjonen. PUBLIKUM: Vel, for brukeren, gruppe, og verden, det er alle ett, som er koden for kjørbare. ANDI PENG: Ja, akkurat. Så en, i dette tilfellet, er alt vi vet at det er kjørbar kode. Fordi lesing er 4. Skriving er 2. Og den kjør er en. Så er alle tre triader er en, at betyr at til verden, for brukeren, og til gruppen, de er alle kjørbare. Alle gode med det? OK. Og så den andre veien at vi faktisk kan skriver dette også er du bare kunne gjøre chmod et pluss x. et betyr alt eller alle. Pluss betyr å gi tillatelser til. Og så x betyr kjørbar. Så det er to kommandoer er faktisk identiske. Så hvis du vil kjøre dette i terminalen, du gjør chmod 111, navn på katalog eller filen. Eller du kan gjøre chmod et pluss x, Navn på din katalog filen. Samme, bare en enklere måte, kanskje, for noen til å representere eller endring filrettigheter. Hver og en OK med chmod før vi går videre? Kjølig. Så nå skal vi dra inn en noen lysbilder av svært abstrakte begreper at jeg er ganske mye kommer til vind gjennom. Og det er helt OK hvis du forstår ikke alt. Selv nå, jeg fortsatt ikke egentlig forstår alt helt. Men det er mer for å få øverste nivå forståelse av hvordan noen av disse tingene fungerer. Så vi kommer til å snakke raskt om TCP / IP, som er like Transmission Control Protokoll slash Internet Protocol. Husker fra foredraget David, fikk han lære deg eksempelet hvor han hadde passet notene i en konvolutt opp til å like toppen av forelesningssalen? Så i loven skolen auditorium David demonstrerte i hovedsak hvordan TCP / IP fungerer i den forstand at alt det er er et virkemiddel for å sikre at data har vært levert over en server eller på internett. Så i eksempelet på konvolutten og meldingen, brukeren på slutten kunne se at, åh, jeg trengte å motta fire pakker med informasjon. Men jeg faktisk bare fått tre. Det betyr at jeg må være mangler en. Og en ikke ble levert. Og så TCP / IP på internett, gjennom datamaskinen og serveren, gjør akkurat det samme. Alt den gjør er å angi et rammeverk der en tapt data pakker kan sendes på nytt og mottatt. Som på internett når du prøver for å få tilgang til filer på nettet eller sende filer til din venn eller se på web nettlesere, tusenvis av milliarder og milliarder byte informasjon overføres per millisekund. Og det er veldig, veldig forvirrende. Og det er veldig vanskelig å faktisk vet hva som er blitt sendt og hva som ikke er blitt sendt. Og så TCP / IP bare spesifiserer en sammenhengende rammeverk der nett leseren og serveren din kan slags kommunisere med hverandre, bare sørge for at pakkene er alle her, og ingenting er tapt og alle data som du etterspør faktisk viser riktig. Alle OK på akkurat det veldig kort høyt nivå forstå? Kjølig. Så da vi kommer til å flytte til å snakke om HTTP, som er bare Hypertext Transfer Protocol. HTTP, er alt det er uansett en side eller filen er tilgjengelig på nettstedet ditt, serveren returnerer en HTTP statuskode som svar på forespørselen å sørge for at heller, oh, gikk denne forespørselen gjennom. Og alt er å vise riktig. Eller, oh, nei, 404. Noe gikk galt. Åh, jeg kan ikke vise. Alt som er er at uansett hva du prøver å få tilgang, bruke som brukeren prøver å få tilgang til, på internet-- bare å sørge for at du enten har lykkes vist hva det var eller ikke hell vist hva det var. Og så HTTP status kode gir akkurat deg et middel for å være i stand til å vite hvorvidt vidt det var vellykket eller ikke. Slik at for eksempel et eksempel forespørsel. Du kan se her er det vanligvis vanligvis fire linjer. Vi har en GET HTTP 1.1, som er like metoden forespørsel URL, protokollen versjon, navnefeltet, og feltverdi. Så ingen grunn til å fullstendig memorere noe her. Bare slags lest selv med hvordan disse ser ut. I dette eksempel er fremgangsmåten forespørselen URL er nettopp hva forespørsel du sender til serveren. Liker, hey, server, jeg virkelig ønsker å tilgang yadda, yadda, yadda, HTTP side. Protokollen versjonen er bare hva versjon verten eller serveren din bruker for å få tilgang til informasjon. Feltnavnet er nettstedet eller URL som du prøver å få tilgang, i dette tilfellet, www.apple.com. Og feltverdien er bare typisk navn, verdi. Og det kan være noen form for kombinasjon bokstaver eller tall eller hva. Så en typisk forespørsel, så hva maskinen faktisk sender til serveren som sier hei, du vet hva jeg trenger dette vises, det er den slags forespørsel at de faktisk mottar. Et eksempel respons på hva server ville sende tilbake til deg ville være ganske mye det samme, bortsett fra med en statuskode på toppen. Så 200, 2 0 0 er alltid statuskoden for OK. Liker, OK, gikk denne forespørselen gjennom. Du var i stand til å få tilgang alt riktig. Livet er godt. Livet er fint. Alt er helt bra. Og så dette bare forteller nettleseren din og serveren din, hey, alt er bra. Jeg fikk all den informasjonen jeg trenger. Kjølig. Men problemet er noen ganger problemer kommer opp når du have-- vare jeg tror Jeg snakket om duplikater. Du har mindre gode svar. Så for eksempel 404 er den Page Not Found. Du har noen ganger en Forbidden tilgang. Du har diverse andre statuskoder som jeg er sikker på at du har alle sett når du er prøver å gjøre undersøkelser på internett. Og nettleseren din gir deg den, nei, kan ikke få tilgang. Og du er som, vel, crap. Så bare ganske mye, det er noen ganske vanlige statuskoder. Kanskje bli kjent med hvilke som de er. Det morsomste som Jeg tror jeg har hørt of-- hvis du tilfeldigvis let opp alle av dem online, for noen grunn det er faktisk en reell statuskode kalt 418 Jeg er en tekanne. Jeg googlet der Opprinnelsen til dette var fra. Og tilsynelatende en April Fools ' Dag et par tiår siden, noen trodde det ville være morsomt å opprette en ny statuskode som heter 418 Jeg er en tekanne. Legitimt, navnet på denne kode kalles jeg er en tekanne. Jeg glemmer hvilken side du må gå til å faktisk gjøre dette displayet. Men tydeligvis, kan du faktisk få en statuskode på jeg er en tekanne eller annen måte gjennom å gjøre noe. Så det er hundrevis og hundrevis av statuskoder. Noen av dem gjør mer forstand enn andre. Men stort sett bare lest selv med de vanligste. Den forespurte enhet kroppen er kort og stout, tilsynelatende. Så noen ganger er det mer skremmende feil enn jeg er en tekanne. Men dette er en som jeg antar du slags håper å treffe. Men jeg tror ikke du vil. Alle gode på nettopp status koder, forespørsler, prosesser, making at informasjonen blir levert på riktig måte? Så nå skal vi overgangen inn av en morsom del av seksjonen i dag, der vi snakker litt om HTML. HTML, alt det er Hypertext Markup Language. Det er bare standard språk du bruker til å lage alle web sider på internett. Så hvilken som helst webside, hva er din favoritt nettside? Hva er din favoritt nettside? PUBLIKUM: [uhørlig]. ANDI PENG: Sorry? PUBLIKUM: Tumblr. ANDI PENG: Tumblr. Så Tumblr er skrevet i HTML. Og så vil vi faktisk gå gjennom og leke seg med noen av disse tingene senere. Stort sett alt du trenger å lære, å vite, å skrive HTML du kan sannsynligvis bare Google på internett. HTML, er det ikke et program som C der du kan opprette variabler og gjøre kule ting med det. Det er mer av bare, oh, dette er hvordan jeg vil at ting skal vises på min hjemmeside. Og jeg skal bare sette den i. Og det kommer til å style det. Så HTML, på en måte, er det akkurat som en formatering eller mal språk. Det er mye enklere. Det er mye lettere å lære, mye lettere å skrive i enn vanlig programmering språk, veldig lett, svært brukervennlig tilgjengelig og vennlig. Så vi faktisk kommer til å spille rundt, skriver våre egne sider i dag. Men før vi begynner, jeg bare ønsker å gå over noen korte beste praksis. Fordi HTML er en så enkel språk og fordi selv hvis du gjør et par ting som er galt, det noen ganger ikke kan merke, vi vil være sikker på at vi er faktisk å følge våre beste praksis å sørge for at ting som kan være å gå rundt, men er ikke alltid kommer til å ikke gå rett sørge for at de er minimert. Så ganske mye, sørg avslutt alle kodene dine når du skriver i HTML. Hvis du åpner en kroppen, sørg for at du er lukke den med en kropp et sted. Du ønsker å være sikker på at din web siden er validert ved hjelp det som kalles W3 Validator. Du kan bare Google som online, og det er en link til det. Og så du vil egen HTML, som er kodespråk fra din stil, som er den CSS språket som David demonstrert at vi er også kommer til å spille litt med foredrag. Kjølig. Så når du ønsker å kjøre HTML på CS50 apparatet, vi kommer til å kjøre en Programmet heter apache, som alt er det bare en innebygd webserveren at alle i CS50 har tilgang til. Vi kaller det apache50 bare fordi vi liker å kalle alt 50 i CS50. Så den måten at du starter CS50 web Serveren er ved å skrive på din kommando linje apache50 starte prikk. Og hvis du ønsker å avslutte den når som helst tid, trenger du apache50 ende ingen prikk. Og du bare trykke på Enter. Og det bør være på vei opp her snart. Jepp. Så jeg skal bare raskt gå over et eksempel på en virkelig kort nettside. Og vi kommer til å tilbringe som 10, 15 minutter å spille rundt å skrive våre egne nettsider. OK. Så her i IDE-- alle kan se det? Ikke egentlig. Her vil jeg zoome inn. Jeg har nettopp fått denne korte malen her med ingenting faktisk i det. Vi kommer bare til å raskt skrive en HTML-program der vi bare si hei til verden. Så samme som i C, nå er vi bare kommer til å gjøre det i HTML. Ønsker noen å faktisk bare prøve å gi meg det første du måtte sette i et HTML-dokument? Yeah. PUBLIKUM: Konsollene, den [uhørbart]. ANDI PENG: Jepp. Så noe som er veldig unikt for HTML som vi vanligvis tradisjonelt ikke støter på andre kommando linje nivå programmeringsspråk er at vi faktisk å spesifisere filtypen at dette kommer til å være på toppen av vår kode. Så i denne instance-- tror jeg som er den riktige kommandoen, ikke sant? Jepp. På toppen, du bare ønsker å inkludere bang DOCTYPE html i parentes bare å fortelle datamaskinen, hey, ser ut. Og HTML-dokument kommer. Og deretter hvordan vi ønsker å starte vår fil? Hvis vi ønsker bare å si hei, har en nettside som sier hei til verden, hvordan går vi om å bygge dette? Egentlig, la oss slå til Google. Og vi kan faktisk gjøre dette. Jepp. Det vi går. Så HTML. Som du ser, er faktisk min nettleser automatisk styling dette for meg. Samme som i C, når du skape en åpen klammeparentes, nettleseren din automatisk legger i en tett krøllete brace. Heldigvis elsker vår IDE til gjøre dette for oss også. Så vi kan nå slags form begynnelsen på en tag, og det kommer til å alltid fortelle oss til Husk å skrive på slutten av koden. Jeg tror dette må være aktivert. Og så ønsker vi å legge til, alltid, et hode som er tittelen. Vi vil bare kanskje kalle Dette hei, og deretter kroppen. Og der du går. Det er faktisk vår HTML-dokument. Slik at en hvilken som helst måte som HTML-dokumentet er alltid stylet in-- samme med int main annullert. Du alltid vil ha HTML en åpen og tett tag på toppen og bunnen av koden din. Du ønsker å ha et hode inni som inneholder tittelen, bare hva kommer til å vise kategorien av nett side, og deretter en kropp inni der faktisk vil vise innholdet av hva du ønsker å gjøre. Så hvis du ønsket å faktisk kjøre dette, kommer jeg til å zoome ut igjen. Du kan faktisk begynne apache50 starte prikk. Kjølig. Og slik som du kan se, nå denne linken har poppet opp. Det sier området er nå tilgjengelig på noen link nedenfor. Slik at alle våre IDE har done-- ikke IDE, sorry-- yeah, vår IDE har gjort er å lage en web- adresse hvorpå alle våre web-sider kan nås på serveren. Så la oss ta en titt her. La oss klikke på dette, gå til hello.html. Og du ser en veldig enkel nettside for hello world. OK. Vi blir faktisk kommer til å like har everyone-- ja, hva skjer? PUBLIKUM: Jeg har en grunnleggende spørsmål. ANDI PENG: Yup. PUBLIKUM: Hvordan lagrer du filen som en HTML? ANDI PENG: Yeah. Så hvis jeg skulle lage en ny fil, hvis jeg gjør New File, Untittle, hvis jeg gjør det, section.html, boom, det er alt jeg har å gjøre. PUBLIKUM: [uhørbart]? ANDI PENG: No. PUBLIKUM: [uhørlig]. ANDI PENG: No. PUBLIKUM: [uhørlig]. ANDI PENG: Yeah. Ganske mye, utvidelse på filen som er inni IDE, som forteller datamaskinen, som forteller leseren, hei, se opp. Dette kommer til å bli kode skrevet i dette språket. Så for eksempel i Microsoft Word, hva gjør alle Word-dokumenter slutte med, hva forlengelse? .doc eller .docx, ikke sant? Alle som ikke spesifiserer til operativsystemet, hey, du har et Word-dokument som kommer opp. Åpne den med Word. Samme med PDF-filer. Det vet, oh, jeg trenger å åpne filen med Adobe Reader eller Adobe Acrobat. Og så utvidelser betjene samme måte som i datamaskinen. Hvis du angir din kodesett å bli navngitt HTML, så den vet, oh, du har HTML-kode. Jeg kommer til å behandle det som html-kode. Så det er super smart i den forstand. Så alle sammen, la oss ta 10 minutter og bare lage våre egne nettsider. La oss legge til i den vakre ting. Føl deg fri til å si hva du vil. Jeg vil bare være sikker på at alles servere kjører riktig før vi frigjøre deg inn i PSet. Fordi hvis serverne ikke kjøre for PSet, som vil være virkelig, virkelig ille. Jeg skal bare flyte rundt og se hva alle jobber med. Hvordan går det? PUBLIKUM: Jeg bare snudde på min datamaskin. ANDI PENG: Det er OK. PUBLIKUM: [uhørlig]. ANDI PENG: Bare IDE. Yeah. PUBLIKUM: [uhørlig]. ANDI PENG: Det er OK. PUBLIKUM: [uhørlig]. ANDI PENG: Helt greit. Er alle tilgang deres web server OK? Er apache50 kjører OK? Jeg tror at i noen av de andre delene, vi hatt problemer med folk ikke å kunne få tilgang til serveren. Yeah. Så du bare kjøre apache50 plass starter plass periode. PUBLIKUM: [uhørlig]. ANDI PENG: Yup. God? PUBLIKUM: [uhørlig]. ANDI PENG: Oh, OK. Så du skal ha en plass. Så apache50-- PUBLIKUM: jeg gjorde. ANDI PENG: --start plass. PUBLIKUM: Å, plass prikk. ANDI PENG: Yup, plass prikk. Det du går. Så da hvis du har en HTML-side opprettet, så kan du bare gå direkte til koblingen at det spesifiserer. Og du bør være i stand til å få tilgang til det. Alle kunnet tilgang til sine nettsider OK? PUBLIKUM: [uhørlig]. ANDI PENG: Å, det er OK. PUBLIKUM: [uhørlig]. ANDI PENG: Yeah. Jeg tror du faktisk kan åpne det innenfor din nettleser, nettleser og ikke bare din IDE nettleser. Ja, jeg tror hvis du kopierer og limer den. PUBLIKUM: Og så hvordan slår vi den av? [Uhørbart] ANDI PENG: Ja, gjør du apache50 stoppe uten punktum. Jepp. PUBLIKUM: [uhørlig]. ANDI PENG: Med ingen periode. Yeah. Det vi går. Jepp. Vi skaper våre egne nettsider. PUBLIKUM: Oh, kult. ANDI PENG: Yeah. PUBLIKUM: Jeg har et spørsmål. Så apache 50-- ANDI PENG: 50, ja. PUBLIKUM: [uhørlig]. ANDI PENG: Hva? Det er merkelig. Se, det var litt av problemet som skjedde før. OK. Se meg etter pkt. Fordi vi har noen problemer med serveren. Og du ønsker å gjøre Kontroller at serveren er kjører før du starter PSet. Fordi du kommer til å trenge det. Yeah. Er det noen andre som ikke har vært stand til å få deres server du skal begynne? For de av dere som ønsker å legge til ekstra stil til websidene dine, vi kan faktisk gjøre hva David gjorde i foredraget også, som er å lage en ekstra stil ark, som er en prikk CSS, Cascading Style Sheet og faktisk bare legge det inn. Så for eksempel, jeg har nettopp opprettet ganske mye nesten nøyaktig samme David gjorde i forelesningen. Du kan stort sett bare gjøre kroppen. Du har det som kalles koder der du kan bruke på IDE uansett seksjon du ønsker innenfor ditt Selve til HTML-side. Så kroppen på siden, du kan gjøre tekst sluttar sentrum. Og så skal jeg kreativ en kode som heter topp inne som jeg ønsker disse tingene til skje, tildele en større pikselstørrelse for skriften. Jeg ønsker skriften vekt til å være fet. Og jeg vil fargen til være blå, bare vilkårlig verdier som jeg bestemte meg for å velge. Jeg kan lage en annen tag kalt midten. Skriftstørrelse, gjør det litt mindre. Og så kan jeg lage en annen tag kalt bunnen der jeg vil ha skriftstørrelsen å være enda mindre fortsatt. Og så ganske mye dette er bare eksempel av kildekoden eller kilde stilark at det er veldig enkelt å bare Google. Hvis du sier, oh, jeg vil ha min font å bli kursiv og mørk grønn, Du kan sikkert Google, og da vil den fortelle deg de riktige kodene eller IDer å lage. Og så den måten at du ville faktisk slags har dette i et HTML-dokument eller bruke det er alt du trenger å gjøre her er på hodet legge en link til stilarket. Så du kan bare koble href equals hva navnet på stilarket er. Og da forholdet er et stilark. Så i løpet av noen HTML-dokument, så lenge du tar med denne dot CSS arket, du bør være i stand til å få tilgang og har de egenskapene der. Så for eksempel, her har jeg bare skape et annet eksempel nettside. Dette er velkommen til CS50 seksjon Tirsdager fra 02:00 til 03:30 med meg. Og så har jeg lagt et nydelig bilde som vi potensielt skal kunne se. Så hvis du tar en titt her, hvis du går til style.html, vi laget en nettside med kattunger. Fordi kattunge er awesome. Så legger et bilde er bare img src link. Ganske mye, hvis det er noen form for funksjon du ønsker å legge til din website-- så la oss si, du vil legge til en meny eller et søkefelt eller lignende en image-- bare Google hvordan du gjør det. Og du bare slenger i dette formatet. Og du kan bare pen mye bare legge det inn. Det er veldig, veldig lett. Vi skaper vår egen websider akkurat nå. Hvis du vil-- PUBLIKUM: [uhørbart] ANDI PENG: Sorry? PUBLIKUM: [uhørlig]. ANDI PENG: Oh, det div er bare en divisjon forteller meg at, åh, jeg har en viss seksjon kalt midten der jeg søker min CSS tag, og deretter min andre divisjon med bunnen. Det er alt som er å fortelle deg. Fordi det er hyggelig å holde ting ryddig i orden, slik at programmet vet hvordan akkurat å kjøre. Og tror jeg kan kopiere lime dette inn i min faktiske leseren også. Det bør være i orden. Yeah. Jippi. Så hvis alle ønsker å bare prøve å opprette en nettside, vi tar en annen to-tre minutter. Jeg vil bare være sikker alles servere kjører og alle har en ide om hvordan du gjør det. Hvis dere ønsker å ta ut datamaskinene. Fortsatt ikke fungerer? PUBLIKUM: Jeg er bare [uhørbart]. ANDI PENG: Kanskje prøve å oppdatere 50 også. Yeah. PUBLIKUM: [uhørlig]. ANDI PENG: Yeah. Så den måten at du starter en ny webserver på IDE er bare gjøre apache50 plass start plass prikk. Jeg ville bare være sikker alles servere kjører OK. PUBLIKUM: Her, på terminal? ANDI PENG: Yeah. PUBLIKUM: [uhørlig]. ANDI PENG: Apache. Egentlig tror jeg du er kjører noe allerede. Ja, du er faktisk kjører en annen server. Ja, du er god. Så lenge det fungerer, er du OK. PUBLIKUM: OK. ANDI PENG: Det er to- måter å kjøre servere. Så så lenge en av måtene fungerer, er det all right. Vi tar et minutt bare for å slags slutt opp den siste finpussen av hva nettside dere ønsket å gjøre. Er alle som jobber forresten? Alles servere er kjører foruten for deg? Vi vil finne ut av. Og HTML er ganske enkel. Så jeg tror vi er alt bra. Yeah. Jeg vil komme tilbake. PUBLIKUM: [uhørlig]. ANDI PENG: OK. PUBLIKUM: Så det er bare begynte å laste opp. ANDI PENG: Ingen grunn til bekymring. Så HTML, det er kildekoden som vil være online etter pkt. I tillegg har David en hel gjeng på nettet også. Bare slags blikk over det å se hvordan HTML-sider er skrevet. Det er ganske enkelt. Noe du ikke vet, har du ganske mye bare Google og du er flink. Jeg vil bare være sikker på at serverne kjører. PUBLIKUM: Betyr det gjøre dette oftere? ANDI PENG: Det har aldri skjedd med meg. Jeg visste ikke at det kan også ligge i dvale. PUBLIKUM: [uhørlig]. ANDI PENG: Jeg tror everyone-- mine har aldri hibernated før. Og jeg vet ikke hvorfor. Det er rart. PUBLIKUM: [uhørlig]. ANDI PENG: Er din dvale? PUBLIKUM: [uhørlig]. ANDI PENG: Yeah. PUBLIKUM: Det er OK. Så når det er åpent. ANDI PENG: OK. Vi skal ta med noen server problemer etter seksjon. Du bør være i orden. Selv om, vil du sørge for at du få dem løst før du reiser. Fordi hvis serveren din ikke kjører, da er du ikke kommer til å være i stand til å gjøre det PSet, som noen del av PSet. Så du vil være sikker at det fungerer. Kjølig. Greit. Si farvel kattunger. Jeg brukte lang tid på å lete etter som kattunge bilde for å sette på. Så, anyways. PUBLIKUM: [uhørlig]. ANDI PENG: Sorry? PUBLIKUM: [uhørlig]. ANDI PENG: Jeg tror det er på nettsiden. I likhet med spec? PUBLIKUM: [uhørlig]. Jeg tror spec er bare online i uke syv. Jeg tror det kalles pset6, selv selv om vi er på uke syv, som er litt databehandling. PUBLIKUM: Men jeg mener hvis du ønsker å se at-- hvis du ønsker å trekke opp vår versjon av nettstedet fra vår sever? Så som server.c er PSet, ikke sant? Hvis du ønsker å se på dette, som hvordan det sjekker ut? ANDI PENG: Åh, så egentlig den PSet, er alt vi gjør her er implementing-- her, Jeg skal gå over dette kort. Så for alle som har nettopp fått §, dere er på hell. Det er veldig lite materiale å faktisk dekke i dag. Jeg kommer bare til å tilbringe den neste 20 minutter å gå over PSet hjelp. Fordi det er en del nyttig funksjoner som vil hjelpe ditt liv. Og forhåpentligvis vil vi være ute av her i som 20 minutter. OK. Så pset7 er galt. Selv om vi er på uke sju, det er faktisk pset6. Jeg kommer til å endre det. Alt vi gjør i pset6 er å skape en webserver. Det høres super skummelt. Og spesielt for de av dere som allerede har sett på fordelingskode, det er mye kode, mye kode. Men er helt OK. Fordi nitty gritty del av faktisk lage den serveren er utført av oss. Alt du egentlig spurte å gjøre i denne PSet er bare å gjøre noen streng manipulasjon i fil I / O. Det er faktisk som ganske enkel. Så når du først laste at-- som her har faktisk allerede lastet ned den PSet og tatt en titt? Greit. Yeah. Det er sånt som 500 linjer med kode at du kommer til å være som, hva skjer? Og det er helt greit. Sørg for at du ser på walk-throughs. Fordi David og-- Jeg vet ikke. Jeg tror ikke det er Zamyla, i denne. Men jeg tror noen andre walk-throughs er ganske nyttig i forhold til bare fortelle deg hva som skjer inne i koden din. Og det er helt OK. Fordi de fire funksjonene som du er bedt om å gjennomføre faktisk har null å gjøre med selve serveren. Alt de trenger å gjøre er bare parsing forskjellige strenger, søke gjennom strenger, å sørge for at ting blir gjort hva de skal gjøre. Slik som uttrykker, det finnes noen svært, svært nyttige funksjoner, spesielt for streng manipulasjon, at vi bør alle gå over at jeg trodde jeg hadde være svært nyttig for dere å lære før du prøver PSet. Og de er alle inneholdt innenfor string.h bibliotek. Det er nok mer nyttig funksjoner Jeg har ikke tatt med her, fordi jeg heller aldri bruke dem eller kanskje jeg bare ikke vet at de eksisterer. Føl deg fri til å titte gjennom student.h. Fordi det kommer til å være mye funksjoner som er svært nyttige. Så de seks som jeg bruker mest i min PSet da jeg gjorde det denne siste uken var strtok, strchr, strrcher, strstr, strcasecmp, og strcpy. Og så de to siste kan virke ganske kjent for de fleste av dere. Str tilfelle sammenligne, alt den gjør er å sammenligne strenger å sjekke dem for likestilling, inkludert tilfelle. Og strcpy bare kopierer en streng i en buffer. Og så de to skal virke veldig kjent for dere på dette punktet. Fordi vi har brukt dem mye, spesielt for de siste psets. Men de fire første kanskje du ikke har sett til nå. Men jeg kommer til å bare gå gjennom dem. Fordi de kommer til å gjøre livet virkelig, virkelig lett for-- ikke lett, men mye enklere for denne kommende PSet. OK. Så char * strtok, er denne funksjonen definisjonen for denne funksjon inngår i strengen, h bibliotek. Dersom du får en inngang på char * strengen, som er bare en streng, eller en konstant char * deliminator, delim for kort, alt det gjør er å bryte den større streng inn i en serie av hva vi kaller tokens atskilt av en viss verdi. Så på en måte, hvis jeg skulle gi du section.7.php, dette er en streng. Så det ville være hvis jeg skulle gå i dette som min str, min char * str, Hvis min deliminator var prikk, alt dette ville gjøre er å søke gjennom streng. Og første gang den ser en prikk, ville det bare tilbake til pekeren til den siste token funnet i strengen før dette. Så det ville gå rett her. Og det ville bare gi meg 7.php. Og hvis jeg skulle ringe fungere en gang til, det ville gi meg bare php. Og så all denne funksjonen gjør er å bryte ned den større streng i mindre strenger avhengig på det du leter etter. Og så for eksempel i utseende up funksjon Hvis du ønsker å se på hva visse tegn skje eller hvis prikker skje eller utvidelser skje, Denne funksjonen vil være ganske nyttig. Yeah. Ingen bekymringer. Dette vil alle be-- ja, hva skjer? PUBLIKUM: Så i første linje, hvis vi bruker dette eksempelet hva ville vi sette inn i det? ANDI PENG: Yeah. Du ville bare ringe en strtok string komma delim. Og strengen er lik section.7.php. Og da er du delim kan være lik bare dot. PUBLIKUM: OK. ANDI PENG: Yeah. Bare sånn. Alle disse funksjonene er nokså lignende når vi går gjennom dem. De gjør bare litt forskjellige ting. Men de kommer alle til å gjør livet mye enklere. Andre funksjonen, dette er som super, super, super viktig, er the-- holde opp. Oops. Strchr søker etter den første occurrence-- faktisk, ja. Strchr er den funksjonen som Jeg definitivt gikk over. Så ignorere hva jeg sa for den første funksjon. Det er faktisk kalt strchr. Så hva ville skjedd her er hvis du fikk en streng i en char c, det ville bare gi du uansett hva det var. Yeah. Så tenk på det som str, som er en streng, og chr som røye. Så alt du prøver å gjøre er å søke for hvor en char er inne i en streng. Og så den søker etter den første forekomst av tegnet c i strengen str. PUBLIKUM: [uhørlig]. ANDI PENG: Yup. Og så hvis det ikke finner det, det kommer til å returnere NULL. Så noe som kommer til å bli veldig nyttig for dere i å gjøre det PSet hvis, si, var du ute etter en forlengelse som en .docx for en Word dokument eller en PDF til et PDF-dokument, du kan slags bruke den til å se for alt som er etterpå hver gang du ser en prikk, ikke sant? Og så ganske mye, hvis du kjøre som gjennom funksjon, hvis den returnerer NULL, da vet du at det fant ikke det dot, noe som betyr at dette åpenbart ikke er en gyldig filtype. Eller hvis den returnerer noe, så vet du det kommer til å gå tilbake hva som står faktisk etter utvidelsen. Så de av dere som hadde begynte å se gjennom oppslag og analysere, denne funksjonen er kommer til å være super nyttig. Så vi blir faktisk kommer å demonstrere ved hjelp av denne. Hvorfor ikke dere prøve å skrive en funksjon bool setning char * s som bare returnerer true hvis s er en setning og falsk ellers. Så hint, du kommer til sannsynligvis bruke strchr. Eller du søker bare i streng for et bestemt tegn. Og så i en setning, det som skiller en setning fra et ikke-setning, hvilke konkrete karakter? PUBLIKUM: En plass. ANDI PENG: En plass, ikke sant? Og så hva gjør vi sannsynligvis kommer til å ønsker å gjøre innenfor denne funksjonen her? PUBLIKUM: [uhørlig]. ANDI PENG: Vi kommer til å ønske å strchr streng for utseendet på plass. Fordi hvis den returnerer noe, så vi vet at dette må være en setning. Det betyr at vi må ha en plass i denne strengen. Hvis det ikke er plass, så vet vi at, hei, antar det ikke er en streng. Det er nok bare en veldig lang ord. Så jeg skal gi dere et par minutter på å skrive denne funksjonen. Yeah. PUBLIKUM: Fikk du denne strengen fra brukeren? ANDI PENG: Yeah. Så dette er bare en funksjon. Så tenk deg inni hovedfunksjon du allerede have-- la oss gå her. OK. Så jeg har skrevet dette programmet der Jeg har min hovedfunksjon der Jeg har nettopp opprettet to strenger. Den første er Hi, my name er Andi-- klart, en setning. Min andre er bare Andi, helt klart ikke dømme. Og så jeg kjører begge disse strenger gjennom denne funksjonen. Jeg ønsker dere å skrive kaldt setning. Og jeg lagrer disse verdiene, og så bare skrive dem ut. Så tenk at brukeren er kommer til å passere i en streng. Og så kommer dere til hovedsak finne ut om det er en setning eller ikke og returnerer sant eller usant tilsvarende. Hvis dere ønsker å gi en tommelen opp eller heads up, hode nikk, er noen er klar til å starte dette, det ville være bra. Kanskje som 30 sekunder? Greit. La oss se om du kan prøve skriver denne funksjonen. Så pseudo coding-- jeg bare kommer til å slags gå gjennom dette akkurat nå. Ganske mye, vi vet det funksjon som vi trenger å bruke. Vi kommer til å kalle den funksjonen på vår streng og søk etter en plass. Hvis den gir noe, så må vi vet det, helt klart, dette er en setning. Fordi det er plasser. Vi deretter skal returnere true. Else, vi kommer til å returnere false. Er det noen som ønsker å gi meg den første linjen med kode at vi faktisk kommer å bruke til å skrive dette? Det er faktisk den vanskeligste linje med kode i tillegg. Yeah. PUBLIKUM: Hvis strtok S- ANDI PENG: Just strchr. PUBLIKUM: [interposing VOICES] områder som ikke er lik til null. ANDI PENG: Cool. Helt riktig. Alle forstår at første linje? Vi kommer til å kalle strstr, som er en funksjon som søker strengen s for trekullet plass. Og hvis den finner det, kommer det til å returnere en peker til hvor det er. Hvis den ikke finner den, det kommer til å returnere NULL. Så hvis det returnerer noe annet enn NULL, så vet vi at det er funnet en plass. Gir det mening? Kjølig. Greit. Så hvis vi vet at det er funnet en plass, hva vi ønsker å gjøre? PUBLIKUM: Retur sant. ANDI PENG: Yup. Return true. Og så, noen ønsker å avslutte funksjonen for meg? Yeah. Annet, bare sånn. Og prøv å samle dette. Jepp. Så som dere kan se av utganger, husker Booleans i C er alltid uttrykt i binær. 1 er sann. 0 er falsk. Hvis vi skulle kjøre denne funksjonen på streng en, som er Hei, mitt navn er Andi-- klart, en sentence-- resultatet skrives ut til en som er sant. Den andre, som er like et ord, resultat skrives ut til 0, noe som er usant. Alle klar slags på hvordan denne funksjonen ble skrevet? Yeah. PUBLIKUM: Kan vi også gjøre, i stedet for ikke like nei, lik lik 0, slik at det er lik? ANDI PENG: No. Fordi strchr er en funksjon. Jeg kommer til å tilbake til dette. Så hva er returtype av vår strchr funksjon? PUBLIKUM: Oh, OK. Eller NULL. ANDI PENG: Yeah. Det er en char * som forteller meg at uansett denne funksjonen kommer til å vende tilbake, det kommer til å være en peker. Enten pekeren kommer til å være peke på hvor det er funnet det, eller det kommer til å gå tilbake en peker til NULL. I begge omstendighet, kommer det til å returnere en peker til noe. Og så hvis du var å likestille dette tilsvarer, er lik, 0, du kommer til å få en samling feil. Fordi det kommer til å returnere en peker. Og du kommer til å prøve å sammenligne en peker til et heltall. Og datamaskinen er ikke kommer til å like det. Ja, akkurat. Kjølig. Alle gode? Og for det andre, vi kommer til å gå over en funksjon som heter strstr. Ingen grunn til bekymring dersom disse funksjonene er forvirrende deg. De er forvirrende meg. Som sådan, kunne dere har sett, de alle høres ganske mye det samme. Bare når du er forvirret, trekke opp string.h biblioteket. Og dere kan sortere der ens som. Så strstr, alt som gjør søk en streng for en helt annen streng. Så hvor strchr bare søk for en enkelt karakter, strstr søker etter en hel streng. Så jeg ønsket å se på, vet jeg ikke vet, Hei, mitt navn er Andi. Og min beste venns navn er også Andi. Hvis jeg ønsket å se etter i denne setning for hele ordet av Andi, min nålen ville ha vært uansett hva du leter etter. Og din høystakken er uansett du leter etter den i. Så hvis du leter etter en spesifikke ord i en setning, det ordet kommer til å være din nål. Og så setningen selv kommer til å være din høystakk. Og slik er det bare søker den første forekomsten av strengen nålen i strengen høystakken. Den returnerer pekeren til den første forekomst. Unntatt, husker i dette tilfellet, er det første forekomst av hele strengen at du søker for, ikke bare et tegn. Og så dette er nesten det samme som funksjonen vi nettopp gjorde, bare med litt mer spesifisitet. Fordi du søker etter mer enn bare ett tegn. Og bruken er nøyaktig samme som den vi nettopp gjorde. Alle OK med dette? OK. Siste som vi kommer til å gå løpet er strrchr, som ikke er forveksles med strstr eller med strchr. strrchr har en ekstra r der inne. Vær forsiktig når du skriver. Du kan finne deg selv inkludert en ekstra r eller ikke inkludert en r, og deretter din funksjon ikke fikk gå på jobb. Og du kommer til å bli forvirret. Vær forsiktig så du stave alle disse funksjonene riktig. Så strrchr er den eksakte samme som strchr bortsett fra den søker etter ikke første forekomst av en bestemt karakter, men heller den siste forekomsten. Og så, i den forstand, det er nesten nøyaktig det samme. Men i stedet for å flytte fremover i en streng, du kommer til å være i bevegelse bakover i en streng. Akkurat det samme, du er bare søking i en annen rekkefølge. Og så dette kan være super, super nyttig for din lookup funksjon, først funksjonen på din PSet. La oss late som vi trengte å skrive en funksjon av tomrommet forlengelse der vi passere en konstant char * filnavn, bare en streng, et filnavn som tar inn det navnet og utskrifter ut forlengelsen av denne filen. Så for eksempel, hvis jeg skulle passere i strengen av pset7.zip, det kommer til å skrive ut bare utvidelsen, som er .zip. Og dette ville fungere for noen form for forlengelse, .docx for Word eller PDF for en PDF fil eller HTML for en HTML-fil. Ganske mye, skriver en funksjon som kan gjøre det. Jeg er faktisk kommer til å bytte over til IDE. Det er ikke load-- der vi går. Så alt jeg har gjort her er opprettes en char *, en første streng, kalt pset7.zip. Jeg kommer til å zoome inn. Jeg har opprettet en ekstra streng kalt finalpaper.docx. Og skrive meg en funksjon som når kalt kommer til å bare skrive ut de filtyper. Kanskje ta et par minutter til å tenke om hvordan du skal gjøre dette. Litt mer utfordrende enn den siste, men bruken er nesten akkurat det samme. Yeah. Så skriv en funksjon kalt forlengelse at hvis jeg gi deg navnet på en fil, hvis jeg skulle gi deg pset7.zip-- jeg Vil du skrive ut bare den .zip. Hvis jeg gir deg lyst finalpaper.docx, bare skrive ut .docx, bare utvidelsen av hva fil. Dette faktisk bare tar to linjer med kode. Så prøv å se om du kan kanskje gjøre det i den. Egentlig bare det tar en linje med kode. Men to linjer er nok mer standard. Hvilken funksjon er vi sannsynligvis skal du ønsker å ringe? PUBLIKUM: strrchr. ANDI PENG: strrchr, høyre. Fordi vi ser fra høyre til venstre. Jeg ville ikke gi dere et eksempel som dette, men hvis jeg ga deg et eksempel som www.apple.com og jeg ville bare .com, ville det være et eksempel på hvor du ønsker å ringe siste instans av perioden, og ikke den første, ikke sant? Hvis du var samtalen strchr, det ville har gitt deg apple.com. Hvis du heter strrchr, det ville ha gitt deg .com. Og så vær forsiktig om hvilke ways-- i mitt eksempel, kan du sannsynligvis kunne ha nettopp skrevet den ved hjelp strchr, siden det er bare en prikk. Men i andre tilfeller det kan ikke være tilfelle. Og så prøver alltid å designe koden din godt, så at-- ja? PUBLIKUM: Så i eksempel du nettopp sa, når du strrchr det ville gi deg .com eller bare komme? ANDI PENG: Det vil gi deg .com. PUBLIKUM: OK. ANDI PENG: Yeah. Den peker til der den fant det. Yeah. 30 sekunder kanskje? Yeah. Alle gode eller kanskje litt mer tid? Håndsopprekning? Vis hoder? Kjølig. Alle som ønsker å gi meg den første linje med kode for dette programmet? PUBLIKUM: [uhørlig]. ANDI PENG: Så først av alt, la oss kanskje bryte dette ned. Så hva er avkastningen type strrchr? La oss gå tilbake. strrchr, hva er avkastningen type? PUBLIKUM: Char * ANDI PENG: Det er en char *, ikke sant? Hvilket betyr at du sannsynligvis kommer å ønske å opprette en char * til slag av butikken når det er tilbake til, ikke sant? Fordi hvis du ringer funksjonen strrchr, det kommer til å gi deg en peker til hvor det funnet at siste periode, ikke sant? Men du kommer til å ønske å lagre det et sted, ikke sant? Og så hvordan koden vi gjør dette inn i vårt program? PUBLIKUM: Du gjør røye * [uhørbart]. ANDI PENG: Jepp. PUBLIKUM: [uhørlig]. ANDI PENG: strrchr. Yeah. Oh, savnet en r der. PUBLIKUM: Filnavn [uhørbart]. Hva er dette? Åh, det er bare s. ANDI PENG: Åh, det er bare s. Yup, sorry. Min feil. Eksempler samsvarte ikke. PUBLIKUM: Og så dot. ANDI PENG: Yup. Vær forsiktig når dere are-- her, la meg zoome inn. Det vi går. Vær forsiktig når dere skriver, spesielt når du gjør bare en røye. Det er veldig lett å tilfeldigvis bare gjøre anførselstegn snarere enn single. Det vil ikke fungere. Kompilatoren kommer til å klage. Og din funksjon er bare ikke kommer til å kjøre. Og så vær forsiktig når du du gjør ting med tegn at det er enkle anførselstegn. Og det gjør denne linjen av kode fornuftig for alle? Vi skaper en char * pekeren. Fordi strrchr avkastning noe av type pekeren. Og så vi kommer til å kalle strchr på s, som er strengen, filen nevne at vi kjører i. Og vi leter etter den siste forekomst av en periode, noe som er bare ett sitat dot enkelt tilbud. Yeah. PUBLIKUM: Når skal vi bruke anførselstegn og når bruker vi apostrof? ANDI PENG: Yeah. Så anførselstegn er alltid brukes når du har en streng av mer enn bare en. Så hvis du gjør strstr, som er den du søke en streng for streng, du ville passere det i anførselstegn. Men helst er det bare en enkelt karakter, du ønsker å gjøre enkle anførselstegn. Det er en god ting å huske på. Så nå som vi har vår pekeren, hva gjør vi med det? Jeg ber dere å skriver det ut, ikke sant? Så [uhørbart], vil du gi meg linje med kode? PUBLIKUM: printf-- ANDI PENG: Yeah. PUBLIKUM: --du trenger et sted holder. ANDI PENG: Yup. PUBLIKUM: Print stedet holderen. Jeg vet ikke hva stedet holderen er, men peker på det. OK. La oss hoppe over det for nå da. PUBLIKUM: Og så comma-- ANDI PENG: Pointer, ikke sant? PUBLIKUM: Pointer, yup. ANDI PENG: Så snill av et lurespørsmål, har å gjøre med pekere og strenger som vi har på en måte snakket om allerede. Hva slags sted holderen gjør vi trenger for en peker til en char *? PUBLIKUM: [uhørlig]. ANDI PENG: Yeah. Det er enklere enn dere tror det er. PUBLIKUM: String? ANDI PENG: Det er bare en streng, akkurat. Fordi huske strenger vet egentlig ikke eksisterer. En char * er nøyaktig samme som en streng. Og så egentlig dette s er hva burde vært brukt hele tiden. OK. La oss se om vi kan prøve å kjøre dette. La oss gjøre en make forlengelse. Kjølig. Dere se hvordan jeg passerte i psset7.zip og finalpaper.docx, og det skrives bare ut .zip og .docx? Gir mening? OK Så jeg tror i ditt utseende opp funksjonen i PSet du er kommer til å bli spurt om strengen har en viss avslutning, du må gi en viss feilkode. Og så dette blir ganske forferdelig. Fordi hvis du kan finne ut hva utvidelsen er, du kan deretter sammenligne det forlengelse for å se om det samsvarer med med en viss forlengelse. Og så kan du gå tilbake en feilmelding, ikke sant? Yeah. PUBLIKUM: Så gjør vi ikke må legge til 1 eller noe? Pekeren vil gå til the-- ANDI PENG: Nope. PUBLIKUM: --point etter det. ANDI PENG: Yeah. Den peker nøyaktig til hvor forekomsten var. Så for eksempel her, vi er søker etter den perioden. Så det kommer til å gå tilbake en peker til perioden. Og så kommer det til å skrive ut ved å gå ut på perioden. Slik at du ikke trenger å legge til en. Selv om det er helt greit å, hvis du er usikker, å bare slags av teste det ut selv. Bygge et prøveprogram. Test det ut selv og se hvor det er utskrift. Det er heller ikke en dårlig måte å gjøre det. Kjølig. Og det er ganske mye alt Jeg hadde for dere i dag. Vi gjorde mye PSet ting i dag. Så når du er i tvil, som Jeg sa alltid se opp den string.h bibliotek for dette PSet. Det kommer til å bli mye funksjon i det som kan være nyttig. Noen kan ikke være nyttige. Jeg vet egentlig ikke. Wade gjennom det, det er en hel haug av dem. strstr, strchr, strrchr er super, super nyttig, samt de strcpys og strcasecmps at vi allerede har brukt. Det er bare masse rote rundt med strenger, avgjøre om de er like, å få ting ut av strenger, og å kunne åpne filene korrekt. Det er mye av fil I / O. PSet er egentlig ikke så ille. Du kommer til å ta en ser på det, laste den ned, og se en hel haug med kode. Ingen fare, den koden du faktisk skrive er ikke dårlig i det hele tatt. Hvis noen har problemer med sine server, kom og se meg etter pkt. Beklager nok en gang for ikke bringe godteri til Halloween. Jeg vet ikke hva som var galt med meg. Men vi vil ha dobbelt godteri neste gang. Og lykke til i din PSet denne uken. Jepp.