JASON Hirschhorn: Tere, igaüks, et 6. nädal. Mul on hea meel teid kõiki näha elus ja terve pärast Quiz 0, sest ma tean, et oli natuke karm. Aga õnneks, siis kõik tegid uskumatult hästi. Ja nii see on imeline. Kui sa oled minu jagu, olen andnud kõige te tagasi oma viktoriinid juba. Paar teist, Ma kohtun peale tunde. Ja kui sa oled pikendamine õpilane ja te ei ole saanud oma viktoriin tagasi veel, oma TF ilmselt kallal ja liigitamiseks, ja saad selle tagasi Teile peatselt. Nii et minu laiendamine õpilastele, kes on vaadates kohe - loodetavasti elada - Ma saan oma viktoriinid varsti samuti. Meie tänase päevakorra on järgmine. Esiteks, me läheme üle mõned ressursse, et CS50 annab sulle. Me läheme üle Quiz 0 järgmine, ja Ma vastan kõikidele küsimustele keegi on umbes erilisi probleeme. Ja siis me läheb üle Faili I / O ja lahendamist 5. Need kaks viimast teemat võtab moodustavad suurema jao täna. Panin selle nimekirja iga nädal nagu meeldetuletus teile kõigile, kuid põhiliste jagu, meil on ainult 90 minutit - me ei suuda katta kõike, mida ma Oleks tore, et katta kutid. Aga meil on ton ressursside sa lähtuda, kui sa saad teada, materjali ja töö kaudu Teie probleem seab. Meeldetuletus, et mul on-line tekst kast, mis on loodud teie jaoks täita, kui te mingit tagasisidet minu jaoks, nii positiivseid kui ka konstruktiivne, umbes osa. See link asub siinsamas. Nii et palun, võta hetk, kui teil on tagasisidet, kas ajal lõik, või pärast, või pärast seda, kui video online, et anna mulle oma tagasiside. Ma tõesti hindan kõik ja kõik see. Nii et ma olen olnud võttes väikesed vestlused palju mu üliõpilaste kogu nädala - kui ma käsi tagasi viktoriinid, räägime muidugi näha, kuidas sa teed. Ja üks teema on tulnud üle ja üle rääkides - in eriti - probleem seab. Ja ma olen kapseldatud, et teema laual praegu. Sisuliselt pole vahet vahel keerates midagi, mis on teha õigesti ja midagi see on tehtud hästi. Enamik inimesi on teinud fantastilise poolest õigsust - 5-või 4 on kõik psets. Enamik inimesi ei saada need kõik aega. Kuid lihtsalt sellepärast, olete teinud midagi õigesti ei tähenda, et sa oled teha midagi nii elegantselt või tõhusalt, või kui puhtalt kui võis seda teha. Ja see, mida disain - ja vähemal määral stiil - telgedel eest. Nii et ma olen surudes teile kõigile ja teiste TF ajavad teid, mitte ainult kord asju, mis on õiged, kuid keera in asjad, mis on kodeeritud hästi. Ei tee mittevajaliku silmad, ei arvuta muutujad kui sa ei pea. Näiteks vaadates tagasi lahendamist 4, kui paigutamise tellised ekraan, igal real - iga tellis antud rida on sama y-koordinaat - samal kõrgusel kooskõlastama. Nii et y-koordinaat ei pea arvutatakse sees sisustus nested loop, et te tõenäoliselt kasutada panna need tellised ekraanil. See vaid tuleb arvutada iga kord, kui sisse rea või kolis maha järjest. Nii öelda, kas seal on 10 telliseid rida iga telliskivi võib olla sama y-koordinaat, ja et y-koordinaat saab lihtsalt arvutada korraga neist. See ei pea olema arvutatud 10 korda ega selle arvutamise vajadus juhtuda tegelik funktsioon kõne - uus gracked funktsioon kõne. Nii et kui see oli natuke segane sa rohkem üldmõistena, asju, mis ei pea juhtuma iga kord sa lähed läbi loop ei tohiks olla asetada silmus, ja ei tohiks juhtub iga kord, kui minna läbi silmus. Teine hea disaini näiteks nägime 3. nädalal 15, siis võiks hoida jälgida null. Nii et kui te initsialiseerida pardal, siis säästa - in globaalne muutuja, ehk - x ja y-koordinaadi null. Ja siis, kui sa - Sinu käik funktsioon, kui te teete edukas liikuda, siis uuendada asukohast null. See säästab omamast teha Pesastatud FOR silmuseid läbi vaatama pardale iga kord oma käigu funktsioon ja leida null, või leida kivi, ja seejärel kontrollida, mis on selle kõrval. Selle asemel pead asukohast null, saate otsida all, peal, ja vasakul ja paremal see, et leida plaat, mida otsisite. Nii nii programmide oleme kirjalikult, et nad ei ole kunagi piisavalt suur et mõned neist disaini otsuseid on tõesti kahjustada teie programmi või teha see kestab rohkem aeglaselt, või ehk isegi otsa mälu. Aga me ikka surudes kutid kirjutada elegantne ja tõhus kood kui võimalik. Nii et kui sa lõpuks kirjalikult asjad mis on oluliselt suurem ulatust, siis tuleb kirjutada hea kujundada lisaks on kehtiv. Nii mitu pead tõi selle välja. See on midagi, mida me otsime - midagi, mida me ei kavatse jätkata push te edasi. Kui teil on kunagi olnud mingeid küsimusi disaini oma programmi, võite jõuda mind, ja ma olen õnnelik, kõndida läbi oma programmi koos sinuga, ja meelde mõned disaini otsuseid, mida on tehtud, ja annab sulle mõned ettepanekuid selle kohta, kuidas teha isegi parem disaini otsuseid. Nii me edasi liikuda räägime Quiz 0. Enne kui me seda teeme, kas keegi on küsimusi, mida Olen kaetud nii kaugele? [Metsakohinat NOISE] JASON Hirschhorn: Seitse sekundit. OK. Räägime Quiz 0 natuke. Enamik teist on oma Quiz 0 selja. Kui te seda ei tee, loodetavasti sa mäletad seda natuke. Aga kui sa oled võtnud Quiz 0, siis juurdepääs ka PDF internetis proovi lahendusi. Kas kellelgi on mingeid küsimusi enne me hüpata nädala materjale erilisi probleeme Quiz 0 - miks vastus on, mis see on? Kas keegi on segaduses midagi? Isegi kui sul on probleem küll, aga lihtsalt tahaks mulle seletada natuke rohkem, ma olen õnnelik, et seda teha nüüd. Nii olen palunud kutid tulevad valmis mõned mõtteid Quiz 0. Seega, kes soovib saada meile Alustasime küsimus või kommenteerida Quiz 0? [PAPER metsakohinat] JASON Hirschhorn: Mitte igaüks tegin täiesti. Nii et ma tean [naerab] seal on mõned küsimused umbes Quiz 0. OK. Jah. Ompica. OMPICA: Number 10. JASON Hirschhorn: Number 10. Kumb oli number 10? OMPICA: - JASON Hirschhorn: I haven't - OMPICA: hulka - JASON Hirschhorn: Number 10 oli kaheksa I - kirjalikult kaheksa-i? OMPICA: Jah. JASON Hirschhorn: OK. Seega veel üks küsimus, mida võiks olla küsis oli ma ettenägelikud? Vastus on jah. Punktis enne viktoriin, palusin kutid koodi nii Sterling ja kaheksalt i. Mõlemad juhtus ilmuvad viktoriini. Loodetavasti, sa maksta tähelepanu sellele. Ja kui sul oleks, siis oleks ilmselt hästi neile kahele. Aga kaheksa-i, me tegelikult ei koodi seda klassi, aga see oli jällegi küsis kohta viktoriini. Nii paar asja võtta Märkus kodeerimine kaheksalt i. Esimene asi, ühe küsimuse, oli et teil on vaja kontrollida, kas string oli võrdne null. Paar inimest üritas vaadata hiljem programmis kui s sulg olin - nii konkreetne märk, et string - oli võrdne null. Kuid pidage meeles, et null on sisuliselt - see on hea mõelda null kui null pointer - osuti nulli - kuskil mälus kus sa ei saa kunagi pääseda. Nii et kui midagi on võrdne null, siis tean, et see ei ole lähtestatud, või seal pole midagi. Seega on s char star, S sulg i on char. Seega on mõistlik võrrelda s tühjaks, kuid ei s sulg i tühjaks. Aga jälle - nii et see oli esimene asi, et sa pidid tegema - veenduge, et te tegelikult sain päris string. Järgmine, sa tahtsid minna läbi iga märk string. Ja nii, et oleks nagu s sulg Mina, näiteks, kui ma su iteraatoris. Ja võta see märk ja saada selle tegelikku väärtust. Sul on see salvestatud char, aga ASCII väärtusega null - nulli iseloomu - Tegelikult ei ole täisarv null. See on mingi muu number, mida saate vaata üles ASCII tabelis. Nii et üks viis õige, et - Tõenäoliselt parim viis korrigeerimiseks et - on lahutada see iseloomu väärtus - nulli iseloomu. Seega miinus ülakoma, null, veel ühe hinnapakkumise. See võtab ükskõik mis numbri sa pead nagu char, ja saada see võrdub number kui tegelik täisarv. Ja mis on väga sarnane lähenemine palju inimesi võttis probleem komplekt 2, Caesar ja Viginere - need ciphers, kui te pööritati neid. Nii et kui olete seda numbrit null kuni üheksa, siis - sõltuvalt kus läheb see ülim number - sa pead korrutada see by võimsus 10. Mõned inimesed liikunud tagasi ees, ja korrutatakse individuaalse number võimsus 10. Mõned inimesed liikunud taha - ja nii võttis kõrgeim järjekorranumbreid esimene - ja hoiaks need ülemaailmse terrorismivastase muutuja. Ja siis iga kord läbi FOR loop, korrutada see hiiglane ülemaailmne võidelda muutuja 10, teha ruumi järgmisele char. Nii et oli natuke segane ilma mulle kirjalikult see lauale. Aga proovi lahuse on teile kättesaadavaks. Aga need olid suured asjad otsisime. Samuti veenduge, et iga eripärasuse oli tõepoolest iseloomu nulli ja üheksa, ja mitte mõne teise märgi, nagu, näiteks. Need olid asjad, mida me otsisime kõnealuses küsimuses. Kas see vastab su küsimusele? OMPICA: Jah. JASON Hirschhorn: OK. Kas on muid küsimusi umbes Quiz 0? Aga koostamisel? Igaüks koostamise õigus? Ei. Oli - [Naerab] Kõik küsimused koostamise protsessi? Wow. [PAPER metsakohinat] JASON Hirschhorn: Jah. Michael. MICHAEL: Kas number 7 - juhuslik? JASON Hirschhorn arv 7. Number 7 oli saada juhuslik täisarv. Suurepärane. Nii, et sa antud täisarv ja täisarv b, ja sa tahad juhuslikult täisarv ja b. Tegelikult saame see on pardal, sest see oli üks rida koodi - üks viis seda teha. Nii et me antud drand kui funktsioon me võiks kasutada. Ja mida see drand - Oletades, et see on külvatud - mida see drand tagasi? MICHAEL: float vahel 0,0 ja 1,0. JASON Hirschhorn: number - jah. Arvu 0 ja 1 vahel. Ja nii me on b ja a. Ja siis on meil juhuslik number 0 ja 1 vahel, mille andis meile drand. Mõned inimesed üritasid panna b või b miinus või midagi sees need sulgudes. See tähendaks, et nad on argumente selle funktsiooni. drand ei võta mingeid argumente - nagu getString ei ei võta mingeid argumente. Nii et see on lihtsalt avatud paren lähedal paren - ja et iseenesest on funktsioon kõne. Ja see annab sulle mitmeid 0 ja 1 vahel. Muidugi, meil on terve hulk et numbrid võivad olla sisse Ütle, kui b on 10 ja on 5, me tõesti tahad numbrit vahemikus 5. Nii et järgmine asi, mida me peame tegema, on korrutada seda valikut b miinus a. Seega eeldades, et on mitmekordistunud. Ja see annab meile number teatavas vahemikus. Ja see konkreetne valik on vahe b miinus a. Ja lõpuks, et ma ainult ei anna see - öelda vahemikus b miinus on 5, mis annan meile nr 0-5. Aga kui on tegelikult 5, peame suurendama Selles vahemikus kuni kus see on tegelikult peaks olema, lisades. Nii et saab loogika õige. Ja siis sa pead teine ​​küsimus? MICHAEL: Ei Ma tunnen tõesti loll kohe. [Naerab] JASON Hirschhorn: Ei Ei tunne tõesti loll. Mitmed inimesed võitlesid seda küsimust. Ja siis teine ​​küsimus on, drand, sa ütlesid, annab teile float - tagasi sularahaga. Kuid see funktsioon tegelikult küsitakse jaoks täisarv tuleb tagastada. Sul ei ole vaja heita seda selgesõnaliselt täisarv, sest need operatsioonid seda ravida kõik float - nagu ujukomaarvuna. Meeldib see - isegi kui see on täisarv, siis see korrutatakse õigesti. Kõik korrutamine töötab. Sa ei pea enamus siin. Tegelikult, sa ei heida enesest. See oleks - Kui te heidaks number see on 0 ja 1 vahel - juhuslik number, ujukoma - siis kas ainult 0 või 1, nii sa kaotad kõik, mis täpselt. Aga lõpus, kui pöördute tagasi, see automaatselt saab saadetakse tagasi täisarv. Nii et sa ei pea tegema et valu ise. Nii et see oli vastus Sellele küsimusele number 7. Muid küsimusi viktoriin 0? Jah, Annie. Annie: Kui me kasutame rekursiivne - kui me kasutame iteratiivne silmad? JASON Hirschhorn: Kui te kasutate rekursiivne - nii üldisemalt plusse ja miinuseid rekursioon versus iteratiivne lähenemine. Kas keegi oskab pakkuda pro või con? Palun? Ei saa keegi. Kes saab pakkuda pro või con? [PAPER metsakohinat] Õpilane 1: Rekursiivis on vähem kodeerimine - vähem kirjutama? JASON Hirschhorn: Nii üldiselt, rekursioon eriti funktsioon - või algoritm nagu ühendamist sort - mis on sobiv et rekursiivne lähenemine - võib olla lihtne koodi rekursiivselt. Ja lihtsalt mõttekam seda teha rekursiivselt. Nii et oleks pro et rekursioon. Teised? Jah? Õpilane 2: Con et rekursioon - Ta kasutab rohkem mälu. JASON Hirschhorn: Nii täpselt õige. Rekursiivne funktsioon hoiab lisades stack raamid korstnat. Nii et kui sa oled tegutsevad palju numbrid ja kutsuma selle toimida palju, siis kindlasti võtavad rohkem mälu, kui kordusmeetod panna ainult üks Kestab raami pinu sest see kõik juhtub ühe funktsiooni. Muid plusse ja miinuseid? Jah. Õpilane 3: plussid rekursioon. Sa ei pea kindlaks määrama eelnevalt mitu korda kood tuli korrata. Sul võib olla eelnevalt kindlaks määratud arv korda, et teil on kinnitada, siis rekursioon on parem, sest ta võtab, et tulemus. JASON Hirschhorn: Ma arvan, et see on tõsi. Aga ma arvan, et mõlemal juhul Te ei oleks kunagi - siis oleks ilmselt saaksin panus kasutaja. Või see funktsioon oleks mõned sisend mis määrab, mitu korda see peaks kulgema. Nii üldiselt, sa ei raske kood - isegi iteratiivne lähenemine - kuidas mitu korda, et loop tuleks käivitada. Kas teil on veel, et sa oled mõelda, Annie? OK. Nii et need on ilmselt kaks - Suurim pro ja suurim con rekursiivne versus iteratiivne lähenemine. OK. Midagi muud on Quiz 0? Liigume edasi. Faili I / O. On imeline lühike Selle nädala faili I / O, mis loodetavasti olete jälginud mitu korda ja imetletud. Palju tööd läks, et, ja ma olen kuulis ta on hullult kasulik. Ma ka link sellele slaidile juhul kui sa ei ole olnud võimalus vaadata seda 10 korda. Niisiis, me korraks minna üle olulisi samme avamise ja töö faile, ja siis me sukelduda kodeerimise probleem enne uurides probleem komplekti. Nii et taas, ma panen selle üles ekraan, kuid ma lähen rääkida korraks, mida me oleme siin teed failiga I/O-- Mida see tähendab? See tähendab, et me saame luua meie programmid, ja siis on meie programmid exit ja ei teinud mingit mõju maailma väljaspool meie programmi. Aga kui me alustada tööd failid - nii lugedes neid ja luua neid - meil on mõningane mõju maailma väljaspool meie programmi. Just nagu siis, kui Microsoft Word ei suutnud teha mis tahes Wordi dokumente, siis kui Microsoft Word loobuda, kõik oma Töö oleks läinud, ja see oleks tõesti mõttetu. Me lõpuks tahame, et oleks võimalik kirjutada programme, mis võivad mõjutada maailma, nii võttes sisse keeruline sisendid - nii faile ja kaudu faile ja ka luua huvitav ja kaalukad väljundid - poolest erinevaid faile. Nii et on põhjus, miks me oleme hakanud õppida, kuidas teha koostööd faile. Täpsemalt, mida meil on järgmine. See on väga lihtne. On ainult paar sammu, ja need on loetletud siin see kood. Nii et me läheme läbi Selle koodi rea kaupa. Esiteks, sa näed esile - kui te töötate fail olenemata sellest, millist tüüpi fail see on, sa pead seda avada. Ja see on koos kõne fopen - siin. Sa sisaldama faili nimi. Kui fail ei ole teie kataloogi või kausta, kus see programm elu, siis on vaja ka lisada tee, kui see fail on. Me eeldame, et see fail nimega "text.txt" - lihtsa teksti dokument - on samas kaustas on see programm on. Nii et on veel üks asi, mida meeles pidades -, et kui sa tahad, et avada fail kusagil mujal, mida tegelikult vaja lisada oma asukohta. Teiseks, te ei liigu argument fopen, ja see on, mida sa tahad teha, failiga. On olemas kolm peamist argumenti, et sa lähed läheb fopen. Kes saab mulle need kolm? Kes saab mulle üks neist? Jah. STUDENT 4: faili nimi on? JASON Hirschhorn: Vabandust. Kolm peamised argumendid saab läbida kui teine ​​argument fopen. Sul on õigus - faili nimi on esimene argument. Aga teine ​​argument fopen on tavaliselt kolm stringid ja - jah. Aleja. Aleja: A append. JASON Hirschhorn:, kui soovite lisab fail on juba olemas. STUDENT 5: R lugemiseks. JASON Hirschhorn: R, kui sa soovite lugeda failist. STUDENT 6: W kirjutada. JASON Hirschhorn Ja w, kui te soovite kirjutada faili. Nii et kui oleme kirjutan faili, nii et meil on w. Avate, on teil ka säästa kusagil, ja see on koos koodi vasakul pool omistamisoperaatorile - Ma loon kursor faili kutsutud, sel juhul faili. Me ei muretse, mida see kõik mütsid FAIL asi on. Piisab, kui öelda, et see on pikk vool nulli ja ones. Ja see, kuidas me see töötab ja seda mõista. Järgmine asi, mida me peame tegema - ja see on väga oluline - kui avate faili - Tegelikult, kui sa helistada malloc jaoks Näiteks ja saaksin mälu ja proovida ja salvestage see pointer, sa alati tahad veenduge, et funktsioon ei taastunud null. Nii et sel juhul on kontroll teha kindel, et me tegelikult avatud faili õigesti, ja ei olnud ei vea meie programmis. Järgmine kord oleme kontrollida veendumaks, et et meil on töö fail, saame kirjutada või lugeda, või lisab faili. Sel juhul ma lihtsalt printimine üks rida sellele failile. Kuidas ma tean seda? Noh, ma kasutan seda funktsiooni nimetatakse fprintf. Kõik funktsioonid, mida kasutate kui kirjalikult või lugemine või manipuleerides failid on sarnased funktsioonid, mida varem näinud, kuid algavad tähega F, seisma faili. Ja fprintf erinevalt meie tavaline print app, võtab veel ühe argumendi, ja see on fail, kus te soovite printida seda joont. Mul ei ole midagi õigust Ohai. Ma ei ole kolmanda argument, et printf - või teine ​​argument printf, Kolmas argument, et fprintf, sest ma ei ole mingit kohahoidjad siin. Ma ei sealhulgas muutujad. Aga jälle, fprintf ja kõik need faili funktsioonid, mis töötavad koos faile tavaliselt läheb vaja faili mil nad tegutsevad. Lõpuks viimane oluline asi teha on sulgeda fail, just nagu koos - kui me malloc midagi, me tahame vaba midagi, et me mäluleke - tahame sulgeda oma faili. Kui see programm lahkus sulgemata fail, koefitsiendid on midagi läheks vale, eriti kui see oli väike fail. Aga see on kindlasti hea kodeerimine stiili ja praktika alati sulgege fail Kui olete lõpetanud, kasutades seda. Nii et on põhitõed Faili I / O. Te olete ilmselt näinud seda või vaatasin seda selles fantastiline lühike. Kas kellelgi on küsimusi, enne me minna mõnda tava kodeerimine probleeme, faili I / O või samme ma läksin üle? [TYPING SOUNDS] JASON Hirschhorn: Kas sulle on küsimus, Avi? AVI: Ei JASON Hirschhorn: OK. Ma oota veel seitse sekundit. [Naerab] See on tõesti hea ots. Te lihtsalt ei meeldi küsimusi. See on hea. OK. Nii et meie esimene praktika probleem on, me oleme kavatse dubleerida funktsioon käsurea tööriista, mida tõenäoliselt Kasutada enne - koopia - koopia vahend. Kui kirjutad cp ja siis andke seda kaks argumente oma terminal, saate kopeerida faili. Ja see on see, mida me kirjutada kohe. Nii et taas, lugedes selle pealt slaidi, ma kirjutada programm, mis võtab kaks ja ainult kaks käsurea argumendid - lähtefaili ja sihtkoht faili - ja koopiate sisu allikas faili sihtkohta fail üks bait korraga. Nii et palju küsida. Jällegi hea lähenemine on see, et mitte minna otse C-koodi, kuid jaotada see paar sammu. Kõigepealt mõtle loogika - täpselt mida ma palun teil teha - ja mõista kõiki samme selle probleemi. Mitte C, vaid mõnes pseudokoodi, või isegi vaimne mudel mis toimub. Järgmine kord pead pseudokoodi alla nuputada, kuidas pseudokoodi kaartide peale tööriistu ja asju, mida me oleme õppinud kasutama C. Ja lõpuks, kui sul on kõik, mis koos, siis saab koodi probleemi. Testi 5-10 minutit tööd selle probleemi. Panen juhiseid tagasi üles teine. Ja siis me läheme üle pseudokoodi ja kood ta elab rühmana. Kui teil on küsimusi, kui oled tegeleb selle julgelt tõsta oma käsi ja ma tulen ümber ja neile vastata. STUDENT 7: Kas ma kaevukook paberile? JASON Hirschhorn: Mis toimub? [TYPING SOUNDS] JASON Hirschhorn: OK. Lähme üle pseudokoodi esimene ja siis ma annan sulle veel paar minutit, et lõpetada kodeerimine. Kes tahaks alustuseks esimese rea pseudokoodi seda funktsiooni? STUDENT 8: Veenduge, et sa said kaks faili. JASON Hirschhorn: OK. Ja kui me ei ole? STUDENT 8: Ma tagasi 0. JASON Hirschhorn: Kas me peaksime tagasi 0? STUDENT 8: Edasi-tagasi - umbne. Vabandust. JASON Hirschhorn: Jah. Tõenäoliselt mitte 0. Kuna 0 tähendab, et kõik oli hea. OK. Nii et esimene rida kohta pseudokoodi. Kes on teisel real pseudokoodi? STUDENT 9: Open nii faili? JASON Hirschhorn: Ava mõlemad failid. OK? STUDENT 10: Kontrollige, kui fail on NULL? JASON Hirschhorn: Kontrollige, Kindlasti ei ole ka NULL. Nagu kõrvale - kaldkriips 0 - on see, et NULL? STUDENT 11: Ei JASON Hirschhorn: See ei ole NULL. Seda nimetatakse NULL terminaator. See on tegelikult kirjutatud ainult üks l. Nii kontroll midagi selle vastu - see on tegelikult märk - nii kontrollimise vastu midagi, mis on ei ole sama, kontrollides, et näha, kui see võrdub NULL. Ja mõned inimesed - oma viktoriinid ja probleem komplekti - on saanud kaks neist segaduses. Kuid kaks neist on tegelikult erinevad. Üks lõpeb string - üks on viit 0. STUDENT 12: Miks sa ei vaadata, veenduge, et failid ei ole NULL enne, kui avate need? JASON Hirschhorn: Nii avatud säästab midagi selles failis. Ja kui sa lähed tagasi siin - nii see rida - fopen - annan teile aadressi ja kauplus et aadress faili, kui see töötab. Kui see ei tööta, siis salvestab NULL - STUDENT 12: Oh. OK. On sulle. JASON Hirschhorn: In fail. Nii et sa ei saa kontrollida NULL Enne olete avanud neile. NULL tähendab midagi ei korralikult töötada. OK. Seega veenduge, et kumbki on? Või on? Mida me arvame? Me läheme selle. STUDENT 13: Kas. JASON Hirschhorn: Kas? Samuti ei ole? STUDENT 13: Kas. JASON Hirschhorn: OK. Tundub, et mõned üksmeele. Samuti on NULL. OK, järgmine rida pseudokoodi. Kes ei ole andnud mulle rida veel? Me ootame teid. Jah. STUDENT 14: Sa pead lugema esimese faili? JASON Hirschhorn: OK. STUDENT 14: Või kasutame fscanf või midagi sellist esimest faili? JASON Hirschhorn: Nii et me tahame loe esimene fail ja - paneme selle siia. Loe lähtefaili. Ja siis, mida me teeme, kui me lugeda lähtefaili? Keegi teine? STUDENT 15: kirjuta kohtades faili? JASON Hirschhorn: Me kirjutada sihtfailide ja - OK. Mida muud me kadunud? Keegi teine, kes ei andnud mulle koodirida veel - on pseudokoodi. Jah. STUDENT 16: Äkki saate alati kontrollida kas seal on midagi lugeda, nagu järgmisele reale? See on nagu järgmisele reale vaata, kui see on olemas. [Helid] JASON Hirschhorn: Oops. See on minu journaling tarkvara. Jah? STUDENT 16: Jah. JASON Hirschhorn: Nii et anna see mulle veel üks kord. STUDENT 16: Kontrollige, kas seal on veel järgmise joont lähtefaili lugeda. JASON Hirschhorn: OK. Nii et me ei loe sarjad - lugesid baiti siin - aga sina oled õige. Me tahame, et lugeda ja kirjutada, kuni pole enam baiti. OK. Ja nii need peaks tõesti olema liigestatud natuke, sest nad on seal all. Eks ole? Seni oleme välja bytes, me läheme lugeda lähtefaili ja kirjutada sihtkohta faili. Ja siis, mida on viimati rida pseudokoodi? Keegi, kes ei andnud mulle midagi veel. STUDENT 17: Sulgege failid? JASON Hirschhorn: Täpselt. Sulgege faile. Nii et meie pseudokoodi. Ma panen pseudokoodi sisse gedit ja paar minutit me saab kodeerida seda koos. OK. Olgem alustada rühmana. Nishant, mul on uus fail. Ma olen lihtsalt avas selle üles. Untitled Document 1. Mis on esimene asi, mida ma peaks tegema? Nishant: raamatukogud? JASON Hirschhorn: OK. Mida raamatukogud? Nishant: stdio.h, stdlib.h, ma usun? JASON Hirschhorn: OK. Mis on stdlib eest? Nishant: Ma unustasin. JASON Hirschhorn: OK. Nii sisaldavad stdio. Mida ma peaksin tegema isegi enne Hakkan kodeerimine? Nishant: Kirjutage header? JASON Hirschhorn: Kuidas ma saan seda värvilised? [Astudes VOICES] Nishant: Kuidas sa saad seda värvi? JASON Hirschhorn: Kuidas ma värvikoodi? Nishant: Ma ei tea. Oh. Salvesta. JASON Hirschhorn: Salvesta. Jah. Ma salvestada see. C. Nii salvestage see töölauale cp.c. Sweet. Ja kui ma tahan saada täielik stiil punktid, mida ma peaksin sisaldavad tipus? Nishant: Sa võid kirjutada oma nime, nime programmi ja eesmärk programmi ka? JASON Hirschhorn: Paistab hea. Suurepärane. Nii et olete hakanud meid täiuslikult. # Include - me ka kirjutada - OK. Nii et ma arvan, et ma olen kõik seatud minna. Kes on esimene rida koodi minu jaoks - või esimest rida koodi mis ta võtab, et rahuldada meie esimene kommenteerima pseudokoodi? You. STUDENT 18: Kas see ei peaks olema int argc ja siis char * argv? JASON Hirschhorn: Ma arvan, sul on õigus. Muudame seda int, avatud paren, int argc, koma char * argv? Niimoodi? STUDENT 18: Brackets. JASON Hirschhorn: Brackets. Sulg, sulg, lähedal vanem. Perfect. Nüüd ma saan võtta käsurea argumente. OK. Veenduge, et me antud kaks faili. Sa ei anna mulle samuti. STUDENT 18: Kui argc - see ei ole võrdne 3. JASON Hirschhorn: Kui avatud paren argc ei võrdu 3? STUDENT 18: Jah, te tagasi 1 või midagi. JASON Hirschhorn: Vabandust. STUDENT 18: Tagasi 1 või midagi. JASON Hirschhorn: Tagasi 1. OK? Suur. Ava mõlemad failid. Kes saab mind aidata avada nii faile? Kes ei ole mulle veel koodi? Kurt? KURT: Nii et kõik korgid F-I-L-E star allikas. JASON Hirschhorn: ma lähen võtta välja vokaalid. Need on lahedad. See on nagu Tumblr. STUDENT 18: Vastus fopen - JASON Hirschhorn: Vastus fopen? STUDENT 18: Avatud paren, argv, sulg. JASON Hirschhorn: Oota. Vabandust. Avatud paren. OK. STUDENT 18: Jah. ARGV sub 1. JASON Hirschhorn: Sub 1? STUDENT 18: Jah. ARGV sulg 1 - Jah. Ja siis koma ja seejärel avage topelt quote, r, jutumärke, lähedal paren, semikoolon. JASON Hirschhorn: Sweet. Ja mis see teine? STUDENT 18: väga sarnased, kuid mitte S-R-C, siis tahaks seda nimetada D-S-T. JASON Hirschhorn: Oo! Mulle meeldib see. STUDENT 18: Just D-S-T. Jah. Ja siis ARGV, sulg, 2. Jah. Ja siis w asemel r. Jah. JASON Hirschhorn: Suur. Järgmine paar rida. Samuti, kui keegi on asju lisada jooned, mis me oleme teinud, võid vabalt lisada need samuti. Veenduge, ei ole NULL. Kes saab mulle koodi pean vasta sellele reale pseudokoodi? Archer. Ambur: kui src võrdne võrdsete NULL või dst võrdne võrdsete NULL, siis tagasi - JASON Hirschhorn: Mis on? Ambur: Mine 2? JASON Hirschhorn: Return 2. Nii et kui avatud paren src võrdub võrdub NULL või - mis iganes see thing's - toru? Pipe? Me nimetame seda toru. Toru, toru, dst võrdne võrdsete NULL, tagastab 2. OK? Seni oleme välja baitide - me omamoodi vahele üle selle sammu kaugusel pseudokoodi osa läheb siin. Kuid seni, kuni me välja baitide - mida see kõlab nagu? Mis tüüpi C struktuur - aga ma ei kasuta sõna struktuuri, sest me ei kavatse hakata kasutama et muudel juhtudel - kuid C tööriist Kuidas kõlab? STUDENT 19: loop. JASON Hirschhorn: loop. Sarnane loop. Seega, kes saab anda mulle esimene rida loop koodi siin? Võite ka valida, millist loop sa tahad, kui sa annad mulle see rida koodi. Seal on kolme tüüpi. Sa saad valida. Pakun üks neist. Avi. Kumba sa tahad? AVI: FOR. JASON Hirschhorn: FOR. AVI: int i võrdub nulliga. JASON Hirschhorn: OK. AVI: See osa ma ei ole kindel. Kuid i on väiksem suurus star allikas? Ma ei ole kindel. JASON Hirschhorn: OK. AVI: Sest sa tahad Faili suuruse, eks? JASON Hirschhorn: Nii see ilmselt ei annab meile suuruse tegeliku baitides. Niisiis, mida võiks veel teha? Mis on teist tüüpi loop? Või peaksime kinni loop? STUDENT 20: Kas sa teeksid samas silmus? Ja siis, mida sa teed on you'd - sest meil on char * faili. Nii et kui me muudkui incrementing et kuni me leida NULL märgi lõpuks on? Või ei ole see, et ei ole, kuidas faile töötab? JASON Hirschhorn: Nii suudame hoida incrementing char * kuni leiame NULL - STUDENT 20: Põhimõtteliselt käiks tähemärgi haaval, kuni me hit Faili lõpus. JASON Hirschhorn: Jah. Nii see on, mida me tahame teha. Me tahame, et hoida lugemisel, iseloomu poolt iseloomu, kuni saame Faili lõpus. Õpilane 20: Jah. Leia - Mis lõpuks või stop märk lõpus tekstifaili. JASON Hirschhorn: OK. Nii et kui me saame faili lõppu - Kuidas me teame, et me oleme saavutanud faili lõppu? Kui ma helistan - niiet astuge tagasi. Mis on funktsioon? Lähme seda joont siin. Loe lähtefaili. Kes saab mulle, et rida koodi? STUDENT 21: Fscanf? JASON Hirschhorn: Fscanf. OK. Mis siis, kui ma tahan lugeda, väga Konkreetsemalt Ühebaidiline? STUDENT 21: Ma ei tea. JASON Hirschhorn: OK. Isegi lihtsam kui fscanf - mis on - Ma tahan lugeda lähtefaili? Loe allikast faili. Mis on funktsioon - jah. STUDENT 22: See on fread? JASON Hirschhorn: Fread. Ma arvan, et lähme jääda et üks nüüd. Millist argumendid ei fread võtma? STUDENT 22: Ilmselt failitüübi ja siis asukohta failis? JASON Hirschhorn: Mida ma kirjuta siia aru saada, mis tüüpi argumendid fread võtab? MITU Õpilased: Man fread. JASON Hirschhorn: Man fread ja fwrite. Paistab, et nad hängida koos. Nii fread võtab mitu argumendid? STUDENT 23: neli. JASON Hirschhorn: See võtab neli argumenti. See võtab pointer, suurus, ja et asi, mis on imelik, ja mõned faili. OK? Loeme sellest siin. "Funktsioon fread loeb n memb elementide andmeid iga suuruse baiti pikk, oja poolt esile tõstetud oja, säilitamise kohas antud kursor. " Seega neli argumenti. Miks ma ei kopeeri seda, ja kleepige see siinsamas. OK. Kes saab alustada täites Nende argumendid on minu jaoks? Avi. AVI: Võta tühine. Pane lihtsalt src. Võtke pointer ja täht. Pane src. Siis - JASON Hirschhorn: Ma lähen üles lõpetama sa seal, sest see on vale. Sul on õigus, mille src, kuid kus peaks src minna? [Astudes VOICES] JASON Hirschhorn: see peaks mine siia. See src - meie src on tüüp. Vaatame siin. See küsib tüüpi FILE * oleme tegelikult tavaliselt näen neid niimoodi. Nii et see küsib argument kirjuta FAIL * nn oja, mis on src. OK? Mis suurus asju tegema tahame lugeda? Ma andsin sulle selle probleemi kirjeldus. STUDENT 24: üks bait korraga. JASON Hirschhorn: üks bait. Kui suur on bait? Selle suurus on baitides, mis siis ma saan panna sinna? STUDENT 25: One. JASON Hirschhorn: One. Õige. Selle suurus on ühiku bait, nii 1 on 1 bait. Kui palju ma tahan lugeda korraga. STUDENT 26: Üks? JASON Hirschhorn: Üks asi. Ma tahan lugeda üks asi suurus 1 ühe hammustada korraga. Ja kui ma seda teen, kui ma seda lugeda? STUDENT 27: Lend? JASON Hirschhorn: Nii et ma ei saa panna see otse sihtkohta. STUDENT 28: Te panete see kolmas osuti? STUDENT 27: sihtkohta. JASON Hirschhorn: OK. Jah. STUDENT 29: Võite kuulutada midagi toimida ajutise ladustamise varem. JASON Hirschhorn: OK. Anna see siia. STUDENT 29: Teine fail pointer, äkki? JASON Hirschhorn: OK. Nii et see on tühine star - see tüüp void täht, nii et see ei olema file pointer. Ja kui ma loen ühe baidi, kus oleks hea koht salvestada ühe baidi? STUDENT 29: massiivi? JASON Hirschhorn: massiiv. OK. Ja mida on veel midagi, mis on lihtsalt Suurus üks bait? STUDENT 30: char *? STUDENT 29: Jah. JASON Hirschhorn: char * ei ole üks bait. STUDENT 29: char. JASON Hirschhorn: char on üks bait. Eks ole? Niisiis olgem nimetame seda puhvrit on geneeriline nime kasutatakse neid asju salvestada Millegi ajutiselt. Nii et ma luua puhver. Eks ole? Aga see ei võta void *. Nii et äkki teil on õigus, et see tuleks puhvris suurus 0. Nii ta hoiab üks - õige. Sest see siin - char puhver on märk, kuid see võtab void * - pointer. Nii et ma võiks seda teha ja nüüd puhver on osuti. Mida muud ma teha sain? STUDENT 31: Pane täht kõrval märk. JASON Hirschhorn: suutsin Selle on loonud char *. OK. Mis on teine ​​asi, mida ma võiks teha? Või lähme see. Char * puhver, mis siis ma panen siia? STUDENT 31: puhver. JASON Hirschhorn: puhver. Puhver on viit char. Ja selles kohas, me paneme üks bait, mida me lugenud. Jah. Avi. AVI: Lihtsalt kiire küsimus. Kas soovite malloc puhver? JASON Hirschhorn: Kes saab Et sellele küsimusele vastata? STUDENT 32: Noh, see ei ole tegelikult käsk midagi kohe, nii et - JASON Hirschhorn: Aga kas tahame malloc see? STUDENT 32: Kui sa olid seda teha, et Muide, ma arvan, et jah, sest sa pead Mõnes kohas, et seda osutada. JASON Hirschhorn: Kas me pea malloc see? STUDENT 33: Kui sa lähed kasutada väljaspool loop. JASON Hirschhorn: Kas me kasutada väljaspool loop? STUDENT 34: Jah. STUDENT 35: Oota. Kas me tahame, et kuulutada aastal silmuse peale? JASON Hirschhorn: Nii et ma arvan, et meil on mõned pseudo samas silmus siin, et me oleme püüab selgitada, et me ei ole õppinud veel. Meil ei ole vaja malloc ta. Me tegutsevad peamine, see läheb Kasutatavad sees silmus. See ei pea eksisteerima väljaspool seda. Seega võib kohalik muutuja. Sul on kursor kohaliku muutuja. STUDENT 36: Aga see ei ole osutades midagi. JASON Hirschhorn: Ei, see ei ole algväärtustatud midagi. Aga me ei kavatse seda kasutada ka. Me läheme sinna midagi panema see esimene kord, kui me seda kasutada. Nii et tundub OK. Nii et me ei pea malloc siin. Ja ma arvan, et see on OK, kui see on. OK. Meil on fread line. Teeme järgmise rea. Kui me tahame kirjutada faili, mis on hea funktsiooni kasutada seda teha? STUDENT 37: fwrite? STUDENT 38: fprintf? JASON Hirschhorn: fprintf on üks. Mida veel? STUDENT 39: fwrite. JASON Hirschhorn: fwrite. Ja meie eesmärkidel fwrite, nägime siin on ilmselt parem valik. Kulub neli argumendid samuti. Nishant, saate anda minu argumendid? Nishant: esimene toimub olla lihtsalt puhver. JASON Hirschhorn: OK. Nishant: teise inimese lihtsalt saab olema 1. Kolmandaks üks saab olema 1. Ja neljas saab olema dst. JASON Hirschhorn: Kas kellelgi on küsimusi, et rida? See näeb hea välja. OK. Nüüd tundub, et üks asi, mida me oleme puudub - tegelikult kirjutame see viimane rida. Sulgege faile. Kes võib lõpetada meid kirjalikult need kaks viimast rida? Jah. Vabandust, mis su nimi on? LUCY: Lucy. JASON Hirschhorn: Lucy. LUCY: kirjutamisel src ja siis fclose sihtkohta. JASON Hirschhorn: kirjutamisel, avatud paren, src lähedal paren, semikoolon. Ja kirjutamisel - jah? LUCY: Avatud sulgudes dst ja siis semikooloniga. JASON Hirschhorn: Suur. Ja mida ma peaksin sisaldama lõpus? LUCY: return 0. JASON Hirschhorn: return 0. Kas ma pean? Lihtsalt küsimus. Kas meil on lisada return 0? MITU Õpilased: Ei. JASON Hirschhorn: Ei Peamised teeb seda automaatselt kui sa saad lõpuks. Aga ma arvan, et see on tore sisaldavad seda selgesõnaliselt. Eriti siis, kui me naasmist muu asjad kogu programmis. OK. See on see, et meil puuduvad - Pidevalt mida? Kes ei mõtle mõned - on mõnes mõttes mida asjad võiks sinna minna? Isegi kui see on ainult mõned pseudokoodi nagu keel? Mida me tegelikult oleme - mida me tahame minna kuni? Jah, Lucy. LUCY: faili lõppu. JASON Hirschhorn: faili lõppu. Niisiis, mida sa mõtled faili lõppu? LUCY: Kui te jõuate faili lõppu, lõpetage. JASON Hirschhorn: OK. Nii et kui me jõuame faili lõppu. Kuidas me teame, kui me oleme saavutanud Faili lõpus? STUDENT 40: Ma arvan, et puhver seatakse NULL. STUDENT 41: Puhver kuulutatud sees loop. JASON Hirschhorn: Nii et sa arvad puhver seatakse NULL. Miks puhver olema seatud null? STUDENT 40: Sest kui sa fread, sa üritad panna midagi arvesse puhver. JASON Hirschhorn: OK. Nii et sa mõtled fread - kui me oleme jõudnud fail, mida fread teha kavatsed? Ma arvan, et see küsimus me peame välja mõtlema. Mis fread teha? See panna NULL puhvris või see midagi muud? Kuidas me saame aru, mida ta teeb? STUDENT 42: Man. JASON Hirschhorn: Man. Vaatame siin. Tagastatav väärtus. Edu, fread ja fwrite tagasi arvu punkte lugeda või kirjalik. See number on võrdne arv baite kanda ainult siis, kui suurus on 1. Kui ilmneb viga, või lõpus fail on saavutatud, tagastatav väärtus on lühike kirje arv või 0. Nii meie eesmärkidel, kui fread jõuab Faili lõpus, ja loeb faili lõppu, seal on midagi jäänud lugeda, mida läheb tagasi? STUDENT 43: Zero? JASON Hirschhorn: Mis on? STUDENT 43: Zero? JASON Hirschhorn: Zero. Ta läheb tagasi nulli. Seega me teame, et fread, kui oleme jõudnud faili lõppu, läheb tagasi nulli. Kuidas me saame kasutada, et meie eelis? AVI: Võite kuulutada muutuja väljaspool loop nimetatakse tuleks. Kui kontroll on võrdne - nüüd - üks. JASON Hirschhorn: OK. AVI: Ja siis võite panna IF avalduse peale fread öelda kui fread võrdub nulliga - no. JASON Hirschhorn: Kes aitab Avi välja? AVI Mis on väärtus tagastatud fread? JASON Hirschhorn: Me lihtsalt läksin üle selle. AVI: Kuidas esindada? JASON Hirschhorn: Nii see läheb - olgem vaata siin - see läheb size_t, mis on sisuliselt täisarv. Nii see läheb täisarv. Ja meie puhul, siis tagasi 1 või 0 - 1, kui lugeda üht - üks bait, ja 0, kui oleme jõudnud. Nii et kui fread - jah? STUDENT 45: Kas sa ei pane täis fread (puhver, 1, 1, src) viiakse samas loop? JASON Hirschhorn: Nii pakute Seda tehes võetakse seal? [Astudes VOICES] JASON Hirschhorn: Oota. Nii et me vabastades selle. Nii et te ettepaneku panna fread arvesse seal? Mida me peaksime ka liikuma kui sa tahad seda teha? STUDENT 45: puhver väljaspool. JASON Hirschhorn: peaksime liigutada ka see siin. STUDENT 45: Aga kas see pidevalt edasi liikuda? [Astudes VOICES] JASON Hirschhorn: OK. Nii et see on see, mida Okshar ettepanek. Loome meie puhver. Me AJAL fread, siis me fwrite. Mõtted on? STUDENT 46: Minu ainus küsimus on, oleks see tegelikult käsu fread? JASON Hirschhorn: Hea küsimus. Kui sa oled hakanud funktsioon kõne sees tingimus, kas see funktsioon kõne täidab? Me oleme näinud näiteid enne. Eks ole? STUDENT 46: OK. Jah. Nii, et see täide. JASON Hirschhorn: Oleme näinud asju niimoodi enne, kui meil on funktsioon kõne sees seisukorras. Kas see funktsioon kõne täidab? Jah. Nii et vastus on jah. See funktsioon kõne täidab. Aga jälle, on see, mida me tahame? Mis on üks viis, kuidas me saaks aru välja, kas see on see, mida me tahame? MITU Õpilased: Käivita see? JASON Hirschhorn: Me võiks käivitada. Aga enne kui me seda teeme, me võiksime ka põhjust selle kaudu. Kui - et meil on üks bait meie fail, me jõuame siin me jõuame selle koodi. See kestab. fread naaseb üks bait ning pange see puhver. Ja see, kui hinnatakse, 1, õigus, kui ta tagastab 1. Niisiis, kui 1. Kas see tähendab, kood sees samas silmus täidab? STUDENT 47: Jah. See on tõsi. JASON Hirschhorn: Jah. 1 on õige. See ei ole 0. Nii koodi sees siin täidab. Nii me kirjutame. Kolime tagasi selle line taas. Nüüd on meil - me aasta lõpus meie faili. Loeme lõpust meie faili sest meil oli ainult üks bait ta. Fread tagastab 0, kauplused midagi puhvris. Ma ausalt öeldes ei tea, mida see salvestab puhvris. Võiksime tõenäoliselt otsida et näha, mida ta teeb. Et ma ausalt ei tea. Me ei tea, kes hoolib, mida see salvestab puhvris? Aga see tagasi 0. Ja samas 0 täitma? Pidevalt 0 ei käivitunud. Siis me liigume siin. Nii lähme käte kui on kood, me ei jookseks ega kui me tuleks teha muudatusi esimene. Nii et kui te arvate - teil hääletada. Kui sa arvad, et me peaksime selle käivitada koodi kui on, siis tõstke käsi. OK. Seal on üks - Kas teil on küsimus, mure? Jah. STUDENT 48: Pärast astume puhver väljaspool loop, me pea malloc see? JASON Hirschhorn: Hea küsimus. Pärast astume puhver väljaspool loop, me peame malloc see? See on ulatus küsimus. Kui me initsialiseerida puhver väljaspool see silmus, kas see on olemas sees loop? MITU Õpilased: Jah. JASON Hirschhorn: Jah. Selle kohaldamisala hõlmab sees loop, ja tõesti, midagi alla selle sees Selle koodi, sh asjad siin sees. Nii et me ei pea malloc ta. See on kohaliku muutuja ja selle ulatus ikka on silmus. STUDENT 49: Kas meil on vaja vabastada see? JASON Hirschhorn: Kas me pea tasuta puhver? STUDENT 49: Jah, kui me ei malloc. JASON Hirschhorn: Kas me pea tasuta puhver? Me ei tee seda. Jällegi on kohaliku muutuja nii et me ei vaja vabastada ta. OK. Vaatame, mis juhtub. Nii et see on uninitialized. See oli see, mis midagi, Marcus pakutud varem. Nii et meil on see viga, muutuja puhver on Uninitialized kasutatuna siin. Kuidas me saame seda parandada? STUDENT 50: malloc see? STUDENT 51: Vastus NULL? STUDENT 52: Ütle puhver võrdub NULL. JASON Hirschhorn: OK. Näeb hea välja. Meil on see nüüd. Loome midagi proovida kopeerimist. Nii et meil on meie tekstifaili. Kuidas me saame teha selle programmiga? Jah. STUDENT 53: Seda saab teha dot kaldkriips cp, test.txt. Ja siis saate nimi teise faili mis see salvestab arvesse. JASON Hirschhorn: OK. Me nimetame seda out.txt. Cool? SEG süü. Mõtted seg süü? See on suurepärane. Kuidas me saame teada, kus seg süüd? Mida? STUDENT 54: GDB. JASON Hirschhorn: GDB. Meil kestab gdb kirjutades gdb dot kaldkriipsuga nimi meie programm. No käsureaargumentidena seal. Me seada Katkestuspunkti peamine. Kui ma tahan alustada gdb, mida ma pean tegema? STUDENT 55: R. JASON Hirschhorn: R. Ja mis siis? STUDENT 55: argumendid? JASON Hirschhorn: Siis käsurea argumente. Vaatame. N on lihtsalt viid rida-realt. Ma lähen kuni Ma saan seg süü. Seal on mu seg süü. Tundub fread põhjustatud minu seg süü. Tean fread põhjustatud minu seg süü sest see oli line me lihtsalt täide. Ja ainus asi, mis oli juhtub, et joon - kaks asja on juhtunud. Fread läksin, ja siis me olime teeme mõned kontrollides. Ma olen valmis kihla, et AJAL kontrollimine ei põhjustanud seg süü. Tõenäoliselt fread oli põhjustab minu seg süü. Samuti näen ma siin midagi, memcopy. Memory koopia. Sarnane liigub mälu ühest asukohast teise. Sarnane midagi, mis juhtuks, aastal fread, võibolla mõned mälu liigub siit siia. Lähme läbi see uuesti. Kuidas käivitada üle ja käivitage see uuesti? Jah. STUDENT 56: Kas teil on vaja panna ampersand enne puhver? JASON Hirschhorn: Nii ampersand enne puhver annaks mulle aadress puhver, mis on paalia *. Olgem jookseb läbi selle veel kord. Kuidas ma saan läbi veel üks kord? STUDENT 57: Kas sa lihtsalt kirjuta uuesti avada? JASON Hirschhorn: Lihtsalt kirjuta run uuesti. Nii et me ei kavatse täidab selle rea. Nii puhver on NULL pointer. Õige? See osutab, et - vaatame. Kui oleme meie - juhtida kiire pilt sellest. Kas igaüks vaadata, kas Ma kirjutan siia? Nii et stack on meil kohalik muutuv ja seda nimetatakse puhvris ja see kursor char. Mis aadress see char juures? STUDENT 58: 0x0. JASON Hirschhorn: Õigus. See on, mis see on. Siin sees puhvris hoitakse 0x0. See, mis meil on - setup meil praegu. Nii et see rida, fread, paneb midagi allikast, kus? Sellesse kasti või see kast? Mis kast? Vasak kast või paremale kasti? Seda õigust kasti. Sellest järeldub, pointer, ja paneb selle siia. Kui me püüame ja touch mälu asukoha 0, siis mis me saame? Killustatust süü. See viga on meil praegu. Jah. STUDENT 59: Kas sul pole panna star puhver? Või ei ole? Sest fread? JASON Hirschhorn: Nii fread võtab kursor. Nii see läheb puhvris. Ja siis ma de-viide see kusagil sees fread. Aga jälle, nägime, et see võtab kursor. Meil ei ole vaja läbida see täht puhver. See oleks kulgeb see iganes on siin. Ja see oleks ilmselt meile viga sest me de-viitamine ta. Eks ole? Kui me de-viide selle pointer, kui püüame pääseda selle asukoha, me saada viga - meie killustatust süü. Niisiis - oops. Me quit välja gdb. Meie rida - meie probleem - on õige siin sellel liinil. Ja see on probleem, sest Selle rea. Kuidas me saame luua kast, mis on kättesaadav fread. Eks ole? Peame looma kast, mis on üks bait suur, suurus paalia. Aga meil on vaja, et kast oleks kättesaadav Kui see funktsioon täidab. Nii et kui - jah. Iga ideid? STUDENT 60: Just määrake see mõni juhuslik iseloom. Lihtsalt tee char puhvrit võrdsete iseloomu. Ja siis, kui teil on puhver olemas - JASON Hirschhorn: Oota. Char puhver? Seega pole star? STUDENT 60: Jah. Võta star. Vastus juhusliku iseloomuga. JASON Hirschhorn: OK. Nii et anna mulle üks. STUDENT 60: Meeldib või midagi. Ja siis, kui sul on puhver seal, siis kasuta - STUDENT 61: Star? Oh ei, ampersand. STUDENT 60: Kasutage ampersand. JASON Hirschhorn: OK. Ja kuidas on fwrite? STUDENT 60: Kasutage ampersand uuesti. JASON Hirschhorn: Olgu. Nii et teie idee on, et me luua char ja pane midagi, ja siis kirjutada, et char. STUDENT 60: Jah. JASON Hirschhorn: Mis inimesed arvavad? STUDENT 62: See on keerdunud. JASON Hirschhorn: OK. Joonistame selle välja. Nii et see aeg, ma juhtida seda punane korstnat siin ja siis me on - ooh! Vabandust. Nii et see aeg on meil midagi, mida nimetatakse puhver, ja see on virnas. Õige? Ja me kokkuhoid see esialgu. Siis on meil kõne fread. Mida fread ei ole see võtab bait alates meie faili ja paneb ta kuhugi. See paneb ta iganes asi pole osutades. Noh, enne kui meil oli see aadress - 0x0. Mis nüüd aadress meil on? STUDENT 63: Ükskõik aadress puhver. JASON Hirschhorn: Ükskõik aadress puhver. See on ilmselt saab olema midagi sellist. Ilmselt läheb algavad b ja f, ja siis on veel kuus kuueteistkümnendarvudega. Vahet pole. Mõned aadress. Ja me möödaminnes, et aadress sisse Ja me paneme oma ühe bait asi sellel aadressil. Nii et me panna meie ühe bait asi sees siin. Ja siis me ei kavatse kirjutada mis kunagi siia sisse. Kas kellelgi on küsimusi kohta? Kes arvab, et see kood töötab? Tõsta käsi, kui te arvate see kood töötab. Sa pead võtma hoiaku. Ja kes arvab, et see kood ei tööta? Tõsta käsi. Kõik teised peaksid olema tõsta oma käsi. OK. Michael, kui sa püsti? MICHAEL: Ma ei suuda otsustada. Objekti keskel. JASON Hirschhorn: Sa oled aasta keskel. Vali üks. MICHAEL: ma usun ja öelda, et see töötab. JASON Hirschhorn: OK. Sul on usk ja öelda, et see toimib? Mis juhtus? [Astudes VOICES] JASON Hirschhorn: No seg süü. Kuidas me saame vaadata, kui kaks asja on võrdsed? Kaks failid on võrdsed. STUDENT 64: Diff. JASON Hirschhorn: Diff. Diff kontrolli erinevused kaks faili, ja kui ta naaseb midagi, nad on identsed. Ja kui me avada, saame meie faili. Nii et see oli õige lahendus. Vaatame tagasi seda veel üks kord. Me tegelikult ei ole isegi vaja initsialiseerida ta. See oleks ilmselt nägema puhtam, kui sa ei pane midagi juhuslikult sinna. Asi on, siis on vaja luua ruumi, et salvestada midagi fread ja võtta midagi välja fwrite. Ja et asi pidi olema kas kohaliku muutuja stack - sa oleksin malloc'd ruumi. Nii et me tegelikult võiks olla kirjutatud malloc siin, ja mis oleks töötanud. Ja siis me oleks ladustamiseks meie asjad kuskil hunnik. Aga see on tegelikult ilmselt kõige elegantne lahendus. Lihtsalt luua ruumi virnas need asjad minema. Ma oleks kaks kommentaari. Kui sa olid võtta omakorda selle, ja siis saad viskas selle minu selgitused oleks järgmine. Need 1 on siin, et mind, vaata nagu magic numbreid. See 1 mõttes fread, mõtet. See on mitmeid asju lugeda või kirjutada. Aga see siin peaks arvatavasti midagi muud. Mis on üks lahendus? STUDENT 65: Suurus baidi. JASON Hirschhorn: Niimoodi? STUDENT 65: Size of char. JASON Hirschhorn: Size of char. Jah, bait ei ole tüüp. Nii suurus char töid. Me oleks võinud tipus meie kood, # määratletud seda. Nimetatakse midagi BYTE ja see on tõesti märk. Tegelikult isegi parem lähenemine oleks võinud seda - uint. Kas keegi teab, mis see on? Vabandust. Mul on seda tahapoole. Oota, ei. Kuhupoole see minna? Kas keegi teab, mis see on? Jah. STUDENT 67: peaks aitama ühtlustada kogu süsteemi asju, on - nagu unsigned täisarve mis on 8 baiti? JASON Hirschhorn: See on täpselt õige. On erinevaid masinaid, suurus paalia - tavaliselt ei char. Tähte on tavaliselt üks bait. Aga suurus teisi andmeid tüübid on erinevad suurused on 32-bit masin versus 64-bit masin. Uint8_t on alati 8 bitti - alati üks bait. Ja mul on vaja lisada, et standard int header fail. Nüüd, see on ilmselt parim viis kirjutada seda koodi. Nii et ma vabaneda magic numbreid. Ja mul on ka loogiline kirjuta puhvri. See pole lihtsalt paalia on bait, mis on see, mida me ootame, et see oleks. Ja siin me oleme tegelikult olnud veidi tugevam. Me ei kutsu seda char, mis - võib-olla, kes teab - võib olla erinev suurus erinevate seadmetega. Me tegelikult öelda, et see on täpselt see, üks bait, alati, ükskõik mida. Ja kui me vaatame siia, siis me teeme ap. Uh-oh. Mis juhtus? STUDENT 68: See võib olla sisse. JASON Hirschhorn: Mis on? STUDENT 69: Kas see? STUDENT 70: Sa ei teinud defineerida kui tüüp. STUDENT 71: Aga see peaks määratletakse standard. STUDENT 72: Mis toimub? STUDENT 73: Kas määratleda olema kõik mütsid? JASON Hirschhorn: nii see ei ole # define. Tegelikult antud juhul ma olen kavatse kasutada typedef. Kuna me kasutame seda tüüp ühes kohas. Nii selles asjas tahame tegelikult typedef nagu me printimiseks uut tüüpi bait, ja see on sisuliselt seda. See on natuke teistsugune kui # define. Ja nüüd, meie kood toimib suurepäraselt. Niisiis, jälle, # define võtab midagi asendab see kõikjal teiste asi. See on lihtsalt makro - stenografist vabaneda magic numbreid. Aga sel juhul, sest me oleme kasutades seda tüüpi - siin - selleks, et töötada, peame et typedef iganes bait on. Ja me määratledes seda siin. See ei ole struktuure, see on tegelikult lihtsalt allkirjastamata täisarv. See on üks bait pikk. See kood on kättesaadavad Internetis, ja te kõik peaks olema see kohe. Nii et meil on - täiuslik - 13 minutit aega, et minna üle lahendamist 5. Ma tahan kõndida läbi copy.c kokku ja siis me räägime lühidalt umbes muud osad Probleemi seatud. Nii et lubage mul tõmba copy.c. Ja lahe asi on, me tegelikult juba kirjutanud palju see kood. Kood kandsime sõnalt lihtsalt tuli siia, kui ma olin Kirjutan seda minu oma. Aga see on copy.c moodustab sihtasutuse võtta kaks esimest osa probleem seatud whodunit.c, mis teil on vaja kirjutada ja resize.c. Recover.c, mis on kolmas ja viimane osa probleemist komplekt, ei ole põhineb off seda faili. Sa lähed on vaja kirjutada, et faili anname malli et faili, kuid see on midagi pistmist copy.c. Aga kuna copy.c on vundament kaks esimest osa, me läbi minema nüüd, et teil on heas mõttes, mida ta teeb. Ja kommentaarid annavad mõned ära. Me oleme juba kirjutanud mõned seda. Esiteks, me tagada, saame kolm argumenti. Järgmisena me mäleta faili nime. Nii et me vahele selle sammu, kui me kodeeritud meie asi - kui meie AP. Aga siin nad teha see veidi puhtamaks. Nad kontrollides veenduda mõlemad failid on hea, et Lisaks avamist. Me kirjutasime kõik see kood lihtsalt nüüd, et ma olen ei hakka selle koodi. Järgmine on mõned asjad, mis on omased tüüpi faile, mida me kasutame, mis on bitmap faili. Bitmap failid on mõned metaandmed nendega. Nii et esimese paari baiti räägin sulle faili. Nad ei ole värvid piksel, et pilt. Nad räägivad teile faili kohta. Ja kui sa loed läbi probleem kogum, sul on palju rohkem teavet kohta, milliseid metaandmeid struktuurid on kaasas bitmaps. Aga sellepärast me peame seda kõigepealt komplekt - seda koodi siin. Meil loevad metaandmed - kaks tükki metaandmed - fail header ja info kaudu. Ja me kontrollime mõned osad selle veenduge, et see on tõsi, bitmap faili enne jätkamist. Ja veel, need on andmed meie ei pea minema nüüd. Kui sa loed läbi probleem kogum, te mõistate neid. Pikk lugu lühike, need on lihtsalt öeldes see on bitmap faili ja kinnitades, et. Järgmine oleme kirjutan need et välja faili. Me näeme, et siin. Me kirjutame välja pointer. Järgmisena me määramise polster. Niisiis jälle, nagu on iseärasus koos bitmap faili, mõned read sisaldavad polster lõpus. Ja kui sa loed läbi probleem kogum, saate rohkem teada polster. See on valem leida polster. Tähtis on meeles pidada - kui muudad suurust bitmap fail, polster muutusi. Kui muudad suurust fail, polster muutusi. See ei saa kunagi olema suurem kui 3 - see saab olema 0 kuni 3, viimane kaasa arvatud. Aga kui sa suuruse muutmiseks midagi, polster muutusi. Kui mul on ainult üks piksel, mis rida, ma vaja kolme bytes padding, sest iga rida peab olema telli neli baidi sisse bitmap faili. Aga kui ma seda kahekordistada, et minna ühe piksli kahe piksli, millest mõlemas oletame, on bait, siis ma vajan kaks baiti padding teha mis võrdub nelja. Nii et kui ma suurust muuta midagi, Mul on vaja muuta summa padding olen. Kas see mõistlik kõigile? Edasi me Käi iga rida, või kõik read. Ja siis me kinnitada, läbi iga veeru iga rea. Me ravimisel bitmap nagu võrku, nagu me oleme töödeldud pardal 15. Nagu me ravida telliste kui me trükitud need ekraanile. Grid ridu ja veerge. Siis - nägime seda. Me tegelikult lihtsalt kodeeritud see. Oleme loonud mõned ajutine ladustamine. Me loeme seal, ja siis me kirjutame selle välja. See on täpselt see, mida me tegime. Järgmiseks sest ma ütlesin iga rida lõpeb mõned padding, me Otse üle, et polster - vana polster. Ja siis lisame selle tagasi. Sel juhul me luua täpselt sama fail. Me lihtsalt kopeerides. Nii et see rida on selline tobe. Meil võib sõna otseses mõttes lihtsalt pane padding sisse Aga kui muudad faili suurus, sa ikka tahad seda joont? Nii et kui me muuta suurust faili Kas me ikka tahame vahele üle vana polster? STUDENT 74: Jah. JASON Hirschhorn: Nii et me teeme. Kuna see jällegi pakkumisi koos lähtefaili. Me ei hooli polster lähtefaili. Me tahame minna järgmisele reale. Aga me ei saa lihtsalt tagasi panna vana summa polster. Me peame tagasi panna uus summa polster. Nii et kui me suuruse muutmine fail, me ikka tahame vahele jätta polster vana faili - mida me loed alates. Aga mida me kirjutame, me vaja tagasi panna mõned erinevad number padding et oleme määratud. Jah. STUDENT 75: et need kaks jooned ei ole tähtis, kas pole? Sest sa käitlemise erinevaid faile. JASON Hirschhorn: Täpselt. Et need kaks rida Vahet pole. Me kirjutame seda joont. See on siin pilti me kirjutame. See on oluline, et me saame õige kogus padding. See on tegeleda faili. Tahame vahele õigus üle polster. Me ei taha lugeda - kui me lugemist bait korraga, me ei huvita need täidisbaidid. Me tahame, et liikuda järgmisele reale. Lõpuks nagu Lucy andis meie eest, sulgeme faili ja tagastab 0. Nii et see on copy.c. Ja me tegelikult kirjutasin - veetsime enamik lõik kirjutamise sisuliselt. Sa tegid seda. Loodetavasti teil on hea tunne sellest, mis siin toimub. Suur vahe, ausalt, on lihtsalt Selle esimene osa, mis tegeleb iseärasustest bitmap faili. Nii et ma pean, kui mu kõrval slaidile Mida me peame tegema? Noh, mõtleme Dekkari. Ja keegi, kes läbi lugeda lahendamist, mida me vaja teha Dekkari? Lihtsalt. Aleja. Aleja: Kas võtta osa Iga piksel mis tähistab punane. Ja siis - selline? JASON Hirschhorn: OK. Nii, et võta välja osa iga piksel, mis tähistab punane. See on lähedal, kuid mitte kõik. STUDENT 76: Noh, seal erinevaid viise, kuidas seda teha. JASON Hirschhorn: OK. Anna mulle üks võimalus. STUDENT 76: Võtke kõik punane ja siis rõhutavad sinine ja roheline. JASON Hirschhorn: OK. Nii antakse mõlemas suunas - see kõlab nagu me anname seda pixel, ta on punane, sinine ja roheline tasandil. Me tahame muuta suhtelist taset punane, sinine ja roheline, sõltuvalt selle pixel. Kui see kood peaks muudame suhteline punane, sinine ja roheline tasemed piksli. Pärast oleme seda lugenud - enne kui me seda kirjutada? Anna liin number. MITU Õpilased: 83. JASON Hirschhorn: 83. Nii siin. Sest Dekkari, kood, mida vaja write peaks kõik minema sinna. Ja see on ainult kood teil on vaja kirjutada. Sest, nagu me kuulsime, mida vaja teha, on muuta need suhteline sinine, punane ja roheline taset iga piksli. Te olete lugenud seda, ja nüüd sa oled kavatsete kirjutada seda. Kuidas saada - kui mul on see asi nimega triple, siin, ja see on kirjuta RGBTRIPLE - Noh, kui me vaatasin bmp.h, Mis on RGBTRIPLE? STUDENT 77: See on struct. JASON Hirschhorn: RGBTRIPLE on struct. Me näeme, et siin all. Ja kui ma tahtsin juurdepääs, ütleme, punane taseme struktuure, kuidas ma pääseda punase taset see struct? [CLASS murmurs] STUDENT 78: RGBTRIPLE.rgbtred? JASON Hirschhorn: Kas see on õige? STUDENT 79: See peaks olema kolmekordne dot asemel RGBTRIPLE dot? JASON Hirschhorn: Triple. Triple on kohaliku muutuja, nii siin pole mingit näpunäiteid siin. Nii et me lihtsalt kasutada dot märke. See annab mulle tase punane. Kui ma tahan seda muuta, ma lihtsalt seada see on võrdne midagi muud. Nii et taas, see koodirida juurdepääsude Selle muutuja sees see struct ja saame ta midagi uut. Nii Dekkari jällegi seda, sisuliselt, mida me peame tegema. Väga lihtne. Lihtsalt muuta mõned suhtelise taseme ning see on koht, kus see kood läheb. Resize, teiselt poolt, on veidi keerukam. Tegelikult resize on ilmselt trickiest osa sellest problemaatikast. Meil on kolm minutit, et minna üle. Aga jälle, me oleme juba kirjutanud Kõige selle koodi, nii et me peaks olema üsna tuttav. Millised on mõned asjad, mida me tahame teha, on suurust, kui olete lugenud üle lahendamist? Kui sa annad need mulle, me saab rääkida neile. Millised on mõned asjad, mida me tahame teha? STUDENT 80 vertikaalselt - nii et teil on horisontaalselt suurust muuta, vaid vertikaalselt suurust muuta ka? JASON Hirschhorn: Nii et kui me antud pixel, ja me tahame, et selle suurust poolt kahega, siis nüüd tuleb suurust horisontaalselt ja suurust vertikaalselt. Kas see on mõtet? Jah. Nii et ilmselt Suurim väljakutse. Ja siis me räägime, et sek. Jah. STUDENT 81: kuidas ma sellele mõelnud oli teil vaja välja trükkida - JASON Hirschhorn: Oota. Ära ütle meile, mida sa tegid. Me räägime loogika. STUDENT 81: OK. Mis oli küsimus? JASON Hirschhorn: Sa lihtsalt tõstis oma käe. Puudus küsimus. Lubage mul esitada see. Las ma arutada seda lühidalt. Nii oleme üks piksel, tahame imiteerida seda nii horisontaalselt vertikaalselt. Seega ideaalis, mida me siin teeme on, me Loe meie pikslit, me kirjutada Kuid paljud korda. Aga siis on meil trikk siin, sest siis me tahame, et liikuda Järgmine rida ja kirjutada seda alguses järgmisele reale. Nii et kui me tahame, et imiteerida nii horisontaalselt kui ka vertikaalselt, mis on üks hea viis seda teha - üks hea küll teha? Nii et me ei pea pidevalt otsima ümber oma faili panna asju. See küsimus ei pruugi olla loogiline, aga ma arvan, vastata, et see aitab. STUDENT 82: luua massiivi? JASON Hirschhorn: Mõtleme Iga faili järjest. Olgem mõelda ridu. Kui meil on meie esimene rida meie väike pilt, saame teha, et järjest suurde rea alguses suure pildi ja seejärel korrata, et rida siiski Mitu korda tuleb korrata, asemel läheb pikselhaaval, mis saab segane, kui tegelevad faile. Sest kui meil oleks - Ma ruum otsa. Kui see on meie faili ja meil on see üks piksel seal, ja me tahame panna seal on meil veel mõned asjad et vaja sinna minna, kui me kirjalikult ning luua meie uus fail - meie fail see on kaks korda nii suur. Aga see on tõesti raske failide funktsioonid vahele ümber uute liinide niimoodi, ja siis tagasi minna siin ja kraamima seal. See on peaaegu võimatu midagi teha nagu, et kui see on mõistlik. Nii et kui me mõelda rida, saame võtta meie rida, ja siis pane see - imiteerida rida vertikaalselt. Ja see, kuidas me käsitleme saneerimist vertikaalselt mitte horisontaalselt. See oli selline kiire ja veidi segadusse. Kahjuks meie aeg on läbi. Mul seisab väljaspool neile, siin, kes on küsimusi Ülesanded, sealhulgas taastuda. Teeme lükata nüüd. Ja veel, kui teil on küsimusi, saame vestelda väljaspool.