JASON HIRSCHHORN: Karibu, kila mtu, Wiki 6. Mimi nina furaha kuona nyote hai na vizuri baada ya Quiz 0, kwa sababu najua kwamba ilikuwa ni kidogo mbaya. Bali nashiriki, nyote alifanya incredibly vizuri. Na hivyo kuwa ni ya ajabu. Kama uko katika sehemu yangu, nimekuwa kutokana na wengi yenu nyuma Quizzes yako tayari. michache ya wewe, mimi nina mkutano baada ya darasa. Na kama wewe ni ugani mwanafunzi na si kupokea jaribio wako nyuma Hata hivyo, TF yako pengine ni kazi yake na wanasawazisha barabara hiyo, na kupata nyuma kwenu hivi karibuni. Hivyo yangu ugani wanafunzi ambao ni kuangalia hivi sasa - hopefully kuishi - Mimi kupata Quizzes yako muda mfupi pia. Ajenda yetu kwa leo ni kama ifuatavyo. Kwanza, sisi ni kwenda juu ya baadhi ya rasilimali CS50 hutoa na wewe. Sisi ni kwenda juu Quiz 0 ijayo, na Mimi itabidi kujibu maswali yoyote mtu yeyote ina kuhusu matatizo fulani. Na kisha, sisi kwenda juu ya file I / O na kuweka tatizo 5. Wale mada miwili iliyopita itachukua juu ya wingi wa sehemu leo. Mimi kuweka orodha hii juu ya kila wiki kama mawaidha kwa ninyi nyote, lakini ya msingi sehemu, sisi tu na dakika 90 - sisi si uwezo wa kufunika kila kitu mimi ingekuwa na upendo na bima kwa ajili ya nyie. Lakini sisi kufanya kuwa na tani ya rasilimali kwa ajili ya wewe kuteka juu ya kama kupata kujua vifaa na kazi kwa njia ya tatizo lako seti. kukumbusha kuwa nina online Nakala sanduku, kuanzisha kwa ajili yenu kujaza kama wewe una maoni yoyote kwa ajili yangu, chanya na kujenga, juu ya sehemu. URL kwamba iko haki hapa chini. Hivyo tafadhali, kuchukua muda kama una maoni, ama wakati wa sehemu, au baada ya, au baada ya wewe kuangalia video online, nipe maoni yako. Mimi kwa kweli kufahamu yoyote na yote. Hivyo nimekuwa kuwa na mazungumzo ndogo na mengi ya yangu wanafunzi katika wiki - kama mimi mkono nyuma Quizzes, kuzungumza juu ya Bila shaka, kuona ni jinsi gani unafanya. Na moja mandhari ina kuja juu ya na zaidi katika kuzungumza juu - katika hasa - tatizo seti. Na mimi zimegawanywa mandhari kwamba juu ya bodi ya hivi sasa. Kimsingi, kuna tofauti kati ya kugeuka katika kitu ambacho ni kufanyika kwa usahihi na kitu kwamba ni vizuri. Watu wengi wamekuwa wakifanya ajabu katika suala la usahihi - 5 au 4 juu ya psets wote. Watu wengi ni kupata wale wakati wote. Hata hivyo, kwa sababu tu umefanya kosa kitu sahihi haina maana wameweza amefanya kitu kama elegantly, au ufanisi, au kama cleanly kama wewe wangefanya hivyo. Na kwamba ni nini design - na kwa mdogo shahada, style - shoka ni kwa. Kwa hiyo mimi ni kusukuma yenu nyote, na TFS nyingine wanashinikiza nyie, na si tu upande katika mambo ambayo ni sahihi, lakini kugeuka katika mambo ambayo ni kutolewa vizuri. Si kufanya unnecessary kwa tanzi, si hesabu kwa vigezo kama huna kwa. Kwa mfano, kuangalia nyuma kuweka tatizo 4, wakati wa kuweka matofali juu ya screen, kila mstari - kila tofali katika mstari kutokana na ina sawa y kuratibu - urefu sawa kuratibu. Ili y kuratibu hakuwa na haja ya kuwa mahesabu ndani ya mambo ya ndani Furushi kwa kitanzi kwamba uwezekano kutumika kuweka matofali wale screen. Tu mahitaji kuwa mahesabu kila wakati switched mstari, au wakiongozwa chini ya mstari. Hivyo kusema kama kuna matofali 10 katika mstari, kila matofali inaweza kuwa sawa y-kuratibu, na kwamba y kuratibu unaweza tu kuwa mahesabu mara moja kwa wale wote. Haina haja ya kuwa na mahesabu 10 mara, wala kwamba hesabu haja ya kutokea katika halisi kazi wito - mpya gracked kazi simu. Hivyo kama kwamba alikuwa utata kidogo kwa wewe, zaidi yaliyotokea, mambo ambayo hawana haja ya kutokea kila wakati kwenda kwa njia ya kitanzi kwa haipaswi kuweka ndani ya kitanzi kwa, na lazima si kutokea kila wakati kwenda kwa njia ya kitanzi YA. Nyingine nzuri kubuni mfano tuliona katika wiki ya 3 kwa ajili ya 15, unaweza kuweka wimbo wa sifuri. Hivyo wakati wewe initialize bodi, wewe kuokoa - katika variable kimataifa, labda - x na y kuratibu ya sifuri. Na kisha wakati wowote - katika hoja yako ya kazi, wakati wowote kufanya hoja mafanikio, update eneo la sifuri. Hiyo kukuokoa kutokana na kuwa na kufanya Furushi kwa tanzi kuangalia njia bodi ya kila wakati katika hoja yako kazi na kupata sifuri, au kupata tile, na kisha kuangalia nini karibu na hiyo. Badala yake, una eneo la zero, unaweza kuangalia tu hapo juu, chini, na kwa upande wa kushoto na haki yake, ili kupata tile walikuwa kuangalia kwa. Hivyo katika suala la mipango tuko kuandika, wao ni kamwe kubwa ya kutosha kwamba baadhi ya maamuzi haya kubuni ni kweli kwenda kudhoofisha yako mpango, au kufanya hivyo kukimbia polepole zaidi, au pengine hata kukimbia nje ya kumbukumbu. Lakini sisi bado ni kusukuma nyie kuandika kama kifahari na code ufanisi iwezekanavyo. Hivyo kama wewe kufanya kuishia kuandika mambo kuwa na kiasi kikubwa kubwa upeo, wao itakuwa imeandikwa kwa wema kubuni pamoja na kuwa sahihi. Hivyo idadi ya una kuletwa kwamba nje. Hiyo ni kitu sisi ni kuangalia kwa - kitu sisi ni kwenda kuendelea kushinikiza wewe guys juu. Ikiwa una maswali yoyote kuhusu mpango wa mpango wako, kujisikia huru kufikia nje kwangu, na mimi nina furaha kutembea kwa njia ya mpango wako na wewe, na uhakika baadhi ya kubuni maamuzi yaliyotolewa, na kuwapa baadhi ya mapendekezo ya jinsi ya kufanya hata kubuni maamuzi bora. Hivyo sisi ni kwenda kwa hoja juu ya kuzungumza juu ya Quiz 0. Kabla ya sisi kufanya hivyo, mtu yeyote anaweza una maswali yoyote kuhusu nini Nimekuwa kufunikwa hadi sasa? [Wezi NOISE] JASON HIRSCHHORN: sekunde saba. OK. Hebu majadiliano juu ya Quiz 0 kwa kidogo. Wengi wenu na Quiz yako 0 nyuma. Kama huna, hopefully unakumbuka ni kidogo. Lakini kama wewe wameweza kuchukuliwa Quiz 0, basi pia kupata PDF online katika sampuli ufumbuzi. Je, mtu yeyote una maswali yoyote kabla ya sisi kuruka katika nyenzo wiki kuhusu tatizo fulani juu ya Quiz 0 - kwa nini jibu ni nini? Je kuna mtu yeyote kuchanganyikiwa kuhusu kitu chochote? Hata kama wewe got tatizo haki, lakini tu bila kama mimi kueleza ni kidogo zaidi, mimi nina furaha kwa kufanya hivyo sasa. Hivyo mimi aliuliza wewe guys kwa kuja tayari kwa baadhi mawazo kuhusu Quiz 0. Kwa hiyo nani ungependa kupata sisi ilianza na swali au maoni kuhusu Quiz 0? [PAPER wezi] JASON HIRSCHHORN: Si kila mtu alifanya kikamilifu. Hivyo najua [anacheka] huko kuwa baadhi ya maswali kuhusu Quiz 0. OK. Ndiyo. Ompica. OMPICA: Idadi 10. JASON HIRSCHHORN: Idadi 10. Ambayo moja ilikuwa namba 10? OMPICA: - JASON HIRSCHHORN: Mimi haven't - OMPICA: The ni pamoja na - JASON HIRSCHHORN: Namba 10 mara nane kwa i - kuandika nane kwa i? OMPICA: Yeah. JASON HIRSCHHORN: OK. Hivyo swali jingine unaweza kuwa na aliuliza mara mimi prescient? Jibu ni ndiyo. Katika sehemu kabla ya jaribio, Mimi aliuliza nyie na kanuni zote Sterling na nane kwa i. Wote wawili kilichotokea kwa kuonekana kwenye jaribio. Hivyo hopefully, kulipwa makini na hilo. Na kama alikuwa, basi ingekuwa pengine kufanyika vizuri juu ya hizo mbili. Lakini nane kwa i, sisi hawakuwa kweli code darasani, lakini ilikuwa ni mara ya pili, aliuliza juu ya jaribio. Hivyo michache ya mambo ya kuchukua kumbuka wakati coding nane kwa i. Jambo la kwanza, kwa swali, alikuwa kwamba zinahitajika kwa kuangalia kama kamba ni sawa na null. watu wawili walijaribu kuangalia baadaye katika mpango kama s bracket i mara - hivyo tabia ya maalum katika kamba - ni sawa na null. Lakini kumbuka, kwamba null kimsingi ni - ni vizuri kufikiria null kama zero pointer - pointer kwa zero - mahala fulani katika kumbukumbu ambapo unaweza kamwe kupata. Hivyo kama kitu ni sawa na null, wewe kujua kwamba haijawahi kuanzishwa, au kuna kitu hapo. Hivyo s ni nyota char, s bracket i ni char. Hivyo ni mantiki kulinganisha s kwa null, lakini si s bracket i kwa null. Lakini tena - ili ilikuwa jambo la kwanza kwamba walipaswa kufanya - kuangalia kuhakikisha kwamba kweli got string kweli. Next, alitaka kwenda kwa njia ya kila tabia katika kamba. Na hivyo kwamba itakuwa kama s bracket i, kwa mfano, kama i ni iterator yako. Na kuchukua tabia, na kupata thamani yake halisi. Wewe ni kuhifadhiwa kama char, lakini Thamani ASCII kwa zero - zero kama tabia - si kweli integer sifuri. Ni baadhi ya idadi mengine ambayo unaweza kuangalia juu katika meza ASCII. Hivyo njia moja sahihi ya kwa kuwa - pengine njia bora ya kurekebisha kwa kwamba - ni Ondoa kutoka humo tabia ya thamani - sifuri kama tabia. Hivyo minus moja quote, sifuri, quote mwingine moja. Hiyo kuchukua chochote idadi una kama char, na kupata sawa na idadi kama integer halisi. Na kwamba ni sawa na mbinu mengi ya watu alichukua katika tatizo kuweka 2, na Kaisari na Viginere - ciphers hizo, wakati walikuwa kupokezana yao. Hivyo baada ya kuwa ni kama idadi kutoka zero kwa tisa, basi - kulingana na unakokwenda katika idadi ya mwisho - unahitaji kuzidisha kwa nguvu ya 10. Baadhi ya watu wakiongozwa na nyuma mbele, na kukua binafsi idadi na nguvu ya 10. Baadhi ya watu wakiongozwa na mbele na nyuma - na hivyo alichukua juu ili idadi ya kwanza - na bila kuwaokoa wale katika kimataifa kukabiliana na kutofautiana. Na kisha kila wakati kupitia kwa kitanzi, kuzidisha kubwa duniani kukabiliana na kutofautiana na 10, kwa kufanya nafasi kwa char ijayo. Ili kwamba ilikuwa utata kidogo bila mimi kuandika juu ya bodi. Lakini ufumbuzi sampuli inapatikana na wewe. Lakini hao walikuwa mambo makubwa tulikuwa kutafuta. Pia kuangalia kwa kuhakikisha kwamba kila tabia ya mtu binafsi kweli alikuwa a tabia ya kati ya sifuri na tisa, na si baadhi tabia nyingine, kama A, kwa mfano. Wale vitu sisi kuangalia kwa katika swali hilo. Je, hiyo kujibu swali lako? OMPICA: Yeah. JASON HIRSCHHORN: OK. Je, kuna maswali mengine yoyote kuhusu Quiz 0? Nini kuhusu kuandaa? Kila mtu kuandaa haki? Hapana Kulikuwa na - [Anacheka] Maswali yoyote kuhusu mkusanyiko mchakato? Wow. [PAPER wezi] JASON HIRSCHHORN: Ndiyo. Michael. MICHAEL: Je, namba 7 - random? JASON HIRSCHHORN: Idadi 7. Namba 7 ilikuwa kupata integer random. Bora. Hivyo wewe ni kutokana na integer a na integer b, na unataka random integer kati ya na b. Sisi kwa kweli unaweza kuandika hii moja juu ya bodi, kwa sababu hii moja alikuwa mstari wa moja ya maadili ya - njia moja ya kufanya hivyo. Hivyo sisi ni kutokana na drand kama kazi tunaweza kutumia. Na nini drand - kuchukua imekuwa ni mbegu - nini drand kurudi? MICHAEL: kuelea kati ya 0.0 na 1.0. JASON HIRSCHHORN: idadi - yeah. Idadi ya kati ya 0 na 1. Na hivyo tuna b na. Na kisha sisi kuwa na idadi yetu random kati ya 0 na 1 tuliyopewa na drand. Baadhi ya watu alijaribu kuweka b, au b minus a, au kitu ndani ya wale mabano. Hiyo ina maana kwamba wao ni hoja ya kazi hii. drand haina kuchukua hoja yoyote - kama GetString gani si kuchukua hoja yoyote. Hivyo ni wazi tu paren, karibu paren - na kwamba, yenyewe, ni kazi simu. Na kwamba anatoa namba kati ya 0 na 1. Bila shaka, tuna mbalimbali mzima kuwa idadi inaweza kuwa in Kusema, kama b ni 10 na ni 5, kwa kweli sisi wanataka idadi na aina mbalimbali ya 5. Hivyo jambo la pili tunahitaji kufanya ni kuzidisha hii na aina mbalimbali b minus a. Hivyo kudhani kuwa ni tele. Na kwamba utakuwa kutupa idadi ndani ya mbalimbali huo. Na mbalimbali kwamba maalum kuwa tofauti kati ya b minus a. Na hatimaye, kwamba utakuwa tu kuwapa kutoka - kusema mbalimbali kati ya b minus a ni 5, kwamba utakuwa kutupa Idadi ya 0-5. Lakini kama ni kweli 5, tunahitaji kuongeza hii up mbalimbali ambapo ni kweli ilitakiwa kuwa, kwa kuongeza. Hivyo kwamba anapata mantiki ya haki. Na kisha, unaweza kuwa na swali jingine? MICHAEL: Hapana Mimi tu kujisikia kweli bubu hivi sasa. [Anacheka] JASON HIRSCHHORN: Hapana Je, si kuhisi kweli bubu. idadi ya watu Jihadi kwa swali hili. Na kisha, swali nyingine ni, drand, wewe alisema, anatoa kuelea - anarudi kuelea. Lakini kazi hii kwa kweli aliuliza kwa integer kurudishwa. Huna haja ya kuwafukuza hii wazi kwa integer, kwa sababu hizi shughuli kutibu ni kama wote a kuelea - kama yaliyo hatua idadi. Kama hali hii - hata kama hii ni integer, dhamira hii ya tele kwa usahihi. Kuzidisha itafanya kazi. Huna haja ya kuwatupia hapa. Kwa kweli, unapaswa kutupwa yake. Hiyo ingekuwa - kama ungependa kutupwa idadi kwamba kati ya 0 na 1 - a random idadi, hatua yaliyo - basi itakuwa ama kuwa tu 0 au 1, hivyo utasikia kupoteza yote ya usahihi. Lakini mwishoni mwa, wakati wa kurudi, ni moja kwa moja anapata kurejea kama integer. Hivyo huna haja ya kufanya kwamba akitoa mwenyewe. Hiyo ilikuwa jibu kwa swali hilo, namba 7. Maswali yoyote juu ya Quiz 0? Yeah, Annie. ANNIE: Wakati sisi kutumia kujirudia - wakati sisi kutumia loops iterative? JASON HIRSCHHORN: Wakati gani unaweza kutumia kujirudia - hivyo kwa ujumla zaidi, faida na hasara za kujirudia dhidi ya mbinu iterative. Je, mtu yeyote kutoa pro au con? Tafadhali? Si unaweza mtu yeyote. Ambao wanaweza kutoa pro au con? [PAPER wezi] STUDENT 1: kujirudia ni chini ya coding - chini kuandika? JASON HIRSCHHORN: Hivyo kwa ujumla, kujirudia hasa, kazi - au algorithm kama kuunganisha aina - ambayo imejikita kwa njia ya kujirudia - inaweza kuwa zaidi ya moja kwa moja na kanuni recursively. Na tu mantiki zaidi kufanya hivyo recursively. Hivyo kwamba itakuwa pro kwa recursion. Wengine? Yeah? STUDENT 2: Con kwa kujirudia - Ni anatumia kumbukumbu zaidi. JASON HIRSCHHORN: Hivyo sahihi kabisa. kazi kujirudia kushika kuongeza stack muafaka kwa stack. Hivyo kama wewe ni kazi ya mengi ya idadi, na kuwa na wito huu kazi mengi, basi bila ya shaka kuchukua zaidi ya kumbukumbu, wakati mbinu iterative tu kuweka moja stack sura juu ya stack, kwa sababu yote hutokea ndani ya moja ya kazi. Yoyote faida nyingine na hasara? Yeah. STUDENT 3: Faida kwa recursion. Huna kuamua katika kuendeleza mara ngapi code ilibidi mara kwa mara. Unaweza kuwa na idadi ya predetermined ya mara kwamba una iterate, basi kujirudia ni bora, kwa sababu inachukua kwamba matokeo. JASON HIRSCHHORN: Nadhani hiyo ni kweli. Lakini nadhani katika kesi zote mbili Wewe kamwe - labda ungependa kupata baadhi ya pembejeo kutoka kwa mtumiaji. Au kazi hii ingekuwa baadhi pembejeo ambayo kuamua mara ngapi lazima kukimbia. Hivyo kwa ujumla, ungekuwa si code ngumu - hata katika mfumo wa iterative - jinsi mara nyingi kwamba kitanzi lazima kukimbia. Je, na mwingine ungekuwa kufikiria, Annie? OK. Basi hizo pengine mbili - pro kubwa na kubwa ku kwa kujirudia dhidi ya mbinu iterative. OK. Kitu kingine chochote juu ya Quiz 0? Hebu hoja juu ya. Picha I / O. Kuna ajabu short wiki hii kwenye faili I / O kwamba hopefully ulizotazama nyingi mara kwa mara, na admired. mengi ya kazi akaingia, na mimi wameweza waliposikia hayo ni insanely kusaidia. Mimi pia ni pamoja kiungo juu ya slide hii, katika kesi si alikuwa na nafasi ya kuangalia ni mara 10. Hivyo, sisi ni kwenda kwa ufupi kwenda juu hatua kubwa ya kufungua na kufanya kazi kwa files, na kisha sisi ni kwenda kupiga mbizi katika tatizo coding kabla ya kuchunguza kuweka tatizo. Hivyo tena, mimi nina kwenda kuweka hii juu ya screen, lakini nina kwenda kuzungumza kwa tu dakika juu ya nini tuko kufanya hapa na faili I/O-- nini maana gani? Hiyo ina maana kwamba tunaweza kujenga wetu mipango, na kisha kuwa na mipango yetu exit, na si kuwa alifanya madhara yoyote juu ya dunia ya nje ya mpango wetu. Lakini wakati sisi kuanza kufanya kazi na files - wote kusoma yao katika na kujenga yao - tunaweza kuwa na baadhi ya athari juu ya dunia ya nje ya mpango wetu. Tu kama kama Microsoft Word hakuwa na uwezo kufanya hati yoyote neno, kisha mara moja Microsoft Word kujiondoa, yote ya yako kazi itakuwa kuondoka, na ingekuwa kweli na maana. Sisi hatimaye unataka kuwa na uwezo wa kuandika mipango ambayo inaweza kuathiri dunia inayowazunguka, wote kwa kuchukua katika pembejeo tata - katika suala la files na kupitia files, na pia kujenga kuvutia na matokeo ya kulazimisha - katika suala la aina mbalimbali za files. Hivyo kwamba ni kwa nini sisi ni mapya ya kujifunza jinsi ya kufanya kazi kwa files. Zaidi hasa, nini sisi kufanya ni kama ifuatavyo. Ni rahisi sana. Kuna michache tu ya hatua, na wao ni waliotajwa hapa juu ya kanuni hii. Hivyo sisi ni kwenda kupitia mstari huu code na line. Kwanza, unaweza kuona yalionyesha - wakati wewe ni kazi na faili, bila kujali aina ya faili ni, unahitaji kufungua yake. Na kwamba ni kwa mwito wa fopen - hapa hapa. Wewe ni pamoja na jina la faili. Kama faili ni si katika orodha yako, au folder ambapo mpango huu maisha, basi wewe pia haja ni pamoja na njia ya ambapo faili kwamba ni. Tunakwenda kudhani kwamba hii faili inayoitwa "text.txt" - rahisi Nakala hati - ni katika folder moja kama mpango huu ni. Hivyo hilo ni jambo lingine kuweka katika akili - kwamba kama unataka kufungua faili mahali pengine, kwa kweli haja ni pamoja na eneo lake. Pili, unaweza kupita hoja ya fopen, na kwamba ni nini unataka kufanya na faili. Kuna hoja kuu tatu kwamba utaenda kupita kwa fopen. Ambaye anaweza nipe wale watatu? Ambaye anaweza nipe mmoja wao? Ndiyo. STUDENT 4: jina la faili? JASON HIRSCHHORN: Sorry. Hoja kuu tatu unaweza kupita kama hoja ya pili kwa fopen. Wewe ni haki - jina la faili ni hoja ya kwanza. Lakini hoja ya pili kwa fopen ni ujumla masharti tatu, na - ndiyo. Aleja. Aleja: A kwa append. JASON HIRSCHHORN: A, kama unataka append kwa faili kwamba tayari ipo. STUDENT 5: A kwa ajili ya kusoma. JASON HIRSCHHORN: A, kama wewe unataka kusoma kutoka faili. STUDENT 6: W kwa kuandika. JASON HIRSCHHORN: Na w, kama wewe unataka kuandika na faili. Hivyo katika kesi hii, sisi ni kuandika na faili, hivyo tuna w. Wazi kuwa, pia kuwa na kuokoa faili mahali fulani, na kwamba kwa code kwa upande wa kushoto wa kazi operator - Mimi nina kujenga pointer na faili kuitwa, katika kesi hii, file. Sisi si kwenda kuwa na wasiwasi nini hii mechi zote FILE kitu ni. Inatosha kusema, ni kwa muda mrefu mkondo wa zeros na ndio. Na kwamba ni jinsi gani sisi ni kwenda kazi yake na kuelewa. Jambo la pili tunahitaji kufanya - na hii ni incredibly muhimu - wakati wowote kufungua faili - kwa kweli, wakati wowote wewe piga malloc, kwa mfano, na kupata baadhi ya kumbukumbu na kujaribu na kuokoa ni katika pointer, daima wanataka kuangalia kuhakikisha kwamba kazi hakurudi null. Hivyo katika kesi hii, sisi ni kuangalia kufanya uhakika kwamba sisi kweli kufunguliwa faili kwa usahihi, na kulikuwa na hakuna makosa katika programu yetu. Next, mara moja tumekuwa kuchunguzwa ili kuhakikisha kwamba tuna file kazi, tunaweza kuandika, au kusoma kutoka, au append na faili. Katika kesi hiyo, mimi tu ya uchapishaji line moja na faili hii. Je, mimi kujua kwamba? Naam, mimi nina kutumia kazi hii aitwaye fprintf. Wote wa kazi utakuwa kutumia wakati wa kuandika, au kusoma kutoka, au kufanyia files itakuwa sawa na kazi umefanya kuona mbele, lakini kuanza na barua F, amesimama kwa ajili ya faili. Na fprintf, tofauti na magazeti yetu ya kawaida programu, inachukua hoja moja ya ziada, na kwamba ni file ambapo unataka magazeti line hii. Sina kitu chochote haki ya ohai. Sina tatu hoja ya printf - au hoja ya pili kwa printf, Hoja ya tatu kwa fprintf, kwa sababu mimi hawana placeholders yoyote hapa. Mimi si ikiwa ni pamoja na vigezo yoyote. Lakini tena, fprintf na yote haya file kazi ambayo kazi kwa files kwa ujumla kwenda haja ya faili ambayo wao ni kazi. Hatimaye, jambo la mwisho muhimu kwa kufanya ni karibu faili, kama na - wakati sisi malloc kitu, tunataka bure kitu, tusije kuwa na kumbukumbu leak - tunataka kwa karibu faili yetu. Kama mpango huu exited bila ya kufunga file, ni tabia mbaya kitu gani kwenda vibaya, hasa kama mara file ndogo. Lakini ni hakika nzuri coding style na mazoezi daima karibu faili yako wakati wewe ni kumaliza kutumia. Hivyo kwamba ni misingi ya faili I / O. Ve pengine kuona kwamba kabla, au watched katika short ajabu. Je, mtu yeyote una maswali yoyote, kabla ya sisi kwenda katika baadhi ya mazoezi coding matatizo, kuhusu faili I / O au hatua mimi tu akaenda juu? [Kuandika Sauti] JASON HIRSCHHORN: Je, swali, Avi? AVI: Hapana JASON HIRSCHHORN: OK. Mimi nina kwenda kusubiri mwingine sekunde saba. [Anacheka] Hiyo ni ncha mzuri. You guys si tu kama kuuliza maswali. Hiyo ni sawa. OK. Hivyo yetu mazoezi Tatizo la kwanza ni, sisi ni kwenda kurudia kazi ya amri line chombo kwamba pengine kutumika kabla ya - nakala - chombo nakala. Kama aina linganisha na kisha kupita mbili hoja ndani ya terminal yako, unaweza nakala faili. Na kwamba ni nini sisi ni kwenda kuandika hivi sasa. Hivyo tena, kusoma mbali ya slide hii, ningependa wewe kuandika mpango kwamba inachukua mbili na mbili tu amri ya mstari wa hoja - chanzo faili na marudio file - na nakala yaliyomo ya chanzo faili marudio file moja byte wakati huo. Ili mengi ya kuomba. Tena, njia nzuri na hii ni kwa si kwenda moja kwa moja C kificho, lakini kuvunja chini katika michache ya hatua. Kwanza, kufikiri juu ya mantiki - hasa nini mimi kuuliza wewe kufanya - na kuelewa yote ya hatua ya tatizo hili. Si katika C, tu katika baadhi pseudocode, au hata mfano wa akili ya nini kinaendelea. Next, mara moja una pseudocode chini, kufikiri jinsi ya pseudocode ramani kwenye zana na mambo tumekuwa kujifunza kwa kutumia katika C. Na hatimaye, mara moja na yale yote ambayo pamoja, unaweza ya kificho tatizo. Kuchukua dakika 5 hadi 10 kwa kazi juu ya tatizo hili. Mimi itabidi kuweka maelekezo nyuma hadi katika pili. Na kisha sisi ni kwenda juu pseudocode, na kanuni ni kuishi kama kikundi. Kama una maswali yoyote wakati uko kazi ya hii, jisikie huru kuongeza mkono wako, na nitakuja karibu na kujibu yao. STUDENT 7: Je, mimi swipe kipande cha karatasi? JASON HIRSCHHORN: Nini up? [Kuandika Sauti] JASON HIRSCHHORN: OK. Hebu kwenda juu pseudocode kwanza, na basi mimi nitakupa zaidi ya wanandoa dakika ya kumaliza coding. Ambao wangependa kuanza me off na mstari wa kwanza wa pseudocode kwa kazi hii? STUDENT 8: Angalia kuhakikisha kwamba walipewa files mbili. JASON HIRSCHHORN: OK. Na kama sisi siyo? STUDENT 8: napenda kurudi 0. JASON HIRSCHHORN: Je, sisi kurudi 0? STUDENT 8: Kurudi - blanking. Sorry. JASON HIRSCHHORN: Yeah. Pengine si 0. Kwa sababu 0 ina maana kila kitu ilikuwa nzuri. OK. Hivyo kwamba ni mstari wa kwanza ya pseudocode. Ambaye ana mstari wa pili wa pseudocode? STUDENT 9: Open wote files? JASON HIRSCHHORN: Fungua files zote mbili. OK? STUDENT 10: Angalia kuona kama faili ni NULL? JASON HIRSCHHORN: Angalia kufanya uhakika wala null. Kama kando - kufyeka 0 - ni kwamba NULL? STUDENT 11: Hapana JASON HIRSCHHORN: Hiyo si null. Hiyo inaitwa NULL Terminator. Ni kweli yameandikwa kwa l moja tu. Hivyo kuangalia kitu dhidi ya kwamba - hiyo ni kweli tabia - hivyo kuangalia kitu juu ya kwamba ni si sawa kama kuangalia ili kuona kama sawa na NULL. Na baadhi ya watu - juu ya Quizzes yao na matatizo yao seti - got wawili wa kuchanganyikiwa. Lakini wawili hao ni kwa kweli tofauti. Moja mwisho string - moja ni pointer 0. STUDENT 12: Kwa nini si kuangalia kwa kuhakikisha kwamba files si NULL kabla ya kufungua yao? JASON HIRSCHHORN: Hivyo wazi anaokoa kitu katika faili hilo. Na kama wewe kurudi hapa - hivyo line hii - fopen - nitakupa anwani na kuhifadhi kwamba anwani katika faili kama kazi. Kama haina kazi, ni kuhifadhi NULL - STUDENT 12: Oh. OK. Got wewe. JASON HIRSCHHORN: Katika file. Hivyo huwezi kuangalia kwa NULL kabla ya ve kufunguliwa yao. NULL maana yake ni kitu gani si kazi ipasavyo. OK. Ili kuangalia ili kuhakikisha wala? Au ni nini? Tufanye nini kufikiri? Tutaweza kwenda na kwamba. STUDENT 13: Je. JASON HIRSCHHORN: Je? Wala? STUDENT 13: Je. JASON HIRSCHHORN: OK. Sisi wanaonekana kuwa na baadhi makubaliano juu ya hilo. Wala null. OK, mstari wa pili pseudocode. Ambaye si kunipa line bado? Sisi kusubiri kwa ajili yenu. Yeah. STUDENT 14: Una kusoma kutoka faili ya kwanza? JASON HIRSCHHORN: OK. STUDENT 14: Au sisi kutumia fscanf au kitu kama hicho file kwanza? JASON HIRSCHHORN: Hivyo tunataka kusoma kutoka file kwanza na - hebu kuweka kwamba haki hapa. Kusoma kutoka chanzo faili. Na kisha, tunafanya nini baada ya sisi kusoma kutoka chanzo faili? Mtu mwingine? STUDENT 15: Andika katika marudio faili? JASON HIRSCHHORN: Sisi kuandika marudio file, na - OK. Nini kingine ni sisi kukosa? Mtu mwingine ambaye si mimi kutokana na mstari wa kanuni bado - ya pseudocode. Yeah. STUDENT 16: Labda unaweza daima kuangalia kama kuna kitu kusoma kwa, kama mstari wa pili? Hiyo ni kama mstari wa pili, kuona kama ipo. [ELECTRONIC BEEP] JASON HIRSCHHORN: Oops. Hiyo ni journaling programu yangu. Yeah? STUDENT 16: Yeah. JASON HIRSCHHORN: Hivyo kutoa ni mimi mara moja zaidi. STUDENT 16: Angalia kama kuna bado mstari wa pili kutoka chanzo faili kusoma. JASON HIRSCHHORN: OK. Hivyo sisi ni si kusoma mistari - walikuwa kusoma ka hapa - lakini wewe ni sahihi. Tunataka kusoma na kuandika mpaka kuna ka tena. OK. Na hivyo hizi lazima kweli kuwa indented kidogo, kwa sababu wao ni chini ya hapo. Haki? Mpaka tuko nje ya ka, tunakwenda kusoma kutoka chanzo faili na kuandika marudio file. Na basi, ni nini mwisho mstari wa pseudocode? Mtu ambaye si kutokana na mimi kitu bado. STUDENT 17: Karibu files? JASON HIRSCHHORN: Hasa. Karibu files. Hivyo kuna pseudocode yetu. Mimi naenda kuweka pseudocode katika gedit, na katika dakika kadhaa sisi itakuwa Kanuni hii pamoja. OK. Hebu kuanza kama kikundi. Nishant, nina file yangu mpya. Nimekuwa tu hii kufunguliwa up. Untitled hati 1. Nini jambo la kwanza mimi wanapaswa kufanya nini? Nishant: Ni pamoja na maktaba? JASON HIRSCHHORN: OK. Nini maktaba? Nishant: stdio.h, stdlib.h, naamini? JASON HIRSCHHORN: OK. Stdlib kwa ni nini? Nishant: Mimi alisahau. JASON HIRSCHHORN: OK. Hivyo ni pamoja na stdio. Nifanye nini hata kabla ya Mimi kuanza coding? Nishant Andika header? JASON HIRSCHHORN: Jinsi Je, mimi kupata ni rangi? [INTERPOSING SAUTI] Nishant: Je, wewe kupata rangi? JASON HIRSCHHORN: Jinsi mimi rangi coding? Nishant: Mimi sijui. Oh. Ila. JASON HIRSCHHORN: Ila. Ndiyo. Mimi lazima ila ni kama c.. Hivyo ila ni juu ya desktop kama cp.c. Tamu. Na kama nataka kupata style full pointi, kile lazima mimi ni pamoja na saa ya juu? Nishant: Unaweza kuandika jina lako, jina wa mpango, na lengo wa mpango pia? JASON HIRSCHHORN: Inaonekana nzuri. Bora. Hivyo wameweza kuanza sisi mbali kikamilifu. # Ni pamoja na - tutaweza pia kuandika - OK. Hivyo mimi nadhani nina wote kuweka kwenda. Ambaye ana mstari wa kwanza wa kanuni kwa ajili ya mimi - au mistari ya kwanza ya kificho kwamba itachukua ili kukidhi wetu wa kwanza maoni katika pseudocode? You. STUDENT 18: Je, si ni kuwa na int argc, na kisha char * argv? JASON HIRSCHHORN: Nadhani wewe ni haki. Hebu mabadiliko hayo int kuu, paren wazi, int argc, comma, char * argv? Kama hiyo? STUDENT 18: mabano. JASON HIRSCHHORN: mabano. Open bracket, bracket karibu, karibu mzazi. Perfect. Sasa naweza kuchukua amri ya mstari wa hoja. OK. Kuhakikisha sisi ni kupewa files mbili. Unaweza kunipa kuwa vilevile. STUDENT 18: Kama argc - moja hii haina sawa 3. JASON HIRSCHHORN: Kama paren wazi argc haina sawa 3? STUDENT 18: Yeah, kurudi 1 au kitu chochote. JASON HIRSCHHORN: Sorry. STUDENT 18: Return 1 au kitu chochote. JASON HIRSCHHORN: Kurudi 1. OK? Kubwa. Kufungua files zote mbili. Ambao wanaweza kusaidia mimi kufungua files wote wawili? Ambaye si kunipa code bado? Kurt? KURT: Kwa hiyo mechi zote F-I-L-E nyota chanzo. JASON HIRSCHHORN: Mimi kwenda kuchukua vowels. Wale ni baridi. Ni kama Tumblr. STUDENT 18: Usawa fopen - JASON HIRSCHHORN: Usawa fopen? STUDENT 18: Open paren, argv, wazi bracket. JASON HIRSCHHORN: Ngoja. Sorry. Open paren. OK. STUDENT 18: Yeah. Argv ndogo 1. JASON HIRSCHHORN: Sub 1? STUDENT 18: Yeah. Argv bracket wazi 1 - ndiyo. Na kisha comma, na kisha wazi mara mbili quote, r, mara mbili quote, paren karibu, semicolon. JASON HIRSCHHORN: Sweet. Na nini kuhusu mtu mwingine? STUDENT 18: sawa sana, lakini badala yake ya S-R-C, utaweza kuiita D-S-T. JASON HIRSCHHORN: Oo! Mimi kama hiyo. STUDENT 18: Tu D-S-T. Yeah. Na kisha argv, bracket wazi, 2. Yeah. Na kisha w badala ya r. Yeah. JASON HIRSCHHORN: Mkuu. Ijayo wanandoa wa mistari. Pia, kama mtu yeyote ana mambo ya kuongeza mistari kwamba tumefanya, kujisikia huru na kuongeza wale vilevile. Kuangalia kuhakikisha wala null. Ambaye anaweza nipe code mimi haja ya kukidhi kuwa mstari wa pseudocode? Archer. ARCHER: Kama src sawa na usawa NULL au DST sawa na usawa NULL, basi kurudi - JASON HIRSCHHORN: Nini? ARCHER: Kurudi 2? JASON HIRSCHHORN: Kurudi 2. Hivyo kama paren wazi src sawa na sawa na NULL, au - chochote kile thing's - bomba? Bomba? Tutaweza kuiita bomba. Bomba, bomba, DST sawa na usawa NULL, kurudi 2. OK? Mpaka tuko nje ya ka - sisi aina ya skipped juu ya hatua hii kutoka pseudocode sehemu ya kwenda hapa. Lakini mpaka tuko nje ya ka - gani kwamba sauti kama? Ni aina gani ya C muundo - lakini mimi si kutumia muundo wa neno, kwa sababu sisi ni kwenda kuanza kutumia kwamba katika kesi nyingine - lakini C chombo gani kwamba sauti kama? STUDENT 19: kitanzi. JASON HIRSCHHORN: kitanzi. Inaonekana kama kitanzi. Hivyo ambaye anaweza nipe mstari wa kwanza ya kitanzi code hapa hapa? Unaweza pia kuchukua ni aina gani ya kitanzi unataka, kama wewe nipe mstari wa code. Kuna aina tatu. Unaweza kupata kuchukua. Napenda kupendekeza mmoja wa wale. Avi. Ambayo moja mnataka nini? AVI: Kwa ajili ya. JASON HIRSCHHORN: Kwa ajili ya. AVI: INT i sawa na sifuri. JASON HIRSCHHORN: OK. AVI: Hii sehemu mimi nina uhakika juu. Lakini i ni chini ya ukubwa ya nyota chanzo? Mimi nina uhakika ya kwamba. JASON HIRSCHHORN: OK. AVI: Kwa sababu unataka ukubwa wa faili, sawa? JASON HIRSCHHORN: Basi pengine hii si kutupa ukubwa halisi faili katika bytes. Hivyo kile kingine tunaweza kufanya? Ni aina nyingine ya kitanzi ni nini? Au lazima sisi fimbo na kitanzi kwa? STUDENT 20: Je, unaweza kufanya wakati kitanzi? Na kisha, nini d kufanya ni you'd - kwa sababu tuna char * kwa file. Hivyo kama sisi tu kuweka incrementing kwamba mpaka tunatarajia kupata NULL tabia katika mwisho wa? Au hakuna, ni kwamba si jinsi files kazi? JASON HIRSCHHORN: Kwa hiyo tunaweza kuweka incrementing * Char mpaka sisi kupata NULL - STUDENT 20: Kimsingi kuendelea tabia kwa tabia ya mpaka sisi kugonga mwisho wa faili. JASON HIRSCHHORN: Ndiyo. Hivyo kwamba ni nini tunataka kufanya. Tunataka kuendelea kusoma, tabia ya na tabia, mpaka sisi kupata mwisho wa faili. STUDENT 20: Yeah. Kupata - nini mwisho au kuacha ishara mwishoni mwa faili asilia. JASON HIRSCHHORN: OK. Hivyo wakati sisi kupata mwisho wa file - jinsi gani tunajua tumekuwa kufikiwa mwisho wa faili? Kama mimi nina wito - hivyo hebu hatua nyuma. Ni kazi gani? Hebu kwenda line haki hii hapa. Kusoma kutoka chanzo faili. Ambaye anaweza nipe kuwa mstari wa kanuni? STUDENT 21: Fscanf? JASON HIRSCHHORN: Fscanf. OK. Nini kama nataka kusoma, sana hasa, byte moja? STUDENT 21: mimi sijui. JASON HIRSCHHORN: OK. Hata rahisi kuliko fscanf - ni nini - Mimi nataka kusoma kutoka chanzo faili? Kusoma kutoka chanzo faili. Nini kazi - yeah. STUDENT 22: Ni fread? JASON HIRSCHHORN: Fread. Nadhani hebu fimbo na kwamba moja kwa sasa. Ni aina gani ya hoja haina fread kuchukua? STUDENT 22: Pengine aina ya faili, na kisha eneo katika faili? JASON HIRSCHHORN: Naweza aina hapa kufikiri ni aina gani ya hoja fread inachukua? WANAFUNZI nyingi: Man fread. JASON HIRSCHHORN: Man fread na fwrite. Inaonekana kama wao hutegemea nje pamoja. Hivyo fread inachukua hoja ngapi? STUDENT 23: Nne. JASON HIRSCHHORN: Ni inachukua nne hoja. Inachukua pointer, ukubwa, na kwamba kitu, ambayo ni weird, na baadhi ya faili. OK? Hebu kusoma kuhusu haki hapa. "Kazi fread wasomaji n memb mambo ya data, kila ka ukubwa muda mrefu, kutokana mkondo alisema na mkondo, kuzihifadhi katika eneo uliotolewa na pointer. " Hivyo hoja nne. Kwa nini si mimi tu nakala hii, na kuweka haki hapa. OK. Kwa hiyo nani anaweza kuanza kujaza hoja hizi kwa ajili yangu? Avi. AVI: Chukua nje ni batili. Kuweka tu src. Kuchukua pointer na nyota. Kuweka src. Kisha - JASON HIRSCHHORN: Kwa hiyo mimi nina kwenda kuacha huko, kwa sababu hiyo sahihi. Wewe ni haki kwa src, lakini ambapo lazima src kwenda? [INTERPOSING SAUTI] JASON HIRSCHHORN: Ni lazima kwenda zaidi ya hapa. Hiyo ni src - src yetu ni aina. Hebu tuangalie hapa. Hii ni kuuliza kwa ajili ya aina FILE *, sisi kweli kwa kawaida kuwaona kama hiyo. Hivyo hii ni kuuliza kwa hoja ya aina ya faili * aitwaye mkondo kwamba ni src. OK? Ukubwa gani ya mambo ya kufanya tunataka kusoma? Mimi niliwapeni hii katika tatizo maelezo. STUDENT 24: Moja byte wakati huo. JASON HIRSCHHORN: One Byte. Jinsi kubwa ni byte? Ukubwa wake ni katika ka, hivyo nini naweza kuweka sahihi huko? STUDENT 25: One. JASON HIRSCHHORN: One. Haki. Ukubwa wake ni katika kitengo cha Byte, hivyo 1 ni 1 Byte. Jinsi wengi hawana nataka kusoma wakati huo. STUDENT 26: Moja? JASON HIRSCHHORN: Jambo moja. Mimi nataka kusoma jambo moja ya ukubwa 1, moja bite wakati huo. Na ni wapi mimi kuweka yake, mara moja mimi kusoma? STUDENT 27: Destination? JASON HIRSCHHORN: Hivyo siwezi kuweka ni moja kwa moja katika marudio. STUDENT 28: Wewe ni gonna kuweka ndani pointer tatu? STUDENT 27: Kwa marudio. JASON HIRSCHHORN: OK. Yeah. STUDENT 29: Unaweza kutangaza kitu kutenda kama kuhifadhi muda mapema. JASON HIRSCHHORN: OK. Nipe hiyo. STUDENT 29: file nyingine pointer, labda? JASON HIRSCHHORN: OK. Hivyo hii ni batili nyota - ni aina utupu nyota, hivyo haina kuwa file pointer. Na kama mimi nina kusoma byte moja, ambapo itakuwa nafasi nzuri kuhifadhi byte moja? STUDENT 29: safu? JASON HIRSCHHORN: safu. OK. Na kile kingine ni kitu ambacho ni tu ukubwa byte moja? STUDENT 30: char *? STUDENT 29: Yeah. JASON HIRSCHHORN: * Char si byte moja. STUDENT 29: char. JASON HIRSCHHORN: char ni byte moja. Haki? Hivyo basi piga buffer hii ni generic jina kutumika kwa ajili ya mambo haya ya kuhifadhi kitu kwa muda. Basi, mimi kujenga buffer. Haki? Lakini haina kuchukua utupu *. Hivyo labda wewe ni sahihi, kwamba lazima buffer ya ukubwa 0. Hivyo maduka moja - haki. Kwa sababu haki hii hapa - Char buffer ni tabia, lakini hii inachukua utupu * - pointer. Hivyo mimi naweza kufanya hivyo na sasa buffer ni pointer. Nini kingine unaweza kufanya nini? STUDENT 31: Kuweka nyota karibu na Char. JASON HIRSCHHORN: mimi naweza nimeiumba * Char. OK. Nini kitu kingine mimi naweza kufanya? Au hebu kwenda na hii moja. Char * buffer, ili kile mimi kuweka katika hapa? STUDENT 31: Buffer. JASON HIRSCHHORN: Buffer. Buffer ni pointer kwa char. Na katika eneo hilo, sisi ni kuweka Byte moja ya kitu tumekuwa kusoma. Yeah. Avi. AVI: Just swali haraka. Je, unataka malloc buffer? JASON HIRSCHHORN: Nani unaweza kujibu swali hilo? STUDENT 32: Naam, Ni kweli haina hatua ya kitu chochote hivi sasa, hivyo - JASON HIRSCHHORN: Lakini kufanya tunataka malloc yake? STUDENT 32: Kama ungekuwa na kufanya hivyo kwamba njia, mimi nadhani, yeah, kwa sababu wewe d haja ya mahali fulani kwa kuwa na uhakika na. JASON HIRSCHHORN: Je, sisi na malloc yake? STUDENT 33: Kama wewe ni kwenda kwa kuitumia nje ya kitanzi. JASON HIRSCHHORN: Je, sisi kwenda kuitumia nje ya kitanzi? STUDENT 34: Ndiyo. STUDENT 35: Ngoja. Je, tunataka kutangaza katika kitanzi zaidi ya? JASON HIRSCHHORN: Kwa hiyo mimi nadhani tuna Pseudo Wakati baadhi ya kitanzi hapa kwamba sisi ni kujaribu kufikiri, kwamba sisi si wamezipata kwa bado. Hatuna haja ya malloc yake. Sisi ni kazi katika kuu, ni kwenda tu kutumika ndani ya kitanzi hii. Haina haja ya kuwepo nje hii. Hivyo inaweza kuwa kutofautiana ndani. Una pointer kwa variable ndani. STUDENT 36: Lakini si akizungumzia kitu chochote. JASON HIRSCHHORN: Hapana, siyo kuanzishwa na kitu chochote. Lakini sisi siyo kwenda kuitumia pia. Tunakwenda kuweka kitu katika mara ya kwanza sisi matumizi yake. Hivyo kwamba inaonekana OK. Hivyo hatuna haja malloc hapa. Na nadhani ni sawa kama ni. OK. Tuna line fread. Hebu kufanya line ijayo. Kama tunataka kuandika file, ni nini kazi nzuri ya kutumia kufanya hivyo? STUDENT 37: Fwrite? STUDENT 38: Fprintf? JASON HIRSCHHORN: Fprintf ni moja. Nini mtu mwingine? STUDENT 39: Fwrite. JASON HIRSCHHORN: Fwrite. Na kwa madhumuni yetu, fwrite, ambayo tuliona hapa, ni pengine ni bora uchaguzi. Inachukua hoja nne pia. Nishant, unaweza kutoa mimi hoja? Nishant: moja ya kwanza ya wanaokwenda kuwa buffer tu. JASON HIRSCHHORN: OK. Nishant: moja ya pili ya tu kwenda kuwa 1. Theluthi moja kwenda kuwa 1. Na moja ya nne ni kwenda kuwa DST. JASON HIRSCHHORN: Je, mtu yeyote na maswali yoyote kuhusu kwamba line? Hiyo inaonekana ni nzuri. OK. Hivyo sasa inaonekana kama kitu kimoja sisi ni kukosa - kwa kweli, hebu kuandika line hii ya mwisho. Karibu files. Ambao wanaweza kumaliza sisi up kuandika mwisho mistari miwili haya? Ndiyo. Sorry, nini jina lako? LUCY: Lucy. JASON HIRSCHHORN: Lucy. LUCY: Fclose src na kisha fclose marudio. JASON HIRSCHHORN: Fclose, paren wazi, src, paren karibu, semicolon. Na fclose - yeah? LUCY: Open mabano, DST na kisha semicolon. JASON HIRSCHHORN: Mkuu. Na kile lazima mimi ni pamoja na mwishoni? LUCY: Kurudi 0. JASON HIRSCHHORN: Kurudi 0. Je, nina? Tu swali. Je, sisi kuwa ni pamoja na kurudi 0? WANAFUNZI Nyingi: Hapana JASON HIRSCHHORN: Hapana Kuu gani moja kwa moja kama kupata hadi mwisho. Lakini nadhani ni nzuri na pamoja na hiyo waziwazi. Hasa wakati sisi ni kurudi nyingine mambo katika mpango. OK. Hii ni nini sisi ni kukosa - Wakati gani? Ambao wanaweza kufikiria baadhi - ina maana ya baadhi ya mambo inaweza kwenda huko? Hata kama ni tu katika baadhi pseudocode kama lugha? Sisi ni kile kwa kweli - nini tunataka kwenda mpaka? Yeah, Lucy. LUCY: mwisho wa faili. JASON HIRSCHHORN: mwisho wa faili. Basi je, wewe maana mwisho wa faili? LUCY: Mara baada ya kufikia mwisho wa faili, kuacha. JASON HIRSCHHORN: OK. Hivyo mara moja sisi kufikia mwisho wa file. Jinsi gani sisi kujua wakati tumekuwa kufikiwa mwisho wa faili? STUDENT 40: Nadhani buffer itakuwa kuweka null. STUDENT 41: Buffer ni alitangaza ndani ya kitanzi. JASON HIRSCHHORN: Kwa hiyo unafikiri buffer itakuwa kuweka null. Kwa nini buffer kuweka null? STUDENT 40: Kwa sababu wakati wewe fread, wewe ni kujaribu kuweka kitu ndani ya buffer. JASON HIRSCHHORN: OK. Hivyo wewe ni kufikiri fread - wakati tumekuwa kufikiwa mwisho wa file, ni nini fread kwenda kufanya nini? Nadhani hiyo ni swali tuna kufikiri. Gani fread nini? Je, ni kuweka NULL katika buffer, au gani kufanya kitu kingine? Jinsi gani tunaweza kufikiri nini ni gani? STUDENT 42: Man. JASON HIRSCHHORN: Man. Hivyo hebu angalia zaidi ya hapa. Kurudi thamani. On mafanikio, fread na fwrite kurudi idadi ya vitu kusoma au maandishi. Idadi hii ni sawa na idadi ya ka kuhamishiwa tu wakati ukubwa ni 1. Kama kosa hutokea, au mwisho wa file ni kufikiwa, thamani ya kurudi ni short bidhaa kuhesabu au 0. Hivyo kwa madhumuni yetu, kama fika fread mwisho wa faili, na wasomaji kutoka mwisho wa faili, kuna kitu kushoto kusoma, nini ni kwenda na kurudi? STUDENT 43: Zero? JASON HIRSCHHORN: Nini? STUDENT 43: Zero? JASON HIRSCHHORN: Zero. Ni kwenda na kurudi sifuri. Hivyo tunajua kwamba fread, wakati tumekuwa kufikiwa mwisho wa file, ni kwenda kurudi sifuri. Jinsi gani tunaweza kutumia kwa faida yetu? AVI: Unaweza kutangaza variable nje ya kitanzi aitwaye kuangalia. Kama hundi sawa na - kwa sasa - moja. JASON HIRSCHHORN: OK. AVI: Na kisha unaweza kuweka IF taarifa sahihi baada ya fread kusema kama fread sawa na sifuri - no. JASON HIRSCHHORN: Nani inaweza kusaidia Avi nje? AVI: Nini thamani akarudi na fread? JASON HIRSCHHORN: Sisi tu akaenda juu ya hilo. AVI: Je, wewe kuwakilisha yake? JASON HIRSCHHORN: Kwa hiyo anarudi - hebu kuangalia juu hapa - kuirudisha size_t, ambayo kimsingi ni integer. Hivyo anarudi integer. Na kwa upande wetu, itakuwa kurudi 1 au 0 - 1 kama ni kusoma jambo moja - byte moja, na 0 kama tumekuwa kufikiwa mwisho. Hivyo kama fread - yeah? STUDENT 45: Je, si wewe tu kuweka full fread (buffer, 1, 1, src) katika kitanzi wakati? JASON HIRSCHHORN: Hivyo wewe kupendekeza kufanya hivyo ndani ya huko? [INTERPOSING SAUTI] JASON HIRSCHHORN: Kushikilia. Hivyo sisi ni kupiga vita ya kwamba. Hivyo wewe ni kupendekeza kuweka ndani ya fread huko? Tufanye pia hoja kama unataka kufanya hivyo? STUDENT 45: buffer nje. JASON HIRSCHHORN: Tunapaswa pia hoja hii hapa nje. STUDENT 45: Lakini je, kwamba mara kwa mara hoja hiyo mbele? [INTERPOSING SAUTI] JASON HIRSCHHORN: OK. Hivyo hii ni nini Okshar mapendekezo. Sisi kujenga buffer yetu. Sisi INGAWA fread, basi sisi fwrite. Mawazo juu ya hili? STUDENT 46: Swali langu tu ni, je, ni kweli nitafanya amri fread? JASON HIRSCHHORN: Mkuu swali. Wakati wewe ni kuweka kazi wito ndani ya hali, je, hiyo kazi wito kutekeleza? Tumeona mifano ya hili kabla ya. Haki? STUDENT 46: OK. Yeah. Inafanya hivyo kutekeleza. JASON HIRSCHHORN: Tumeona mambo kama kwamba kabla, ambapo tuna kazi wito ndani ya hali hiyo. Je, hiyo kazi wito kutekeleza? Ndiyo. Hivyo jibu ni ndiyo. Wito huu kazi nitafanya. Lakini tena, ni nini tunataka? Ni njia moja tunaweza kufikiri nini nje kama ni nini tunataka? WANAFUNZI nyingi: kuendesha? JASON HIRSCHHORN: Tunaweza kukimbia. Lakini kabla ya sisi kufanya hivyo, tunaweza pia sababu kwa njia hii. Kama - kusema tuna byte moja katika yetu faili, tutaweza kupata hapa, tutaweza kupata kanuni hii. Hii kukimbia. fread atarudi byte moja na kuhifadhi katika buffer. Na hii itakuwa kutathmini 1, haki, baada ya yeye anarudi 1. Hivyo wakati 1. Je, hiyo inamaanisha code ndani ya Kitanzi wakati nitafanya? STUDENT 47: Yeah. Ni kweli. JASON HIRSCHHORN: Ndiyo. 1 ni ya kweli. Siyo 0. Hivyo code ndani ya hapa nitafanya. Hivyo tutaweza kuandika kwamba. Tutaweza kuhamia hii line mara nyingine tena. Sasa tuna - sisi ni mwisho wa file yetu. Sisi kusoma kutoka mwisho wa faili yetu, kwa sababu sisi tu alikuwa byte moja ndani yake. Fread anarudi 0, maduka kitu katika buffer. Mimi uaminifu hawajui nini maduka katika buffer. Tunaweza pengine kuangalia juu kuona nini anafanya. Kwamba mimi uaminifu hawajui. Hatujui, ambaye anayejali nini maduka katika buffer? Lakini haina kurudi 0. Na wakati 0 kutekeleza? INGAWA 0 si nitafanya. Hivyo basi tutaweza hoja chini hapa. Basi hebu kupata show ya mikono kama hii ni kanuni sisi lazima kukimbia, au kama sisi lazima kufanya mabadiliko ya kwanza. Hivyo kama unadhani - una kupiga kura. Kama unadhani sisi lazima kukimbia kanuni hii kama ni, tafadhali kuongeza mkono wako. OK. Kuna moja - je, una swali, wasiwasi? Yeah. STUDENT 48: Baada ya sisi hoja buffer nje ya kitanzi, kufanya sisi na malloc yake? JASON HIRSCHHORN: Mkuu swali. Baada ya sisi hoja buffer nje ya kitanzi, je, sisi na malloc yake? Hili ni swali upeo. Kama sisi initialize buffer nje ya kitanzi huu, ni kuwepo ndani ya kitanzi? WANAFUNZI nyingi: Ndiyo. JASON HIRSCHHORN: Ndiyo. Wigo wake inashughulikia ndani ya kitanzi, na, kwa kweli, kitu chochote chini yake ndani ya ya kanuni hii, ikiwa ni pamoja mambo ndani ya hapa. Hivyo hatuna haja ya malloc yake. Ni variable za mitaa, na wigo wake bado ni pamoja na kitanzi. STUDENT 49: Je, tunahitaji bure it? JASON HIRSCHHORN: Je, sisi haja ya bure buffer? STUDENT 49: Yeah, kama sisi si malloc. JASON HIRSCHHORN: Je, sisi haja ya bure buffer? Sisi hawana. Tena, ni variable mitaa, hivyo hatuna haja ya bure yake. OK. Hebu kuona nini kinatokea. Hivyo ni uninitialized. Hiyo ilikuwa ni nini kitu ambacho Marcus mapendekezo ya awali. Hivyo tuna makosa ambayo, variable buffer ni uninitialized wakati kutumika hapa. Jinsi gani tunaweza kurekebisha hili? STUDENT 50: malloc yake? STUDENT 51: Usawa NULL? STUDENT 52: Sema buffer sawa na NULL. JASON HIRSCHHORN: OK. Inaonekana ni nzuri. Tuna sasa. Hebu kujenga kitu kujaribu kuiga. Hivyo tuna faili wetu maandishi. Jinsi gani tunaweza kuendesha mpango huu? Yeah. STUDENT 53: Unaweza kufanya dot kufyeka cp, test.txt. Na kisha unaweza jina la faili mwingine ambayo itakuwa kuhifadhi ndani. JASON HIRSCHHORN: OK. Tutaweza kuiita out.txt. Cool? Seg kosa. Mawazo juu ya seg kosa? Hii ni kubwa. Jinsi gani tunaweza kujua ambapo seg kosa hilo ni la? Nini? STUDENT 54: GDB. JASON HIRSCHHORN: GDB. Sisi kuendesha GDB kwa kuandika GDB dot slash, jina la programu yetu. Hakuna hoja ya mstari amri huko. Sisi ni kwenda kuweka Breakpoint katika kuu. Kama mimi nataka kuanza GDB, nini mimi? STUDENT 55: R. JASON HIRSCHHORN: R. Na kisha nini? STUDENT 55: mabishano? JASON HIRSCHHORN: Kisha amri ya mstari wa hoja. Hebu kutembea kwa njia ya. N ni kuchukua mimi tu mstari kwa mstari. Mimi nina kwenda mpaka Mimi kupata seg yangu kosa. Kuna seg yangu kosa. Inaonekana kama fread unasababishwa seg yangu kosa. Mimi najua fread unasababishwa seg yangu kosa, kwa sababu hiyo ilikuwa line sisi tu kunyongwa. Na kitu pekee ambayo ilikuwa kinachotokea katika line - mambo mawili yaliyokuwa yanatokea. Fread alikuwa anaenda, na kisha tulikuwa kufanya baadhi ya kuangalia muda. Mimi niko tayari bet kwamba wakati kuangalia hakuwa na kusababisha seg yangu kosa. Uwezekano mkubwa zaidi, fread mara kusababisha seg yangu kosa. Mimi pia kuona kitu hapa, memcopy. Kumbukumbu nakala. Inaonekana kama kusonga kumbukumbu kutoka eneo moja hadi nyingine. Inaonekana kama kitu ambacho kingetokea katika fread, labda baadhi ya kumbukumbu kuhama kutoka hapa hapa. Hebu kwenda kwa njia hii tena. Je, mimi kuanza ni juu ya na kuendesha tena? Yeah. STUDENT 56: Je, unahitaji kuweka Ampersand kabla ya buffer? JASON HIRSCHHORN: Kwa hiyo Ampersand kabla ya buffer angenipa ya barua pepe ya buffer, ambayo ni char *. Hebu kukimbia kwa wakati huu moja zaidi. Je, mimi kukimbia kwa njia hiyo mara moja zaidi? STUDENT 57: Je, unaweza tu aina kukimbia tena? JASON HIRSCHHORN: Aina tu kukimbia tena. Hivyo sisi siyo kwenda kwa kutekeleza mstari huu. Hivyo buffer ni NULL pointer. Sahihi? Ni akizungumzia - hebu angalia. Kama tuna yetu - kuchora picha ya haraka ya hii. Je, kila mtu kuona kama Mimi kuandika juu ya hapa? Hivyo katika stack, tuna ndani kutofautiana na ni kuitwa buffer, na ni pointer kwa char. Nini anwani ni char hii saa? STUDENT 58: 0x0. JASON HIRSCHHORN: Haki. Hiyo ni nini hii ni. Katika hapa, ndani ya buffer, ni kuhifadhiwa 0x0. Hiyo ni nini tuna - kuanzisha tuna haki ya sasa. Hivyo mstari huu, fread, unaweka kitu kutoka chanzo wapi? Ndani ya boksi hii au sanduku hili? Ambayo sanduku? Kushoto sanduku au sanduku sahihi? Hii sanduku haki. Kinachofuata ni pointer, na kuiweka katika hapa. Wakati sisi kujaribu na kugusa kumbukumbu katika eneo 0, je, sisi kupata? kosa segmentation. Hiyo ni hitilafu tuna haki ya sasa. Yeah. STUDENT 59: Je, si una kuweka nyota buffer? Au hapana? Kwa fread? JASON HIRSCHHORN: Kwa hiyo fread inachukua pointer. Hivyo hupita katika buffer. Na kisha utakuwa de-rejea mahali fulani ndani ya fread. Lakini tena, tuliona, inachukua pointer. Hatuna haja ya kupita nyota buffer. Hiyo itakuwa kupita vyovyote hapa. Na kwamba pengine kutupa makosa kwa sababu sisi ni de-referencing yake. Haki? Wakati sisi de-rejea pointer hii, wakati sisi kujaribu kupata eneo hili, sisi ni kupata makosa - segmentation wetu kosa. Hivyo - oops. Sisi ni kwenda kuacha nje ya GDB. Line yetu - tatizo letu - ni haki hapa juu ya mstari huu. Na ni tatizo kwa sababu ya mstari huu. Jinsi gani tunaweza kujenga sanduku kwamba ni kupatikana katika fread. Haki? Tunahitaji kujenga sanduku hiyo ni moja byte kubwa, ukubwa wa char. Lakini tunahitaji sanduku kwamba kuwa kupatikana wakati kazi hii inatimiza. Hivyo ambapo - yeah. Mawazo yoyote? STUDENT 60: Tu kuweka kama tabia yoyote random. Tu kufanya char buffer usawa tabia. Na kisha, wakati una buffer hapo - JASON HIRSCHHORN: Ngoja. Char buffer? Hivyo hakuna nyota? STUDENT 60: Yeah. Kuchukua nyota. Sawa na tabia ya random. JASON HIRSCHHORN: OK. Basi nipe moja. STUDENT 60: Kama a au kitu. Na wakati una buffer huko, kutumia - STUDENT 61: Star? Oh no, Ampersand. STUDENT 60: Matumizi ya Ampersand. JASON HIRSCHHORN: OK. Na nini kuhusu katika fwrite? STUDENT 60: Matumizi ya Ampersand tena. JASON HIRSCHHORN: All wa kulia. Hivyo wazo yako, sisi kujenga char na kuweka kitu ndani yake, na kisha kuandika kwamba char. STUDENT 60: Yeah. JASON HIRSCHHORN: Nini wala watu kufikiri? STUDENT 62: Ni convoluted. JASON HIRSCHHORN: OK. Hebu kuteka nje. Hivyo wakati huu, mimi nina kwenda kuteka hii katika nyekundu juu ya stack hapa, na kisha sisi itakuwa na - ooh! Sorry. Hivyo wakati huu tuna kitu kinachoitwa buffer, na ni juu ya stack. Sahihi? Na sisi ni kuokoa ndani yake, awali. Basi tuna wito wetu kwa fread. Nini fread haina ni inachukua byte kutoka file yetu na kuiweka mahali fulani. Ni kuiweka katika kila kitu ni akizungumzia. Naam, kabla ya sisi na anwani hii - 0x0. Sasa nini anwani tuna gani? STUDENT 63: Kheri anwani buffer ni. JASON HIRSCHHORN: Kheri anwani buffer ni. Ni pengine ni kwenda kuwa kitu kama hicho. Pengine ni kwenda kuanza na b na f, na kisha kuwa na wengine sita hexadesimoli tarakimu. Je, si jambo. Baadhi ya anwani. Na sisi ni kupita anwani kwamba in Na sisi ni kwenda kuweka moja wetu byte kitu katika anwani hiyo. Hivyo sisi ni kwenda kuweka moja wetu byte kitu ndani ya hapa. Na kisha tunakwenda kuandika kutoka nini milele ndani hapa. Je, mtu yeyote una maswali yoyote kuhusu hilo? Ambaye anadhani kanuni hii itakuwa kazi? Kunyanyua mkono wako kama unadhani kanuni hii kazi. Una kuchukua msimamo. Na ambaye anadhani kanuni hii si kazi? Kuongeza mkono wako. Kila mtu mwingine lazima kuongeza mikono yao. OK. Michael, ambapo ni wewe wamesimama? MICHAEL: Siwezi kuamua. Aina ya katikati. JASON HIRSCHHORN: Wewe ni katikati. Kuchukua moja. MICHAEL: Mimi itabidi imani na kusema itakuwa kazi. JASON HIRSCHHORN: OK. Itabidi imani na kusema ni kazi? Nini kilitokea? [INTERPOSING SAUTI] JASON HIRSCHHORN: No kosa seg. Jinsi gani tunaweza kuangalia kuona kama mambo mawili ni sawa? Files mbili ni sawa. STUDENT 64: tofauti. JASON HIRSCHHORN: tofauti. Hundi tofauti tofauti kati ya files mbili, na kama anarudi kitu, wao ni kufanana. Na kama sisi kufungua, sisi kupata faili yetu. Ili kwamba ilikuwa ufumbuzi sahihi. Hebu tuangalie nyuma saa yake mara moja zaidi. Sisi kwa kweli hata haja ya initialize. Ni pengine kuangalia kidogo safi kama hakuwa na kuweka kitu random huko. hatua kuwa, unahitajika ili kujenga baadhi nafasi ya kuhifadhi kitu kutoka fread na kuchukua kitu nje ya fwrite. Na kwamba jambo na kuwa ama ndani kutofautiana juu ya stack - wewe nilikuwa ve malloc'd baadhi ya nafasi. Hivyo sisi kweli inaweza kuwa na malloc imeandikwa hapa, na kwamba ingekuwa kazi. Na kisha sisi ingekuwa kuhifadhi mambo yetu mahali fulani juu ya chungu. Lakini hii ni kweli, pengine, ufumbuzi kifahari zaidi. Tu kujenga baadhi ya nafasi ya stack kwa mambo haya kwenda. Napenda kuwa na maoni wengine wawili. Kama ungekuwa na kuchukua kugeuka katika hili, na kisha kupata bao juu ya hili, maoni yangu itakuwa kama ifuatavyo. Hizi 1 hapa, na mimi, kuangalia kama idadi uchawi. Hii 1, katika suala la fread, hufanya akili. Hiyo ni idadi ya mambo kusoma na kuandika. Lakini hii haki ya mmoja hapa lazima pengine kuwa kitu kingine. Kwa hiyo kile ni moja ya ufumbuzi? STUDENT 65: Ukubwa wa Byte. JASON HIRSCHHORN: Kama kwamba? STUDENT 65: Ukubwa wa char. JASON HIRSCHHORN: Ukubwa wa char. Yeah, byte ni si aina. Hivyo ukubwa wa char kazi. Tunaweza kuwa na, juu ya kanuni zetu, # hufafanuliwa kwamba. Aitwaye kitu Byte na ni kweli char. Kwa kweli, mbinu bora hata anaweza kuwa hii - uint. Mtu yeyote kujua kwamba ni? Sorry. Mimi ni nyuma. Kusubiri, no. Njia ambayo haina ni kwenda? Mtu yeyote kujua kwamba ni? Yeah. STUDENT 67: zinatakiwa kusaidia sanifisha katika mifumo ya mambo ambayo na - kama integers unsigned kuwa na 8 ka? JASON HIRSCHHORN: Hiyo ni sahihi kabisa. On mashine mbalimbali, ukubwa wa char - si kawaida char. Chars ni kawaida byte moja. Lakini ukubwa wa aina nyingine data ni ukubwa tofauti juu ya 32-bit mashine dhidi ya 64-bit mashine. uint8_t ni daima 8 bits - daima byte moja. Na mimi haja ya pamoja na kwamba kiwango int header file. Basi sasa, hii ingekuwa pengine imekuwa njia bora ya kuandika kanuni hii. Basi, mimi kujikwamua idadi uchawi. Na mimi pia mantiki zaidi aina kwa buffer. Siyo tu char, ni Byte, ambayo ni nini tunatarajia kuwa. Na hapa, tumekuwa kweli kuwa kidogo imara zaidi. Sisi siyo kuiita char, ambayo - labda, ambaye anajua - inaweza kuwa tofauti ukubwa juu ya mashine mbalimbali. Sisi ni kweli kusema hii ni hasa Byte moja, daima, bila kujali. Na kama sisi kuangalia hapa, sisi kufanya cp. Uh-oh. Nini kilitokea? STUDENT 68: Ni wanaweza kimewashwa. JASON HIRSCHHORN: Nini? STUDENT 69: Je, ni? STUDENT 70: You hawakuwa kufafanua kama aina. STUDENT 71: Lakini ni lazima kuelezwa katika kiwango. STUDENT 72: Nini kinaendelea? STUDENT 73: Je, kufafanua kuwa mechi zote? JASON HIRSCHHORN: Hivyo si # kufafanua. Kwa kweli, katika kesi hii, mimi nina kwenda kutumia typedef. Kwa sababu sisi ni kutumia kama aina katika eneo moja. Hivyo katika kesi hii, sisi kweli wanataka typedef kama sisi ni uchapishaji aina mpya Byte, na ni, kimsingi, hii. Ni tofauti kidogo kuliko # kufafanua. Na sasa, kanuni zetu kazi kikamilifu. Kwa hiyo, tena, # kufafanua inachukua kitu, nafasi yake kila mahali na mambo mengine. Ni tu jumla - shorthand kujikwamua idadi uchawi. Lakini katika kesi hii, kwa sababu tuko kutumia kama aina - haki hapa - ili kwa kwamba kazi, tunahitaji kwa typedef chochote byte ni. Na sisi ni kufafanua haki hapa. Siyo struct, ni kweli tu unsigned integer. Ni byte moja kwa muda mrefu. Kanuni hii itakuwa inapatikana online, na ninyi wote wanapaswa kuwa na haki sasa. Hivyo tuna - kamili - Dakika 13 kushoto kwenda juu ya tatizo kuweka 5. Nataka kutembea kwa njia ya copy.c pamoja, na kisha tutaweza majadiliano kwa ufupi juu ya sehemu nyingine ya kuweka tatizo. Hivyo basi mimi kuvuta up copy.c. Na jambo zuri ni, tumekuwa kweli tayari imeandikwa mengi ya kanuni hii. code tuliandika literally tu toka nje ya hapa wakati mimi nilikuwa kuandika hii juu yangu mwenyewe. Lakini hii ni copy.c, aina ya msingi kwa mara ya kwanza sehemu mbili za kuweka tatizo kwa whodunit.c, ambayo unahitaji kuandika, na resize.c. Recover.c, ambayo ni ya tatu na ya mwisho sehemu ya kuweka tatizo, si msingi mbali ya faili hii. Wewe ni kwenda haja ya kuandika kwenye faili kwamba, sisi kukupa template kwa kuwa faili, lakini ina kitu kufanya na copy.c. Lakini kwa sababu copy.c ni msingi kwa ajili ya kwanza sehemu mbili, tunakwenda kutembea kwa njia ya sasa, hivyo kuwa hisia nzuri ya nini anafanya. Na maoni kutoa baadhi ya mbali. Tumekuwa tayari imeandikwa baadhi ya hili. Kwanza, sisi ni kuhakikisha sisi kupata hoja tatu. Next, sisi ni kukumbuka jina la faili. Hivyo sisi skipped hatua hii wakati sisi kutolewa kitu yetu - wakati cp yetu. Lakini hapa, wao ni kufanya ni kidogo safi. Wao ni kuangalia ili kuhakikisha files wote ni nzuri, katika Mbali na kufungua yao. Tuliandika kanuni hii wote tu sasa, hivyo mimi nina si kwenda kukaa juu ya kanuni hii. Pili ni baadhi ya mambo ambayo ni maalum kwa aina ya files sisi ni kutumia, ambayo ni bitmap files. Bitmap files na baadhi metadata kuhusishwa na wao. Hivyo michache ya kwanza ya ka kukuambia juu ya faili. Wao si rangi ya pixel katika picha kwamba. Wao kukuambia juu ya faili. Na kama kusoma kwa njia ya kuweka tatizo, itabidi habari zaidi juu ya aina gani ya miundo metadata ni pamoja na bitmaps. Lakini hiyo ndiyo sababu tuna hii ya kwanza seti ya - kanuni hii hapa. Sisi ni kusoma metadata - vipande viwili vya metadata - file header na info header. Na sisi ni kuangalia baadhi ya sehemu kwa kuhakikisha kuwa ni kweli bitmap file kabla ya kuendelea. Na tena, hizi ni maelezo sisi hawana haja ya kwenda katika sasa. Kama unaweza kusoma kwa njia ya kuweka tatizo, utaelewa haya. Muda mrefu hadithi fupi, hizi ni kusema tu, hii ni bitmap faili, na kuthibitisha kwamba. Next, sisi ni kuandika wale kwa nje file. Tunaona kwamba hapa. Tunakuandikia nje pointer. Next, sisi ni kuamua padding. Hivyo tena, kama ni particularity na bitmap file, baadhi ya mistari ni pamoja na padding mwishoni. Na kama kusoma kwa njia ya kuweka tatizo, itabidi kujifunza zaidi kuhusu padding. Hii ni formula kupata padding. Muhimu kukumbuka - wakati mabadiliko ya kawaida ya bitmap faili, mabadiliko ya padding. Wakati mabadiliko ya kawaida ya faili, mabadiliko ya padding. Ni kamwe kwenda kuwa zaidi ya 3 - utakuwa 0 kupitia 3, umoja. Lakini wakati mabadiliko ya kawaida ya kitu, mabadiliko ya padding. Kama mimi tu na pixel moja katika mstari kwamba, mimi haja ka tatu ya padding, kwa sababu kila mstari ina kuwa mafungu ya nne ka kwa muda mrefu katika bitmap file. Lakini kama mimi mara mbili, aende kutoka pixel moja mbili pixel, ambayo kila mmoja, hebu sema, ni byte, basi mimi haja ka mbili za padding kufanya sawa sawa na minne. Hivyo wakati mimi mabadiliko ya kawaida ya kitu, Mimi haja ya kubadili kiasi ya padding mimi. Je, hiyo mantiki kwa kila mtu? Next, sisi iterate juu ya kila mstari, au kwa njia ya safu yote. Na kisha sisi iterate kupitia kila safu katika kila mstari. Sisi ni kutibu bitmap hii kama gridi ya taifa, kama tumekuwa kutibiwa bodi katika 15. Kama sisi kutibiwa matofali wakati sisi kuchapishwa yao juu ya screen. gridi ya safu na nguzo. Kisha - tuliona hii. Sisi kwa kweli tu kutolewa hii. Sisi aliumba baadhi ya kuhifadhi muda. Tunasoma katika huko, na kisha sisi kuandika nje. Hii ni nini hasa sisi tu alifanya. Next, kwa sababu mimi alisema kila line mwisho katika baadhi padding, sisi ruka juu ya kwamba padding - umri wa padding. Na kisha sisi kuongeza nyuma. Katika kesi hiyo, sisi ni kujenga hiyo hiyo file. Tuko tu kuiga. Hivyo line hii ni aina ya silly. Tunaweza literally tu kuweka padding in Lakini kama wewe mabadiliko ya kawaida ya faili, je, bado wanataka mstari huu? Hivyo kama sisi mabadiliko ya kawaida ya faili, wala sisi bado wanataka ruka juu ya padding zamani? STUDENT 74: Ndiyo. JASON HIRSCHHORN: Hivyo sisi kufanya. Kwa sababu hii, tena, mikataba na chanzo file. Sisi hawajali padding kutoka chanzo file. Tunataka kwenda kwa line ijayo. Lakini sisi si tu kuweka nyuma umri wa kiasi cha padding. Tunahitaji kuweka nyuma kiasi mpya ya padding. Hivyo wakati sisi ni kubadilisha ukubwa wa file, sisi bado wanataka ruka juu ya padding katika faili ya zamani - nini sisi ni kusoma katika kutoka. Lakini nini sisi ni kuandika kwa, tunakwenda haja ya kuweka nyuma baadhi ya tofauti idadi ya padding kwamba tumethibitisha. Yeah. STUDENT 75: utaratibu wa hizo mbili mistari haijalishi, sawa? Kwa sababu wewe ni utunzaji files tofauti. JASON HIRSCHHORN: Hasa. utaratibu wa mistari hizi mbili haijalishi. Sisi kuandika mstari huu. Hii ni hapa kwa ajili ya faili sisi ni kuandika kwa. Hiyo ni muhimu, ili tuweze kupata haki ya kiasi cha padding. Hii ina kukabiliana na file katika. Tunataka ruka haki juu ya padding. Hatutaki kusoma - kama sisi ni kusoma byte wakati huo, sisi hawajali wale ka padding. Tunataka hoja ya mstari wa pili. Hatimaye tu kama Lucy alitoa kwa ajili yetu, sisi karibu files na kurudi 0. Hivyo hii ni copy.c. Na sisi kweli aliandika - sisi ilitumia zaidi ya sehemu ya kuandika haya, kimsingi. Wewe alifanya hii. Hivyo hopefully una maana nzuri ya nini kinaendelea katika hapa. tofauti kubwa, uaminifu, ni tu sehemu hii ya kwanza ambayo inahusika na sura ya kipekee ya files bitmap. Hivyo nina kama slide yangu ijayo, nini tunahitaji kufanya nini? Naam, hebu fikiria kuhusu whodunit. Na kwa mtu ambaye kusoma kwa njia ya kuweka tatizo, sisi kufanya nini haja ya kufanya katika whodunit? Tu. Aleja. Aleja: Je, unaweza kuchukua nje sehemu ya kila pixel inaashiria kwamba nyekundu. Na kisha - aina ya? JASON HIRSCHHORN: OK. Hivyo kuchukua nje sehemu ya kila pixel inaashiria kwamba nyekundu. Hiyo ni karibu, lakini si yote. STUDENT 76: Naam, kuna njia tofauti ya kufanya hivyo. JASON HIRSCHHORN: OK. Nipe njia moja. STUDENT 76: Kuchukua nyekundu wote, na kisha kusisitiza bluu na kijani. JASON HIRSCHHORN: OK. Hivyo kutokana na njia hizo zote mbili - inaonekana kama sisi kuwapa pixel, ni ina nyekundu, bluu, na kijani ngazi. Tunataka kubadili kiwango jamaa wa nyekundu, bluu, na kijani, kulingana juu ya kwamba pixel. Ambapo katika kanuni hii tunapaswa kubadilika jamaa nyekundu, bluu, na kijani ngazi ya pixel huo. Baada ya tumekuwa kusoma - kabla ya sisi kuandika? Nipe line idadi. WANAFUNZI nyingi: 83. JASON HIRSCHHORN: 83. Hivyo haki hapa. Kwa whodunit, kanuni unahitaji kuandika lazima wote kwenda kulia huko. Na kwamba ni kanuni tu unahitaji kuandika. Kwa sababu, kama sisi kusikia, wote unahitaji kufanya ni kubadilisha hizi za bluu jamaa, nyekundu, na kijani ngazi kutoka kila pixel. Umeisoma katika, na sasa uko kwenda kuandika nje. Jinsi gani mimi kupata - kama mimi na jambo hili aitwaye tatu, haki hapa, na ni ya aina RGBTRIPLE - vizuri, kama sisi inaonekana katika bmp.h, nini ni RGBTRIPLE? STUDENT 77: Ni struct. JASON HIRSCHHORN: RGBTRIPLE ni struct. Tunaona kwamba haki ya chini hapa. Na hivyo kama nilitaka kupata, kusema, nyekundu kiwango cha struct, jinsi ya kufanya mimi kupata ngazi ya nyekundu ya struct hii? [CLASS murmurs] STUDENT 78: RGBTRIPLE.rgbtred? JASON HIRSCHHORN: Je, kwamba ni sahihi? STUDENT 79: Ni lazima kuwa mara tatu dot, badala ya RGBTRIPLE dot? JASON HIRSCHHORN: Triple. Triple ni variable za mitaa, hivyo hapa, hakuna kuyatumia hapa. Hivyo sisi tu kutumia dot nukuu. Hii nipe kiwango cha nyekundu. Kama mimi nataka mabadiliko hayo, mimi tu kuweka ni sawa na kupata kitu tofauti. Hivyo tena, mstari wa code wanapata variable hii ndani ya struct hii, na tunaweza kuweka kwa kitu kipya. Hivyo kwa whodunit, tena, hii ni, katika kiini, tunachotaka kufanya. Rahisi sana. Kubadili tu baadhi ya viwango vya jamaa, na hii ni mahali ambapo kwamba kanuni unaendelea. Resize, kwa upande mwingine, ni kidogo trickier. Kwa kweli, resize pengine ni sehemu trickiest wa tatizo hili kuweka. Tuna dakika tatu kwenda juu yake. Lakini tena, tumekuwa tayari imeandikwa zaidi ya kanuni hii, hivyo sisi lazima pretty ukoo. Ni baadhi ya mambo tunataka kufanya katika kile resize, kama wameweza kusoma juu ya kuweka tatizo? Kama kuwapa kwangu, sisi wanaweza kuzungumza juu yao. Ni baadhi ya mambo tunataka kufanya nini? STUDENT 80: Vertikalt - hivyo kuwa na usawa resize yake, lakini wima resize yake vile vile? JASON HIRSCHHORN: Hivyo kama sisi ni kupewa a pixel, na tunataka resize yake na sababu ya mbili, sasa haja ya kuwa na resized usawa na resized wima. Je, hiyo mantiki? Yeah. Hivyo kwamba pengine changamoto kubwa. Na tutaweza kuzungumzia kwamba katika sec. Yeah. STUDENT 81: njia ya mimi mawazo yake ilikuwa unahitajika magazeti nje - JASON HIRSCHHORN: Ngoja. Je, si kutuambia nini alivyofanya. Sisi ni kwenda kuzungumza katika mantiki. STUDENT 81: OK. Nini swali? JASON HIRSCHHORN: Wewe tu kukulia mkono wako. Hakukuwa na swali. Hebu sasa ni. Napenda tu kujadili kwa kifupi hii. Hivyo tuna pixel moja, tunataka kuiga yake, wote kwa usawa na wima. Hivyo walau nini cha kufanya hapa ni, sisi kusoma katika pixel yetu, sisi kuandika hata hivyo wengi wa nyakati. Lakini basi sisi na hila yetu hapa, kwa sababu kisha tunataka ruka kwa mstari wa pili na kuandika katika mwanzo wa mstari wa pili. Hivyo kama tunataka kuiga wote usawa na wima, ni nini njia moja nzuri ya kufanya hivyo - moja nzuri ingawa kufanya hivyo? Hivyo hatuna haja ya mara kwa mara kutafuta karibu faili wetu mahali mambo. Swali kwamba wanaweza kuwa na alifanya akili, lakini nadhani kujibu itasaidia. STUDENT 82: Kujenga safu? JASON HIRSCHHORN: Kwa hiyo hebu fikiria ya kila file kama mfululizo. Hebu fikiria katika suala la safu. Kama tuna mstari wetu wa kwanza kutoka ndogo wetu picha, tunaweza kufanya mstari kwamba ndani ya kubwa mstari kutoka picha kubwa, na kisha kuiga mstari kwamba hata hivyo mara nyingi inahitaji kuigwa, badala ya kwenda pixel kwa pixel, ambayo anapata kuwachanganya wakati kukabiliana na files. Kwa sababu kama tulikuwa na - Mimi kukosa nafasi. Kama hii ni file yetu, na sisi na kwamba moja pixel huko, na sisi unataka kuiweka haki pale, bado tuna baadhi ya mambo kwamba haja ya kwenda zaidi ya hapo wakati sisi ni kuandika na kuunda faili wetu mpya - file yetu kwamba mara mbili kama kubwa. Lakini ni ngumu kweli kweli na kazi file ruka karibu na mistari mpya kama hiyo, na kisha kwenda nyuma hapa na kuweka mambo huko. Ni vigumu kufanya kitu kama kwamba, kama kwamba hufanya akili. Hivyo kama sisi kufikiri katika misingi ya mistari, tunaweza kuchukua mstari yetu, na kisha kuiweka - kuiga safu wima. Na kwamba ni jinsi gani sisi kukabiliana na resizing wima badala ya usawa. Hiyo ndiyo aina ya haraka, na utata kidogo. Kwa bahati mbaya wakati wetu ni up. Mimi kusimama nje kwa wale hapa ambao una maswali kuhusu kuweka tatizo, ikiwa ni pamoja kupona. Basi hebu kuahirishwa kwa sasa. Na tena, kama una maswali yoyote, tuweze kuzungumza nje.