Jason HIRSCHHORN: Maligayang pagdating, lahat ng tao, sa Linggo 6. Ikinagagalak kong makita mo ang lahat ng buhay at na rin pagkatapos ng pagsusulit 0, dahil alam ko na ay isang bit magaspang. Pero thankfully, mo ang lahat ng May ginawang hindi mapaniniwalaan o kapani-paniwala na rin. At kaya na ay kahanga-hanga. Kung ikaw ay nasa aking seksyon, binigyan ko pinaka ng mong i-back ang iyong mga pagsusulit na. Ang isang pares ng mga iyo, ako natutugunan pagkatapos ng klase. At kung ikaw ay isang mag-aaral ng extension at hindi mo pa natatanggap ang iyong pagsusulit pabalik pa, ang iyong mga tf marahil ay nagtatrabaho sa ito at grading ito, at makakakuha ng mga ito pabalik sa iyo sa ilang sandali. Kaya mag-aaral ang aking extension kung sino nanonood ngayon - sana ay mabuhay - Ang makukuha ko ang iyong mga pagsusulit sa ilang sandali pati na rin. Ang aming mga agenda para sa araw ay ang mga sumusunod. Una, kami ay pagpunta sa pumunta sa paglipas ng ilang mga mapagkukunan na nagbibigay ng CS50 sa iyo. Kami ay pagpunta sa pumunta sa paglipas ng Pagsusulit 0 susunod, at Kukunin ko sagutin ang anumang mga katanungan kahit sino May tungkol sa partikular na mga problema. At pagkatapos, ay pagpunta namin sa ibabaw file I / O at problema set 5. Yaong huling dalawang mga paksa Dadalhin up sa karamihan ng seksyon ngayon. Naglagay ako listahang ito up bawat linggo bilang isang paalala sa iyo ang lahat, ngunit ng core seksyon, tanging mayroon kaming 90 minuto - namin ay hindi magagawang upang masakop ang lahat ng bagay na ako Gusto pag-ibig upang masakop ang para sa iyo guys. Ngunit mayroon kaming isang tonelada ng mga mapagkukunan para sa sa iyo upang gumuhit sa bilang makakuha ng mong malaman ang materyal at trabaho sa pamamagitan ng Nagtatakda ang iyong problema. Isang paalala na mayroon online ako ng text kahon, i-set up para sa iyo upang punan ang kung mayroon kang anumang mga puna para sa akin, parehong positibo at nakapagbibigay-liwanag, tungkol sa seksyon. URL na matatagpuan kanan pababa dito. Kaya mangyaring, maglaan ng ilang sandali kung mayroon kang anumang feedback, kung sa panahon ng seksyon, o pagkatapos, o pagkatapos pinapanood mo ang video online, upang magbigay sa akin ang iyong puna. Talaga Pinapahalagahan ko ang anuman at lahat ng mga ito. Kaya nagsi-pagkakaroon ko ng maliliit na mga pag-uusap na may maraming mga aking mga mag-aaral sa buong linggo - bilang ipasa ko mga pagsusulit pabalik, pakikipag-usap tungkol sa Siyempre, nakakakita ng kung paano mo ginagawa. At isa tema ay makabuo ng higit sa at sa ibabaw sa pakikipag-usap tungkol sa - sa partikular - Nagtatakda problema. At ako encapsulated tema na sa board ngayon. Mahalaga, mayroong isang pagkakaiba sa pagitan ng pag-on sa isang bagay na tapos nang tama at isang bagay na magaling. Karamihan sa mga tao ay na-paggawa hindi kapani-paniwala sa mga tuntunin ng kawastuhan - 5 o 4 sa lahat psets. Karamihan sa mga tao ay nakakakuha ng mga lahat ng oras. Gayunpaman, dahil lang sa nagawa mo na isang bagay na hindi tamang ibig sabihin ikaw tapos na isang bagay bilang elegante, o mahusay, o bilang nang malinis bilang ka sana tapos na ito. At na kung ano ang disenyo - at sa isang mas mababang antas, estilo - axes ay para sa. Kaya ako ay pagtulak mo ang lahat, at iba pang mga TFs ay pagtulak mo guys, hindi lamang pagliko sa mga bagay na tama, ngunit i- sa mga bagay na naka-code na rin. Hindi paggawa hindi kinakailangang PARA loop, hindi recalculating variable kung hindi mo na kailangang. Halimbawa, naghahanap pabalik sa problema set 4, kapag ang paglalagay ng bricks sa screen, ang bawat hilera - bawat brick sa isang naibigay na hilera ay may parehong y-coordinate - coordinate ang parehong taas. Kaya na y-coordinate ay hindi kailangang kakalkulahin sa loob ng interior nested PARA loop na malamang na ginamit mo upang ilagay ang mga brick sa screen. Kailangan itong lamang upang kalkulahin ang bawat oras ka lumipat sunud-sunod, o inilipat pababa sa isang hilera. Kaya sabihin kung may 10 brick sa isang hilera, bawat brick ay maaaring magkaroon ng parehong y-coordinate, at na y-coordinate Maaari lamang kakalkulahin isang beses para sa lahat ng mga iyon. Hindi nito kailangang kalkulahin 10 beses, ni ang na pangangailangan pagkalkula mangyari sa aktwal na pag-andar ng tawag - ang bagong gracked function na tawag. Kaya kung na noon ay medyo nakakalito para sa mo, higit pa generically, mga bagay na Hindi kailangang mangyari bawat solong oras pumunta ka sa pamamagitan ng isang PARA loop ay hindi dapat ipaloob ang PARA loop, at dapat hindi mangyari sa bawat oras na pumunta sa pamamagitan ng PARA loop. Ang isa pang mahusay na disenyo halimbawa nakita natin sa Linggo 3 para sa 15, maaari mong panatilihin track ng zero. Kaya kapag initialize mo ang board, mo i-save - sa isang global variable, siguro - ang x at y-coordinate ng zero. At pagkatapos kailan mo - sa iyong paglipat ng function, sa tuwing gagawin mo isang matagumpay na ilipat, i-update mo ang lokasyon ng zero. Ito ay i-save ka mula sa pagkakaroon upang gawin nested PARA loop upang tumingin sa pamamagitan ng sasakay bawat oras sa iyong paglipat ng function at hanapin ang zero, o hanapin ang tile, at pagkatapos ay tingnan kung ano ang sa tabi nito. Sa halip, mayroon ka ng mga lokasyon ng zero, maaari mo lamang tumingin sa itaas, sa ibaba, at sa kaliwa at kanan ng ito, upang mahanap ang ang tile na iyong hinahanap. Kaya sa mga tuntunin ng programa kami pagsusulat, ang mga ito ay hindi kailanman sapat na malaki na ang ilan sa mga pasya sa disenyo ang talagang pagpunta sa abalahin ang iyong programa, o gawin itong tumakbo ng mas mabagal, o marahil kahit na maubusan ng memorya. Ngunit kami ay itulak ka pa rin guys upang isulat bilang elegante at mahusay na code hangga't maaari. Kaya kung gagawin mo napupunta sa pagsusulat ng mga bagay na magkaroon ng isang makabuluhang mas malaki saklaw, ang mga ito ay nakasulat na may mahusay magdisenyo bilang karagdagan sa pagiging tama. Kaya isang bilang ng mga mayroon kang nagdala na out. Iyan ay isang bagay kaming naghahanap ng mga - isang bagay na kami ay pagpunta sa patuloy na itulak mo guys sa. Kung sakaling may anumang mga katanungan tungkol sa disenyo ng iyong programa, huwag mag-atubiling upang maabot ang out sa akin, at Ikinagagalak kong maglakad sa pamamagitan ng iyong programa sa iyo, at ituro ang ilan sa mga disenyo mga pagpapasya na ginawa mo, at magbibigay sa iyo ng ilang mga mga mungkahi sa kung paano gumawa ng kahit na mas mahusay na pagpapasya disenyo. Kaya kami ay pagpunta sa ilipat sa sa pakikipag-usap tungkol sa Pagsusulit 0. Bago namin gawin iyon, ang kahit sino mayroon kayong mga katanungan tungkol sa kung ano Na sakop ko sa ngayon? [RUSTLING ingay] Jason HIRSCHHORN: Pitong segundo. OK. Usapan natin ang tungkol sa Pagsusulit 0 para sa isang bit Hayaan. Karamihan sa kang magkaroon ng iyong Pagsusulit pabalik 0 ni. Kung wala ka, sana tandaan mo ito nang kaunti. Ngunit kung kinunan Pagsusulit 0, pagkatapos mo mayroon din access sa mga PDF sa online sa ang sample na solusyon. Kahit sinong mayroon ba kayong mga katanungan bago namin tumalon sa materyal ang linggong tungkol sa isang partikular na problema sa Pagsusulit 0 - bakit ang sagot ay kung ano ito ay? Naguguluhan tungkol sa anumang bagay ba ang kahit sino? Kahit na nakuha ko sa iyo ang problema karapatan, ngunit lamang ang gusto sa akin upang ipaliwanag ito nang kaunti higit pa, Ikinagagalak kong gawin na ito ngayon. Kaya Hiniling ko sa inyo guys sa dumating handa na may ilang mga mga pananaw tungkol sa Pagsusulit 0. Kaya na nais na kumuha sa amin Magsimula sa isang tanong o magkomento tungkol sa Pagsusulit 0? [Papel RUSTLING] Jason HIRSCHHORN: Hindi lahat ng tao May ginawang perpektong. Kaya alam ko [LAUGHS] doon na kailangang maging ilang mga katanungan tungkol sa Pagsusulit 0. OK. Oo. Ompica. OMPICA: Bilang 10. Jason HIRSCHHORN: Bilang 10. Aling isa ay bilang 10? OMPICA: Ang - Jason HIRSCHHORN: haven't ako - OMPICA: Ang magsama - Jason HIRSCHHORN: Bilang 10 noon ay walong upang i - pagsusulat walo upang i? OMPICA: Oo. Jason HIRSCHHORN: OK. Kaya isa pang tanong maaari kang magkaroon ng nagtanong ay ako natunton na kinabukasan? Ang sagot ay oo. Sa seksyon bago ang pagsusulit, tinanong ko ka guys sa code ng kapwa Sterling at walo upang i. Pareho sa mga ito ang nangyari sa lumitaw sa pagsusulit. Kaya sana, na iyong binayaran pansin sa mga iyon. At kung nagkaproblema ka sa, pagkatapos ay mayroon kang marahil tapos na rin sa mga dalawang. Subalit walo upang i, ginawa namin hindi tunay na code ito sa klase, ngunit ito ay, muli, tinanong sa pagsusulit. Kaya dalawang bagay upang tumagal tandaan kapag coding walo upang i. Ang unang bagay, alinsunod sa mga tanong, noon ay na kailangan mo upang suriin kung ang string ay katumbas ng null. Ang ilang mga tao sinubukan upang suriin sa ibang pagkakataon sa sa programa kung s bracket i noon ay - kaya isang tiyak na character sa na string - ay katumbas ng null. Ngunit tandaan, na null ay totoo - ito ay handa na upang isipin null bilang zero pointer - isang pointer sa zero - isang lugar na naa sa memorya kung saan hindi ka makaka-access. Kaya kung ang isang bagay ay katumbas sa null, mo malaman na ito ay hindi pa nasimulan, o walang mayroong. Kaya s ay isang pansamantalang trabaho bituin, s bracket i ay isang pansamantalang trabaho. Kaya ito ang akma upang ihambing s sa null, ngunit hindi s bracket i upang null. Ngunit muli - sa gayon ay ang unang bagay na ay dapat kang gawin - suriin upang masiguro na iyong aktwal na Naging isang real string. Susunod, ginusto mong pumunta sa pamamagitan ng bawat character sa string. At nang sa gayon ay magiging tulad ng isang bracket s i, halimbawa, kung i ay ang iyong iterator. At tumagal na karakter, at makakuha nito aktwal na halaga. Ito Ikaw ay naka-imbak bilang isang pansamantalang trabaho, ngunit ang halaga ASCII para sa zero - zero bilang isang character - ay hindi tunay na ang integer zero. Ito ay ilang iba pang mga numero na maaari mong tumingin hanggang sa talahanayan ASCII. Kaya isang paraan upang iwasto para sa na - Marahil ang pinakamahusay na paraan upang itama para sa na - ay ibabawas mula dito ang halaga ng character - ZERO bilang isang character. Kaya minus single quote, zero, isa pang single quote. Iyon ay magdadala sa anumang bilang mayroon kang bilang isang pansamantalang trabaho, at kumuha ng mga ito katumbas ng ang numero bilang isang aktwal na integer. At iyon ay halos kapareho sa diskarteng ng maraming mga tao kinuha sa problema set 2, may Caesar at Viginere - mga ciphers, kapag nag- ay umiikot sa kanila. Kaya pagkatapos mong magkaroon ng ito bilang isang numero mula sa zero sa siyam, pagkatapos - depende sa kung saan ito napupunta sa ultimate numero - kailangan mong i-multiply ito sa pamamagitan ng kapangyarihan ng 10. Ang ilang mga tao ay inilipat mula sa likod upang ang front, at pinarami ang mga indibidwal na numero sa pamamagitan ng isang kapangyarihan ng 10. Ang ilang mga tao ay inilipat mula sa sa harap i-back - at kaya kinuha ang pinakamataas na bumili ng mga unang numero - at gusto i-save ang mga nasa isang global counter variable. At pagkatapos ay sa bawat oras sa pamamagitan ng PARA loop, i-multiply na higanteng global kontrahin variable sa pamamagitan ng 10, upang magsagawa ng espasyo para sa susunod na pansamantalang trabaho. Kaya na noon ay medyo nakakalito nang walang ako sumusulat ito sa board. Ngunit ang sample na solusyon Available sa iyo. Ngunit ang mga ay ang malaking bagay humahanap kami. Gayundin isang tseke upang matiyak na ang bawat indibidwal na character ay sa katunayan isang na character sa pagitan ng zero at siyam, at hindi ilang iba pang mga character, tulad ng A, halimbawa. Yaong ay ang mga bagay na humahanap kami para sa na tanong. Na sagutin ang iyong tanong? OMPICA: Oo. Jason HIRSCHHORN: OK. Mayroon bang anumang iba pang mga tanong tungkol sa Pagsusulit 0? Paano ang tungkol sa kino-compile? Bawat tao kino-compile ang tama? Hindi. Nagkaroon ng isang - [LAUGHS] Ang anumang mga katanungan tungkol sa proseso ng compilation? Wow. [Papel RUSTLING] Jason HIRSCHHORN: Oo. Michael. Michael: Ay numero 7 - random? Jason HIRSCHHORN: Bilang 7. Numero ng 7 noon ay makakuha ng isang random na integer. Magaling. Kaya binibigyan ka ng isang integer isang at isang integer b, at gusto mo ng random integer sa pagitan ng isang at b. Maaari talaga namin isulat ang isang ito sa sa board, dahil ang isang ito ay isang linya ng code - isang paraan upang gawin ito. Kaya kami binibigyan ka drand bilang isang function na namin ma-gamitin. At kung ano ang ibig drand - sa pag-aakala itong ma-seeded - kung ano ang ibig bumalik drand? Michael: Isang float sa pagitan ng 0.0 at 1.0. Jason HIRSCHHORN: Isang numero - oo. Ang numero sa pagitan ng 0 at 1. At gayon pa b at isang namin. At pagkatapos ay mayroon kaming ang aming mga random na numero sa pagitan ng 0 at 1 ibinigay sa atin sa pamamagitan ng drand. Ang ilang mga tao sinubukan upang ilagay b, o b minus a, o isang bagay sa loob mga panaklong. Iyon ay nangangahulugan na ang mga ito ay mga argumento upang ito function. drand ay hindi gumawa ng anumang mga argumento - tulad ng getString gumagana hindi gumawa ng anumang mga argumento. Kaya bukas paren lamang, malapit paren - at na, mismo, ay ang pag-andar ng tawag. At na nagbibigay sa iyo ng isang numero sa pagitan ng 0 at 1. Siyempre, mayroon kaming isang buong saklaw na ang mga numero ay maaaring maging in Sabihing, kung b ay 10 at isang 5, kami talaga Gusto ng isang numero sa hanay ng mga 5. Kaya ang susunod na bagay na kailangan namin upang gawin ay multiply ito sa pamamagitan ng saklaw b minus isang. Kaya sa pag-aakala na na-multiply. At makikita na bigyan kami ng isang numero sa loob ng isang naibigay na saklaw. At na tiyak na saklaw ng pagiging pagkakaiba sa pagitan ng b minus isang. At sa wakas, na makikita lamang bigyan ito mula sa - ang sinasabi ng mga saklaw sa pagitan ng b minus isang ay 5, na kailangan bigyan kami ng isang numero 0-5. Ngunit kung ang isang ay sa katunayan 5, kailangan namin upang mapalakas sa hanay ng hanggang sa kung saan ito ay talaga dapat maging, sa pamamagitan ng pagdaragdag ng isang. Kaya na hindi nakakaabala ang logic karapatan. At pagkatapos, ay magkakaroon ka isa pang tanong? Michael: Hindi. Pakiramdam ko lang talaga pipi ngayon. [LAUGHS] Jason HIRSCHHORN: Hindi. Huwag pakiramdam talagang pipi. Ang isang bilang ng mga tao struggled may tanong na ito. At pagkatapos, ang iba pang mga tanong ay, drand, sinabi mo, nagbibigay sa iyo ng float - ay nagbabalik ng float. Ngunit ito function na talagang tinanong para sa isang integer na ibabalik. Hindi mo kailangang i-cast ito tahasan sa isang integer, dahil ang mga pagpapatakbo ituturing ito bilang isang lahat float - bilang isang lumulutang na numero point. Tulad ng kalooban na ito - kahit na ito ay isang integer, ang kaloobang ito'y ay multiply nang tama. Ang lahat ng pagpaparami ang gagana. Hindi mo kailangang i-cast ito dito. Sa katunayan, hindi mo dapat pinalayas ito. Iyon gagawin - kung gusto mong nagsumite ng isang numero na sa pagitan ng 0 at 1 - isang random na numero, isang lumulutang point - gayon ito ay alinman sa 0 lamang o 1, upang makikita mo mawawala ang lahat ng katumpakan na. Ngunit sa dulo, kapag bumalik ka, ito ay makakakuha ng awtomatikong Nagpadala pabalik bilang isang integer. Kaya hindi mo na kailangan na gawin na paghahagis iyong sarili. Kaya ito ay ang kasagutan sa tanong na iyon, numero 7. Anumang iba pang mga tanong sa Pagsusulit 0? Oo, Annie. Annie: Kailan ginagamit namin recursive - kapag ginagamit namin ang umuulit loop? Jason HIRSCHHORN: Kailan ginagamit mo recursive - kaya mas pangkalahatang paraan, ang pros at cons ng recursion kumpara sa isang umuulit na diskarte. Pwedeng mag-alok ang sinuman ng isang pro o isang salungat? Mangyaring? Hindi maaari ang sinuman. Sino ang maaaring mag-alok ng isang pro o isang salungat? [Papel RUSTLING] AARAL 1: Recursive Mababa coding - kaunting pagta-type? Jason HIRSCHHORN: Kaya sa pangkalahatan, recursion lalo na, isang function - o isang algorithm tulad ng pagsanib uri - na lends mismo sa isang recursive diskarte - maaaring maging mas tuwiran sa code ng recursively. At gumawa lang nang higit pa pakiramdam upang gawin ito recursively. Kaya na ay magiging isang pro sa recursion. Ang iba? Oo? AARAL 2: salungat sa recursion - Gumagamit ito ng higit pang memory. Jason HIRSCHHORN: Kaya akmang-akma. Ang isang recursive function na ay panatilihin ang pagdaragdag stack frame sa stack. Kaya't kung ikaw ay tumatakbo sa maraming numero, at mayroon itawag sa function na ng maraming, pagkatapos ang mo ay tiyak na tumagal ng hanggang higit pang mga memorya, habang isang umuulit na diskarte ay ilagay ang isa lamang stack frame sa stack, dahil ang lahat ng ito mangyayari sa loob ng isang function. Anumang iba pang mga pros at cons? Oo. AARAL 3: pros para sa recursion. Wala kang upang matukoy sa advance kung gaano karaming beses ang code ay nagkaroon mo ay naulit. Maaari kang magkaroon ng isang paunang-natukoy na bilang ng mga beses na ikaw ay may upang umulit, pagkatapos ay recursion ay mas mahusay, dahil ito ay tumatagal ng resultang iyon. Jason HIRSCHHORN: Sa tingin ko na totoo. Ngunit tingin ko sa parehong mga sitwasyon gagawin mo kailanman - Gusto mo marahil makakuha ng ilang input mula sa user. O kaya ito function na ay magkakaroon ng ilang mga input na matukoy kung gaano karaming beses ito dapat tumakbo. Kaya sa pangkalahatan, mong ginagawa Hindi mahirap code - kahit na sa isang umuulit na diskarte - kung paano dapat na magpatakbo ng maraming beses loop na. Ibig mayroon kang isa pang ikaw ay nag-iisip tungkol sa, Annie? OK. Kaya mga ay marahil ang dalawa - ang pinakamalaking pro at ang pinakamalaking katwirang laban sa isang recursive kumpara sa isang umuulit na diskarte. OK. Ano pa sa Pagsusulit 0? Ng ilipat sa Hayaan. File ako / O. May kahanga-hangang maikli ngayong linggo sa file I / O na sana na pinanood mo ang maramihang beses, at admired. Ang isang pulutong ng trabaho nagpunta sa na, at na hindi ko na Narinig ito ay insanely kapaki-pakinabang. Isinama ko rin ang link sa slide na ito, kung sakaling hindi mo pa ay may isang pagkakataon upang panoorin ito 10 ulit. Kaya, kami ay pagpunta sa daglian pumunta sa ibabaw ng mga pangunahing hakbang upang pagbubukas at nagtatrabaho may mga file, at pagkatapos ay kami ay pagpunta sa sumisid sa isang problema coding bago pagsusuri sa hanay problema. Kaya muli, ako pagpunta sa ilagay ito up sa screen, ngunit pupuntahan ko makipag-usap para lamang ng isang minuto tungkol sa kung ano kami ay paggawa dito sa file I/O-- kung ano ang ibig sabihin na? Iyon ay nangangahulugan na maaari naming lumikha ng aming mga programa, at pagkatapos ay mayroon ang aming mga programa exit at hindi nakagawa ng anumang epekto sa ang mundo sa labas ng aming programa. Ngunit kapag nagsimula kami nagtatrabaho sa mga file - kapwa sila binabasa in at paglikha ang mga ito - maaari kaming magkaroon ng ilang mga epekto sa mundo sa labas ng aming programa. Tulad ng kung hindi magagawang Microsoft Word ay gumawa ng anumang mga dokumento ng Word, pagkatapos ay sa sandaling huminto sa Microsoft Word, ang lahat ng iyong trabaho ay nawala, at gagawin ito talagang maging walang silbi. Sa huli namin nais na ma- isulat ang mga programa na maaaring makaapekto sa mundo sa kanilang paligid, parehong sa pamamagitan ng pagsasagawa sa complex input - sa mga tuntunin ng mga file at sa pamamagitan ng file, at paglikha rin kawili-wiling at nakahihimok na output - sa mga tuntunin ng iba't ibang uri ng mga file. Kaya na ang dahilan kung bakit kami ay nagsisimula sa malaman kung paano gumagana sa mga file. Mas partikular, kung ano ginagawa namin ay ang mga sumusunod. Ito ay napaka-simple. May lamang ng ilang mga hakbang, at sila ay nakalista dito sa ang code na ito. Kaya kami ay pagpunta sa pumunta sa pamamagitan ng ang code na ito sa pamamagitan ng linya linya. Una, makikita mo na naka-highlight - kapag nagtatrabaho ka sa isang file, anuman ang uri ng file na ito ay, kailangan mo upang buksan ito. At iyon ay may isang pagtawag sa fopen - karapatan dito. Isama mo ang pangalan ng file. Kung ang file ay wala sa iyong direktoryo, o ang folder kung saan ang program na ito buhay, pagkatapos ay kailangan mo rin isama isang path sa kung saan ang file ay. Kami ay pagpunta sa ipinapalagay na ito file na tinatawag na "text.txt" - isang simpleng dokumento teksto - ay nasa parehong folder bilang programang ito ay. Kaya na ang isa pang bagay na dapat isip - na kung gusto mong buksan ang file sa ibang lugar, ang talagang kailangan upang isama ang lokasyon nito. Ikalawa, maaari kang pumasa sa isang argumento sa fopen, at iyon ang gusto mong gawin kasama ang file. May tatlong pangunahing mga argument na ka pagpunta upang pumasa sa fopen. Sino ang maaaring magbigay sa akin ng mga tatlong? Sino ang maaaring magbigay sa akin ang isa sa mga ito? Oo. AARAL 4: ang pangalan ng file? Jason HIRSCHHORN: Paumanhin. Tatlong pangunahing mga argumento maaari mong pumasa bilang ikalawang argumento sa fopen. Tama ka - pangalan ng file ay ang unang argumento. Ngunit ang pangalawang argumento sa fopen ay sa pangkalahatan tatlong mga string, at - oo. Aleja. ALEJA: Isang para sa Magkabit. Jason HIRSCHHORN: A, kung nais mong Ikabit sa isang file na ay mayroon na. AARAL 5: R para nabasa na. Jason HIRSCHHORN: R, kung ikaw nais na basahin mula sa isang file. AARAL 6: W para sa pagpapawalang. Jason HIRSCHHORN: At w, kung ikaw nais na magsulat sa isang file. Kaya sa kasong ito, ipinapadala namin sa pagsusulat sa file, kaya kami ay w. Buksan mo ito, mayroon din sa iyo upang i-save ang maghain sa isang lugar, at iyon ang may code sa kaliwang bahagi ng ang pagtatalaga ng operator - Lumilikha ako ng isang pointer sa isang file tinatawag na, sa ganitong kaso, ang file. Kami ay hindi pagpunta sa mag-alala kung ano ang all caps FILE bagay ay. Magkasiya ito upang sabihin, ito ay isang mahaba stream ng mga zero at bago. At na kung paano namin ay pagpunta sa gamitin ito at maunawaan ito. Ang susunod na bagay na kailangan namin upang gawin - at ito ay hindi mapaniniwalaan o kapani-paniwala mahalaga - tuwing magbubukas ka ng isang file - sa katunayan, sa tuwing tawagan ka malloc, para sa Halimbawa, at makakuha ng ilang mga memorya at subukan at i-save ito sa isang pointer, palagi nais na suriin upang masiguro na iyon function na ay hindi nagbalik null. Kaya sa kasong ito, ay namin pagsuri upang gawing Siguraduhin na talaga naming binuksan ang mga maghain ng tama, at nagkaroon walang error sa aming programa. Susunod, sa sandaling nasuri naming matiyak mayroon kaming isang gumaganang file, kaya namin sumulat sa, o magbasa mula sa, o isama sa file. Sa kasong ito, kailangan lang ako sa pag-print isang linya sa file na ito. Paano ko malalaman na? Well, ako gamit ang function na tinatawag fprintf. Ang lahat ng mga pag-andar ikaw ay gumagamit ng kapag sumusulat upang, o pagbabasa mula sa, o pagmamanipula ng mga file ay magiging katulad ng mga pag-andar na iyong nakita dati, ngunit magsimula sa mga titik na F, nakatayo para sa file. At fprintf, hindi tulad ng aming normal na pag-print app, tumatagal ng isang karagdagang argument, at iyon ay ang file na kung saan mo nais na i-print ang linyang ito sa. Wala akong anumang bagay sa sa kanan ng ohai. Wala akong ikatlong argumento sa printf - o ang pangalawang argumento sa printf, ang ikatlong argumento sa fprintf, dahil ako Walang anumang mga placeholder dito. Hindi ako kabilang ang anumang mga variable. Ngunit muli, fprintf at lahat ng mga file mga function na umaandar sa mga file ay karaniwang pagpunta sa kailangan ang file kung saan sila naka-operating. Sa wakas, ang huling mahalagang bagay upang gawin ay upang isara ang file, tulad lamang ng may - sa tuwing malloc kami ng isang bagay, gusto naming palayain ang isang bagay, baka namin magkaroon ng isang tumagas memory - nais naming upang isara ang aming file. Kung ang program na ito ay lumabas nang hindi pagsasara ang file, logro ay walang nais pumunta mali, lalo na kung ito ay isang maliit na file. Ngunit ito ay tiyak na mahusay na estilo coding at pagsasanay upang laging isara ang iyong file kapag tapos ka na gumagamit nito. Kaya na ay ang mga pangunahing kaalaman ng file ako / O. Marahil nakita mo na bago, o napanood na ito sa hindi kapani-paniwala na maikli. Kahit sinong mayroon ba kayong mga katanungan, bago kami pumunta sa ilang mga kasanayan coding mga problema, tungkol sa file I / O o ang hakbang ko lang ang nagpunta sa ibabaw? [Pag-type ng tunog] Jason HIRSCHHORN: Gusto mo ba magkaroon ng isang tanong, Avi? AVI: Hindi. Jason HIRSCHHORN: OK. Pupunta ako sa maghintay ng isa pang pitong segundo. [LAUGHS] Iyon ay isang talagang magandang tip. Ikaw lang guys hindi gusto pagtatanong. Iyon ay pinong. OK. Kaya aming unang problema kasanayan ay, kami ay pagpunta sa doblehin ang pag-andar ng isang command line tool na marahil ginamit bago - kopya - ang kopya tool. Kung nagta-type ka ng CP at pagkatapos ay pumasa ito sa dalawang argumento sa iyong terminal, maaari mong kopyahin ang isang file. At iyon ay kung ano ang pagpunta namin na magsulat ngayon. Kaya muli, pagbabasa off ng slide na ito, nais kong mong magsulat ng isang programa na tumatagal dalawang at lamang dalawang command-line argumento - isang source file at destination file - at mga kopya ng mga nilalaman ng pinagmulan maghain sa destination file isa byte sa isang pagkakataon. Kaya na ng maraming upang humingi ng. Muli, isang mahusay na diskarte sa ito ay upang hindi pumunta diretso sa C code, ngunit masira ito down sa ilang mga hakbang. Una, isipin ang tungkol sa logic - eksaktong ano ako humihiling sa iyo na gawin - at maunawaan ang lahat ng mga hakbang na ito upang ang problemang ito. Wala sa C, lamang sa ilang mga pseudocode, o kahit na isang modelo ng kaisipan ano ang nangyayari sa. Susunod, sa sandaling mayroon kang down na ang pseudocode, malaman kung paano ang pseudocode mga mapa papunta sa mga tool at mga bagay na hindi namin natutunan upang gamitin sa C. At sa wakas, sa sandaling mayroon ka ng lahat na magkasama, maaari mong code ang problema. Dalhin 5-10 minuto upang gumana sa problemang ito. Makikita ko bang ilagay ang mga tagubilin back up sa isang segundo. At pagkatapos ay kami ay pagpunta sa pumunta sa ibabaw ang pseudocode, at code ito mabuhay bilang isang grupo. Kung mayroon kang anumang mga tanong habang ikaw ay nagtatrabaho sa ito, huwag mag-atubiling taasan iyong kamay, at ako ay dumating sa paligid at sagutin ang mga ito. AARAL 7: Maaari ba akong mag-swipe isang piraso ng papel? Jason HIRSCHHORN: Ano ba ang balita? [Pag-type ng tunog] Jason HIRSCHHORN: OK. Sabihin pumunta sa ibabaw ng pseudocode una, at pagkatapos Bibigyan kita ng ilang higit pa sa iyo minuto upang matapos sa coding. Sino ang gusto upang simulan akin off sa unang linya ng pseudocode para sa pag-andar? AARAL 8: Suriin upang matiyak na na kung saan bibigyan ng dalawang mga file. Jason HIRSCHHORN: OK. At kung hindi kami? AARAL 8: Gusto ko bumalik sa 0. Jason HIRSCHHORN: Dapat ba naming bumalik 0? AARAL 8: Bumalik isang - blanking. Sorry. Jason HIRSCHHORN: Oo. Marahil hindi 0. Dahil 0 Nangangahulugan ang lahat ng bagay ay mabuti. OK. Kaya iyon ang unang linya ng pseudocode. Sino ang may pangalawang linya ng pseudocode? AARAL 9: Buksan ang parehong mga file? Jason HIRSCHHORN: Buksan ang parehong mga file. OK? AARAL 10: Suriin upang makita kung ang file ay walang bisa? Jason HIRSCHHORN: Suriin upang sigurado alinma'y hindi ay walang bisa. Bilang isang-tabi - iwa 0 - ay ang null? AARAL 11: Hindi. Jason HIRSCHHORN: Iyan ay hindi null. Iyon ay tinatawag na null Terminator. Talaga Ito ay nabaybay nang may lamang ng isang l. Kaya check ng isang bagay laban sa na - na tunay na isang character na - kaya check ng isang bagay laban na hindi katulad ng pag-check upang makita kung ito ay katumbas null. At ang ilang mga tao - sa kanilang mga pagsusulit at ang kanilang mga problema sets - na nakuha ko ang dalawa sa mga lito. Subalit ang dalawa sa mga ito ay sa katunayan naiiba. Nagtatapos ang isa isang string - isa ay isang pointer sa 0. AARAL 12: Bakit hindi gusto mong suriin upang tiyakin na ang mga file ay hindi null bago mo buksan ang mga ito? Jason HIRSCHHORN: Kaya bukas ay nagse-save isang bagay sa file na iyon. At kung pumunta ka pabalik dito - kaya ang linyang ito - fopen - ay magbibigay sa iyo ng isang address at mag-imbak na address sa file kung ito gumagana. Kung hindi ito gumana, ito mag-iimbak null - AARAL 12: Oh. OK. Nakuha mo. Jason HIRSCHHORN: Sa file. Kaya hindi mo maaaring suriin para sa null bago na iyong binuksan ang mga ito. Null nangangahulugan ng isang bagay ang hindi gumana nang tama. OK. Kaya suriin upang masiguro na wala ay kung? O kaya naman ay? Ano ang gagawin namin sa tingin? Susubukan naming pumunta sa na. AARAL 13: Ay. Jason HIRSCHHORN: Ay? Wala alinman ay? AARAL 13: Ay. Jason HIRSCHHORN: OK. Tila namin na magkaroon ng ilang mga pinagkaisahan sa na. Wala alinman ay walang bisa. OK, susunod na linya ng pseudocode. Sino ay hindi pa ibinigay sa akin ng isang line? Susubukan naming maghintay para sa iyo. Oo. AARAL 14: Mayroon kang basahin ang mula sa unang file? Jason HIRSCHHORN: OK. AARAL 14: O ginagamit namin fscanf o ang isang bagay tulad na ang unang file? Jason HIRSCHHORN: Kaya gusto naming basahin mula sa unang file at - ni ilagay na dito mismo ipaalam. Basahin ang mula sa source file. At pagkatapos ay, kung ano ang gagawin namin pagkatapos naming basahin mula sa source file? Ibang tao? AARAL 15: Isulat sa ang destination file? Jason HIRSCHHORN: isulat namin sa ang destination file, at - OK. Ano pa ay ang mga nawawalang namin? Ibang tao na hindi ako bibigyan ng linya ng code pa - ng pseudocode. Oo. AARAL 16: Siguro maaari mong laging suriin kung mayroong isang bagay na basahin para sa, tulad ng susunod na linya? Iyon ay tulad ng sa susunod na linya, makita kung ito ay umiiral na. [Electronic pumugak] Jason HIRSCHHORN: Oops. Iyan ang aking journaling software. Oo? AARAL 16: Oo. Jason HIRSCHHORN: Kaya bigyan ito sa akin nang isa pang beses. AARAL 16: Suriin kung mayroong isang susunod pa rin linya mula sa source file na basahin. Jason HIRSCHHORN: OK. Kaya kami ay hindi pagbabasa ng mga linya - ay nagbabasa ng bytes dito - ngunit ikaw ay tama. Gusto naming basahin at isulat ang hanggang sa wala nang mga bytes. OK. At kaya ito ay dapat talagang maging may mga yupi nang kaunti, dahil sila sa ilalim doon. Mag-right? Hanggang sa kami ay out sa bytes, kami ay pagpunta sa basahin mula sa source file at sumulat sa destination file. At pagkatapos ay, kung ano ay ang huling linya ng pseudocode? May isang tao kung sino ang hindi naibigay sa akin ng isang bagay pa. AARAL 17: Isara ang mga file? Jason HIRSCHHORN: Mismong. Isara ang mga file. Kaya mayroong aming pseudocode. Pupunta ako sa ilagay ang pseudocode sa gedit, at sa loob ng ilang minuto namin ay ang code na ito nang sama-sama. OK. Ipaalam sa amin makapagsimula bilang isang grupo. Nishant, mayroon ko ang aking bagong file. Lamang iyong binuksan ko ito up. Walang pamagat na dokumento 1. Ano ang unang bagay na dapat kong gawin? NISHANT: Isama ang library? Jason HIRSCHHORN: OK. Ano library? NISHANT: Stdio.h, stdlib.h, naniniwala ako? Jason HIRSCHHORN: OK. Ano ang stdlib para sa? NISHANT: Nakalimutan ko. Jason HIRSCHHORN: OK. Kaya isama stdio. Ano ang dapat kong gawin kahit na bago Sisimulan ko ang coding? NISHANT: Sumulat ng isang header? Jason HIRSCHHORN: Paano ako makakapagsimula ko ito kulay? [INTERPOSING tinig] NISHANT: Paano ako makakakuha mo itong kulay na? Jason HIRSCHHORN: Paano ko kulayan coding? NISHANT: hindi ko alam. Oh. I-save. Jason HIRSCHHORN: I-save. Oo. Ang dapat kong i-save ito bilang isang. C. Kaya i-save ito sa desktop bilang cp.c. Sweet. At kung gusto ko upang makakuha ng ganap na estilo point, kung ano ang dapat kong Kasama sa tuktok? NISHANT: Maaari mong isulat ang iyong pangalan, pangalan ng programa, at ang layunin ng programa pati na rin? Jason HIRSCHHORN: Mukhang magandang. Magaling. Kaya sinimulan mo sa amin off ang perpektong. # Include - gagamitin din namin isulat - OK. Kaya tingin ko ang lahat ng ako nakatakda sa pumunta. Sino ang may unang linya ng code para sa akin - o ang unang linya ng code na aabutin upang masiyahan ang aming mga unang magkomento sa pseudocode? Ikaw. AARAL 18: hindi kailanman dapat itong maging int argc, at pagkatapos ay pansamantalang trabaho * argv? Jason HIRSCHHORN: Sa tingin ko Ikinalulungkot karapatan sa iyo. Baguhin ni ito sa int main, bukas paren Hayaan, int argc, kuwit, pansamantalang trabaho * argv? Tulad ng mga iyon? AARAL 18: bracket. Jason HIRSCHHORN: bracket. Buksan ang bracket, malapit bracket, malapit magulang. Perpekto. Ngayon ay maaari akong kumuha ng mga argumento command-line. OK. Tiyakin na kami ay ibinigay na dalawang file. Maaari mo akong bigyan na rin. AARAL 18: Kung argc - ang isang ito ay hindi kasing-halaga 3. Jason HIRSCHHORN: Kung bukas paren argc ay hindi katumbas ng 3? AARAL 18: Oo, ikaw ay bumalik 1 o kahit ano. Jason HIRSCHHORN: Paumanhin. AARAL 18: Return 1 o kahit ano. Jason HIRSCHHORN: Bumalik 1. OK? Mahusay. Buksan ang parehong mga file. Sino ang maaaring makatulong sa akin buksan ang parehong mga file? Sino ay hindi pa naibigay na sa akin code? Kurt? Kurt: Kaya lahat ng F-ko-L-E star pinagmulan caps. Jason HIRSCHHORN: pupuntahan ko upang kumuha ng vowels. Iyon ang cool. Ito ay tulad ng Tumblr. AARAL 18: Kapantay fopen - Jason HIRSCHHORN: Kapantay fopen? AARAL 18: Buksan paren, argv, bukas bracket. Jason HIRSCHHORN: Maghintay. Sorry. Buksan paren. OK. AARAL 18: Oo. Argv sub 1. Jason HIRSCHHORN: Sub 1? AARAL 18: Oo. Argv bukas bracket 1 - Oo. At pagkatapos kuwit, at pagkatapos ay bukas double quote, r, i-double quote, malapit paren, tuldok-kuwit. Jason HIRSCHHORN: Sweet. At kung ano ang tungkol sa iba pang isa? AARAL 18: Bihirang-pareho, ngunit sa halip ay ng S-R-C, gusto mo tumawag ito D-S-T. Jason HIRSCHHORN: Oo! Gusto ko na. AARAL 18: Tulad ng D-S-T. Oo. At pagkatapos ay argv, bukas bracket, 2. Oo. At pagkatapos ay w sa halip ng r. Oo. Jason HIRSCHHORN: Mahusay. Susunod na ilang mga linya. Gayundin, kung ang sinuman ay may mga bagay na idadagdag sa mga linya na nagawa namin, huwag mag-atubiling magdagdag ng mga pati na rin. Suriin upang matiyak alinma'y hindi ay walang bisa. Sino ang maaaring magbigay sa akin ang code kailangan kong masiyahan na linya ng pseudocode? Mamamana. Mamamana: Kung SRC ay katumbas Kapantay Null o dst ay katumbas Kapantay Null, pagkatapos ay bumalik ka - Jason HIRSCHHORN: Ano? Mamamana: Bumalik 2? Jason HIRSCHHORN: Bumalik 2. Kaya kung bukas paren SRC ay katumbas ng ay katumbas ng null, o - ano naman na thing's - pipe? Pipe? Susubukan naming tumawag ito ng pipe. Pipe, tubo, dst ay katumbas Kapantay Null, bumalik 2. OK? Hanggang sa kami ay out ng mga byte - uri ng namin nilaktawan sa ibabaw ang hakbang na ito mula sa ang pseudocode bahagi sa pagpunta sa dito. Ngunit hanggang kami ay out ng mga byte - ano ang ginagawa na tunog tulad ng? Anong uri ng C istraktura - ngunit hindi ko ginagamit ang salitang kaayusan, dahil kami ay pagpunta sa simulan ang paggamit ng na sa ibang mga kaso - ngunit C tool gumagana na tunog tulad ng? AARAL 19: Ang isang loop. Jason HIRSCHHORN: Ang isang loop. Ikinalulugod tulad ng isang loop. Kaya kung sino ang maaaring magbigay sa akin ang unang linya ng loop code dito mismo? Maaari ka ring pumili kung anong uri ng loop na gusto mo, kung bibigyan mo sa akin ito linya ng code. May tatlong mga uri. Makakuha sa iyo upang pumili. Imumungkahi ko ang isa sa mga iyon. Avi. Aling isa ang gusto? AVI: PARA. Jason HIRSCHHORN: PARA. AVI: int i katumbas ng zero. Jason HIRSCHHORN: OK. AVI: Ito bahagi hindi ako sigurado tungkol sa. Ngunit i Mababa sa laki ng bituin source? Hindi ako sigurado ng mga iyon. Jason HIRSCHHORN: OK. AVI: Dahil gusto mo na ang laki ng isang file, i-right? Jason HIRSCHHORN: Kaya ito marahil ay hindi bigyan kami ng laki ng mga aktwal na maghain sa bytes. Kaya ano pa ang maaari naming gawin? Ano ang isa pang uri ng loop? O kaya dapat naming manatili sa PARA loop? AARAL 20: mai-gawin sa iyo ng isang habang loop? At pagkatapos ay, kung ano ang nais mong gawin ay you'd - dahil mayroon kaming isang pansamantalang trabaho * para sa file. Kaya kung patuloy na lang namin incrementing na hanggang sa gusto naming makita ang null character na sa sa dulo ng ito? O wala na, ay hindi na kung paano gumagana ang mga file? Jason HIRSCHHORN: Kaya maaari naming panatilihin incrementing ang pansamantalang trabaho * hanggang sa nakita namin ang null - AARAL 20: Mahalaga panatilihin ang pagpunta ng character sa pamamagitan ng karakter hanggang maabot namin sa dulo ng file. Jason HIRSCHHORN: Oo. Kaya na kung ano ang gusto naming gawin. Gusto naming panatilihin ang pagbabasa, na character sa pamamagitan ng karakter, hanggang sa makuha namin upang sa dulo ng file. AARAL 20: Oo. Maghanap ng mga - kung ano ang dulo o stop sign sa dulo ng isang text file. Jason HIRSCHHORN: OK. Kaya kapag makuha namin sa dulo ng file - paano ko malalaman namin naabot na namin ang sa dulo ng isang file? Kapag ako ay pagtawag - kaya ni hakbang pabalik ipaalam. Ano ang isang function? Sabihin pumunta sa linyang ito dito mismo. Basahin ang mula sa source file. Sino ang maaaring magbigay sa akin na linya ng code? AARAL 21: Fscanf? Jason HIRSCHHORN: Fscanf. OK. Paano kung gusto kong basahin, napaka partikular, ang isa byte? AARAL 21: Hindi ko alam. Jason HIRSCHHORN: OK. Kahit na mas simple kaysa fscanf - ano ay isang - Gusto kong magbasa mula sa isang source file? Basahin ang mula sa isang source file. Ano ang isang function - oo. AARAL 22: Ito ay fread? Jason HIRSCHHORN: Fread. Sa tingin ko ay mananatili sa ipaalam na ang isa para sa ngayon. Anong uri ng mga argumento ang fread tumagal? AARAL 22: Malamang ang uri ng file, at pagkatapos ng lokasyon sa file? Jason HIRSCHHORN: Ano ang maaari kong isulat dito upang malaman kung anong uri ng argumento fread tumatagal? Maramihang ESTUDYANTE: Man fread. Jason HIRSCHHORN: Man fread at fwrite. Mukhang hang out sila nang magkasama. Kaya fread tumatagal ng kung gaano karaming mga argumento? AARAL 23: Four. Jason HIRSCHHORN: itong tumatagal apat na mga argumento. Ito ay tumatagal ng isang pointer, isang laki, at na bagay, na kung saan ay kakaiba, at ang ilang mga file. OK? Sabihin basahin ang tungkol dito dito mismo. "Bumabasa ng pagpapaandar fread n memb elemento ng data, ang bawat bytes laki ang haba, mula sa stream na itinuturo sa pamamagitan ng mag-stream, pag-iimbak ng mga ito sa lokasyon ibinigay sa pamamagitan ng pointer. " Kaya apat na mga argumento. Bakit hindi kopyahin ko lang ito, at ilagay ito dito mismo. OK. Kaya kung sino ang maaaring magsimula ng pagpuno mga argumento para sa akin? Avi. AVI: Ilabas ang walang bisa. Ilagay ang SRC lamang. Ilabas pointer at ang bituin. Ilagay ang SRC. Pagkatapos - Jason HIRSCHHORN: So pupuntahan ko ihinto mo doon, dahil iyan ay hindi tama. Tama ka sa SRC, ngunit kung saan dapat pumunta SRC? [INTERPOSING tinig] Jason HIRSCHHORN: dapat itong pumunta sa paglipas dito. Iyan ang SRC - ang aming SRC ay isang uri. Tignan natin dito Hayaan. Ito ay humihingi ng isang uri ng FILE *, namin talaga karaniwang makita ang mga ito tulad na. Kaya ito ay humihingi ng isang argumento ng i-type ang FILE * tinatawag na stream na SRC. OK? Ano ang sukat ng mga bagay na gawin gusto naming basahin? Ibinigay ko sa iyo na ito sa paglalarawan problema. AARAL 24: Isa byte sa isang pagkakataon. Jason HIRSCHHORN: Isa byte. Paano malaki ay isang byte? Laki nito ay nasa bytes, kaya kung ano Maaari ko bang ilagay doon? AARAL 25: Isa. Jason HIRSCHHORN: Isa. Mag-right. Laki nito ay nasa unit byte, kaya 1 ay 1 byte. Gaano karaming mga nais kong basahin sa isang pagkakataon. AARAL 26: Isa? Jason HIRSCHHORN: Ang isang bagay. Gusto kong basahin ang isang bagay ng laki 1, isa kagat sa isang pagkakataon. At kung saan ko ilalagay ito, sa sandaling Nabasa ko ito? AARAL 27: Destination? Jason HIRSCHHORN: Kaya hindi ako maaaring ilagay ito diretso sa patutunguhan. AARAL 28: Ikaw gonna ilagay ito sa isang third pointer? AARAL 27: Upang ang patutunguhan. Jason HIRSCHHORN: OK. Oo. AARAL 29: Maaari mong magpahayag ng isang bagay sa kumilos bilang mas maaga ng isang pansamantalang imbakan. Jason HIRSCHHORN: OK. Bigyan mo ako iyon. AARAL 29: Ang isa pang file pointer, siguro? Jason HIRSCHHORN: OK. Kaya ito ay walang bisa star - ito ay isang uri ng walang bisa bituin, kaya hindi kailangang maging isang file pointer. At kung ako sa pagbabasa ng isa byte, kung saan ay magiging isang magandang lugar mag-imbak ng isa byte? AARAL 29: Ang isang array? Jason HIRSCHHORN: Ang isang array. OK. At ano pa ay isang bagay na Sukat ng isa lamang byte? AARAL 30: Ang isang pansamantalang trabaho *? AARAL 29: Oo. Jason HIRSCHHORN: Ang isang pansamantalang trabaho * ay hindi isa byte. AARAL 29: Ang isang pansamantalang trabaho. Jason HIRSCHHORN: Ang isang pansamantalang trabaho ay isa byte. Mag-right? Kaya hayaan tawagan ni ito buffer ay isang generic pangalanan na ginagamit para sa mga bagay na ito upang mag-imbak isang bagay pansamantalang. Kaya lumikha ako ng buffer. Mag-right? Ngunit ito ay tumagal ng isang walang bisa *. Kaya marahil ay tama ka, na ito ay dapat maging isang buffer ng laki 0. Kaya nag-iimbak ito ng isa - karapatan. Dahil sa karapatang ito dito - pansamantalang trabaho nagpapahina ng lakas ay isang karakter, ngunit ito ay tumatagal ng isang walang bisa * - isang pointer. Kaya maaari kong gawin ito at ngayon nagpapahina ng lakas ay isang pointer. Ano pa ang maaari kong gawin? AARAL 31: Maglagay ng star sa tabi ng pansamantalang trabaho. Jason HIRSCHHORN: magagawa ko nilikha ito pansamantalang trabaho *. OK. Ano ang isa pang bagay ay maaaring kong gawin? O kaya ay pumunta sa isang ito ipaalam. Pansamantalang trabaho * buffer, kaya kung ano ko ilalagay in dito? AARAL 31: Buffer. Jason HIRSCHHORN: Buffer. Buffer ay isang pointer sa isang pansamantalang trabaho. At sa lokasyon na iyon, ipinapadala namin ang paglalagay ng isa byte ng isang bagay na basahin namin ang. Oo. Avi. AVI: Tulad ng isang mabilis na tanong. Gusto mo bang malloc buffer? Jason HIRSCHHORN: Sino ang may kaya sagutin na katanungan? AARAL 32: Well, Ito ang hindi talaga punto sa anumang bagay sa ngayon, kaya - Jason HIRSCHHORN: Ngunit gawin gusto naming malloc ito? AARAL 32: Kung ikaw ay upang gawin ito na paraan, hulaan ko, oo, dahil gusto mo kailangan ilang mga lugar para dito upang tumuro sa. Jason HIRSCHHORN: Gagawin namin kailangang mag-malloc ito? AARAL 33: Kung naka-pagpunta sa gamitin ito sa labas ng loop. Jason HIRSCHHORN: Sigurado namin ang pagpunta sa gamitin ito sa labas ng loop? AARAL 34: Oo. AARAL 35: Maghintay. Nais namin na idedeklara ito sa loop upang lampas? Jason HIRSCHHORN: So hulaan ko na mayroon kami ilang palsipikado habang loop dito na kami sinusubukan upang malaman, na hindi pa kami nakuha sa. Hindi namin kailangang malloc ito. Kami ay tumatakbo sa main na itong ibang mapupuntahan lamang na gagamitin sa loob ng loop. Hindi nito kailangang na umiiral sa labas ito. Kaya maaari itong maging isang lokal na variable. Mayroon kang isang pointer sa isang lokal na variable. AARAL 36: Ngunit ito ay hindi na tumuturo sa kahit ano. Jason HIRSCHHORN: Hindi, hindi ito nasimulan sa anumang bagay. Ngunit hindi namin ang pagpunta sa gamitin ito rin. Kami ay pagpunta sa ilagay ang isang bagay sa ito ang unang pagkakataon na ginagamit namin ito. Kaya na mukhang OK. Kaya hindi kami kailangan malloc dito. At sa tingin ko ito OK lang as is. OK. Mayroon kaming mga fread linya. Gawin ng susunod na linya Hayaan. Kung gusto namin na magsulat sa isang file, kung ano ang isang mahusay na pag-andar upang gamitin upang gawin iyon? AARAL 37: Fwrite? AARAL 38: Fprintf? Jason HIRSCHHORN: Fprintf ay isa. Ano isa pa? AARAL 39: Fwrite. Jason HIRSCHHORN: Fwrite. At para sa aming mga layunin, fwrite, na nakita natin dito, ay marahil ang mas mahusay na pagpipilian. Tumatagal ng apat na mga argumento pati na rin. Nishant, maaari mong ibigay sa akin ang mga argumento? NISHANT: pagpunta Ang unang isa ni upang maging lamang buffer. Jason HIRSCHHORN: OK. NISHANT: Ang ikalawang isa ay lamang ng pagpunta sa maging 1. Ikatlong isa pupuntahan maging 1. At ang isa pang-apat ay magiging dst. Jason HIRSCHHORN: Mayroon ba kahit sino anumang mga katanungan tungkol sa na linya? Na mukhang mabuti. OK. Kaya ngayon, mukha itong isang bagay na hindi namin Nawawala - ni magsulat talaga, sabihin ito huling linya. Isara ang mga file. Sino ang maaaring tapusin up sa amin pagsulat mga huling dalawang linya? Oo. Paumanhin, kung ano ang iyong pangalan? Lucy: Lucy. Jason HIRSCHHORN: Lucy. Lucy: Fclose SRC at pagkatapos ay fclose patutunguhan. Jason HIRSCHHORN: Fclose, bukas paren, SRC, malapit paren, tuldok-kuwit. At fclose - oo? Lucy: Buksan ang panaklong, dst at pagkatapos ay tuldok-kuwit. Jason HIRSCHHORN: Mahusay. At kung ano ang dapat kong isama sa dulo? Lucy: Bumalik 0. Jason HIRSCHHORN: Bumalik 0. Huwag mag ako? Lamang ng isang katanungan. Huwag mayroon kaming upang isama ang return 0? Maramihang ESTUDYANTE: Hindi. Jason HIRSCHHORN: Hindi. Main awtomatikong ginagawa nito kung ikaw ay makakuha sa dulo. Ngunit tingin ko ito ay mabait sa isama ito tahasang. Lalo na kapag kami ay bumabalik iba pang bagay sa buong programa. OK. Ito ay kung ano ang nawawala namin - Habang ano? Sino ang maaaring sa tingin ng ilang - ay may ilang mga kahulugan ng kung ano ang bagay maaaring pumunta doon? Kahit na ito ay para lamang sa ilang mga pseudocode tulad ng wika? Ano ang mga namin talaga - ano nais namin upang pumunta hanggang? Oo, Lucy. Lucy: Ang pagtatapos ng file. Jason HIRSCHHORN: Ang pagtatapos ng file. Kaya kung ano ang ibig mong sabihin sa pamamagitan ng pagtatapos ng file? Lucy: Kapag naabot mo ang dulo ng file, ihinto. Jason HIRSCHHORN: OK. Kaya sa sandaling maabot namin ang dulo ng file. Paano ko malalaman namin kapag naabot na namin ang sa dulo ng file? AARAL 40: Sa tingin ko ang buffer ay itatakda sa null. AARAL 41: Buffer ay ipinahayag sa loob ng loop. Jason HIRSCHHORN: So sa tingin mo nagpapahina ng lakas ay itatakda sa null. Bakit buffer itatakda sa null? AARAL 40: Dahil kapag nag- fread, na sinusubukan mong ilagay walang anuman sa buffer. Jason HIRSCHHORN: OK. Nag-iisip ka fread - kapag naabot na namin ang katapusan ng file, ano ang fread pagpunta sa gawin? Sa tingin ko iyon ang pinag-uusapan mayroon kaming upang malaman kung. Ano ang fread gawin? Ba ilagay ito null sa buffer, o ang ginagawa ng iba pang dahilan? Paano malaman namin kung ano ba ito? AARAL 42: Man. Jason HIRSCHHORN: Man. Kaya tingnan natin sa paglipas dito ipaalam. Bumalik halaga. Sa tagumpay, fread at fwrite ibalik ang bilang ng mga item basahin o nakasulat. Ang numerong ito ay katumbas ng bilang ng mga byte inilipat lamang kapag laki ay 1. Kung nangyayari ng error, o sa dulo ng file ay naabot, ang halaga return ay isang maikling count item o 0. Kaya para sa aming mga layunin, kung fread ay umabot sa sa dulo ng file, at bumabasa ng mula sa ang pagtatapos ng file, walang iniwan ang magbasa, kung ano ang ito ng pagpunta sa bumalik? AARAL 43: Zero? Jason HIRSCHHORN: Ano? AARAL 43: Zero? Jason HIRSCHHORN: Zero. Ito ay pagpunta upang bumalik sa zero. Kaya alam namin fread na, kapag hindi namin Naabot ang dulo ng file, ay pagpunta upang bumalik sa zero. Paano namin maaaring gamitin iyon sa aming kalamangan? AVI: Maaari mong magpahayag ng isang variable sa labas ng loop na tinatawag na tseke. Kung katumbas ng check - para sa ngayon - isa. Jason HIRSCHHORN: OK. AVI: At pagkatapos ay maaari kang maglagay ng isang KUNG pahayag kanan pagkatapos fread sinasabi kung fread ay katumbas ng zero - hindi. Jason HIRSCHHORN: Sino Maaaring makatulong Avi out? AVI: Ano ang halaga ibinalik ng fread? Jason HIRSCHHORN: lang namin nagpunta sa paglipas na iyon. AVI: Paano ko kakatawanin mo ito? Jason HIRSCHHORN: Kaya ito ay nagbabalik - sabihin tumingin hanggang dito - ito ay nagbabalik ng size_t, na kung saan ay mahalagang isang integer. Kaya nagbalik ito ng isang integer. At sa aming kaso, ay ito bumalik 1 o 0 - 1 kung ito basahin ang isang bagay - isa byte, at 0 kung Naabot na namin ang dulo. Kaya kung fread - oo? AARAL 45: Hindi ma-ilagay mo lamang ang buong fread (buffer, 1, 1, SRC) sa habang loop? Jason HIRSCHHORN: Kaya ipanukala mo ginagawa ito sa doon? [INTERPOSING tinig] Jason HIRSCHHORN: Hold on. Kaya kami ridding ng iyon. Kaya na inyong minumungkahi paglalagay fread sa doon? Ano ang dapat ilipat din namin kung nais mo bang gawin iyon? AARAL 45: Ang buffer sa labas. Jason HIRSCHHORN: dapat namin ilipat din ito out dito. AARAL 45: Pero ginagawa na patuloy ilipat ito pasulong? [INTERPOSING tinig] Jason HIRSCHHORN: OK. Kaya ito ay kung ano ang ipinanukalang Okshar. Lumikha namin ang aming buffer. Kami habang fread, pagkatapos ay i-fwrite namin. Saloobin sa ito? AARAL 46: Aking lamang na tanong ay, gagawin ito talaga execute ang command fread? Jason HIRSCHHORN: Mahusay pinag-uusapan. Kapag naglalagay ka ng isang function ng tawag sa loob ng isang kalagayan, ginagawa na execute function ng tawag? Nakita namin ang mga halimbawa ng mga ito bago. Mag-right? AARAL 46: OK. Oo. Kaya ginagawa nito execute. Jason HIRSCHHORN: nakita namin ang mga bagay tulad na bago, kung saan mayroon kaming isang function na tawag sa loob ng isang kalagayan. Isakatuparan ba na pag-andar ng tawag? Oo. Kaya ang sagot ay oo. Ang pagpapaandar na ito tawag ay isakatuparan. Ngunit muli, ay ito kung ano ang gusto namin? Ano ang isang paraan na maaari kaming maisip out kung ano ang gusto namin? Maramihang ESTUDYANTE: Patakbuhin ito? Jason HIRSCHHORN: maaari naming patakbuhin ito. Ngunit bago namin gawin iyon, maaari naming Dahilan din sa pamamagitan ng ito. Kung - sabihin nating mayroon kami ng isa byte sa aming mag-file, susuriin namin dito, susuriin namin ang code na ito. Ito ay tatakbo. fread ay magbabalik isa byte at mag-imbak ito sa buffer. At ito ay magtatasa sa 1, kanan, pagkatapos siya ay nagbalik 1. Kaya habang 1. Ang ibig sabihin na ang code sa loob ang habang loop ay execute? AARAL 47: Oo. Ito ay totoo. Jason HIRSCHHORN: Oo. 1 ay totoo. Ito ay hindi 0. Kaya ang code sa loob dito ay isakatuparan. Kaya makikita isulat namin iyon. Susubukan naming ilipat pabalik sa ito linya sa sandaling muli. Ngayon kami ay may - Ikinalulungkot namin sa dulo ng aming mga file. Basahin namin mula sa dulo ng aming file, dahil lamang nagkaroon kami ng isang byte sa loob nito. Nagbabalik Fread 0, tindahan isang bagay sa buffer. Ko totoo lang ay hindi alam kung ano nag-iimbak ito sa buffer. Maaaring marahil Inaasahan naming up upang makita kung ano ang ginagawa nito. Iyon ko totoo lang ay hindi alam. Hindi namin alam, na pinahahalagahan ng kung ano nag-iimbak ito sa buffer? Ngunit ito ay bumalik sa 0. At habang ay 0 execute? Habang 0 ay hindi maisagawa. Kaya pagkatapos ay gagamitin namin ilipat pababa dito. Kaya hayaan ang makakuha ng isang palabas ng mga kamay kung ito ay ang code ay dapat namin tatakbo, o kung kami dapat unang gawin ang mga pagbabago. Kaya kung sa tingin mo - ikaw ay may upang bumoto. Kung sa tingin mo ay dapat naming patakbuhin ang code na ito bilang ay, mangyaring taasan ang iyong kamay. OK. May isang - ang mayroon kang isang katanungan, alalahanin? Oo. AARAL 48: Pagkatapos naming ilipat ang buffer sa labas ng loop, ginagawa namin kailangang mag-malloc ito? Jason HIRSCHHORN: Mahusay pinag-uusapan. Pagkatapos naming ilipat buffer sa labas ng loop, huwag na mayroon kami sa malloc ito? Ito ay isang saklaw tanong. Kung initialize namin buffer sa labas ng loop na ito, ito ay umiiral sa loob ng loop? Maramihang ESTUDYANTE: Oo. Jason HIRSCHHORN: Oo. Nito saklaw ay sumasaklaw sa loob ng loop, at, talaga, kahit ano ito sa ibaba sa loob ng code na ito, kabilang ang bagay sa loob dito. Kaya hindi namin kailangan upang malloc ito. Ito ay isang lokal na variable, at saklaw nito Kasama pa rin ang loop. AARAL 49: Huwag kailangan namin upang palayain ito? Jason HIRSCHHORN: Gagawin namin kailangan upang libreng buffer? AARAL 49: Oo, kung hindi namin malloc. Jason HIRSCHHORN: Gagawin namin kailangan upang libreng buffer? Ginagawa namin ang hindi. Muli, ito ay isang lokal na variable, kaya hindi namin kailangan upang palayain ito. OK. Ni makita kung ano ang mangyayari Hayaan. Kaya ito ay uninitialized. Iyon ay kung ano ang isang bagay na Marcus mas maaga iminungkahi. Kaya mayroon kaming error na, variable buffer ay uninitialized kapag ginamit dito. Paano namin maaaring ayusin ito? AARAL 50: Malloc ito? AARAL 51: Kapantay null? AARAL 52: Sabihing buffer ay katumbas null. Jason HIRSCHHORN: OK. Mukhang magandang. Mayroon kaming ito ngayon. Lumikha ng isang bagay upang subukang kopyahin Hayaan. Kaya mayroon kaming ang aming mga tekstong file. Paano namin maaaring tumakbo sa programang ito? Oo. AARAL 53: Maaari mong gawin na tuldok iwa CP, test.txt. At pagkatapos ay maaari mong pangalanan ang isa pang file na ito ay mag-imbak sa. Jason HIRSCHHORN: OK. Susubukan naming tumawag ito out.txt. Cool? Seg fault. Saloobin sa seg fault? Ito ay mahusay na. Paano malalaman namin kung saan ang seg fault ay? Ano? AARAL 54: Gdb. Jason HIRSCHHORN: Gdb. Nagpapatakbo kami ng gdb sa pamamagitan ng pagsusulat gdb tuldok slash, ang pangalan ng aming programa. Walang mga argumento command line doon. Kami ay pagpunta sa magtakda ng isang breakpoint sa pangunahing. Kung gusto ko bang magsimula gdb, ano ang gagawin ko? AARAL 55: R. Jason HIRSCHHORN: R. At pagkatapos ay kung ano? AARAL 55: Ang mga argumento? Jason HIRSCHHORN: Pagkatapos ng command-line na mga argumento. Ni maglakad sa pamamagitan Hayaan. N ay lamang pagkuha sa akin linya sa pamamagitan ng linya. Pupunta ako sa pumunta hanggang sa Nakukuha ko ang aking seg fault. Mayroong aking seg fault. Mukhang fread sanhi aking seg fault. Alam ko fread dulot aking seg fault, dahil iyon ay ang linya pinaandar lang namin. At ang tanging bagay na noon ay nangyayari sa linya ng - dalawang bagay ay nangyayari. Fread ay pagpunta, at pagkatapos kami ay ang paggawa ng ilang habang sinusuri. Ako ay handang Taya na ang Habang pagsuri ay hindi na nagiging sanhi ng aking seg fault. Malamang, fread noon ay nagiging sanhi ng aking seg fault. Tingnan ko rin ang isang bagay dito, memcopy. Kopya Memory. Ikinalulugod tulad ng paglipat mula sa memory sa isang lokasyon papunta sa iba pa. Ikinalulugod tulad ng isang bagay na mangyayari sa fread, siguro ilang mga memory paglipat mula dito upang dito. Sabihin pumunta sa pamamagitan ng ito muli. Paano ako magsisimula ito sa paglipas ng at patakbuhin itong muli? Oo. AARAL 56: Huwag kailangan mong ilagay isang ampersand bago buffer? Jason HIRSCHHORN: Kaya ampersand bago nagpapahina ng lakas ay magbibigay sa akin ang address ng buffer, na isang pansamantalang trabaho *. Tumakbo sa pamamagitan ng ito nang isa pang beses Hayaan. Paano ko mapapatakbo sa pamamagitan nito nang isa pang beses? AARAL 57: Maari bang ma-mo lamang type patakbuhin muli? Jason HIRSCHHORN: i-type lamang sa run muli. Kaya kami ay hindi pagpunta sa isakatuparan ang linyang ito. Kaya buffer ay isang null pointer. Itama? Ito ay tumuturo sa - sabihin makita. Kung mayroon namin ang aming - gumuhit ng isang mabilis na larawan ng ito. Maaari ba lahat ng tao makita kung Sumulat ako sa ibabaw dito? Kaya sa mga stack, mayroon kaming isang lokal na variable at ito ay tinatawag na buffer, at ito ay isang pointer sa isang pansamantalang trabaho. Ano address ay pansamantalang trabaho na ito sa? AARAL 58: 0x0. Jason HIRSCHHORN: Mag-right. Iyon ay kung ano ito ay. Sa dito, sa loob ng buffer, ay naka-imbak 0x0. Iyon ay kung ano ang mayroon kami - ang setup na mayroon kami sa ngayon. Kaya ang linyang ito, fread, naglalagay ng isang bagay mula sa pinagmulan saan? Sa ang kahon na ito o sa kahon na ito? Aling mga kahon? Kahon o pakanan kahon sa kaliwa? Ito kanang kahon. Ito ay sumusunod sa pointer, at naglalagay ito sa dito. Kapag sinubukan namin at pindutin ang memorya sa 0 lokasyon, ano ang gagawin makuha namin? Isang segmentation fault. Iyan ang error na mayroon kami sa ngayon. Oo. AARAL 59: Hindi Mayroon ka bang upang ilagay star buffer? O wala? Para sa fread? Jason HIRSCHHORN: Kaya fread tumatagal ng isang pointer. Kaya ito ay ipinapasa sa buffer. At pagkatapos ay magkakaroon ito wag-reference ito sa isang lugar sa loob fread. Ngunit muli, nakita namin, ito ay tumatagal ng isang pointer. Hindi namin kailangan upang pumasa ito star buffer. Iyon ay ang pagpasa ito ang kahit anong dito. At na marahil ay magbibigay sa amin ng isang error dahil ipinapadala namin wag-na tumutukoy dito. Mag-right? Kapag wag-reference namin ito pointer, kapag subukan naming i-access ang lokasyon na ito, kami ay nakakakuha ng isang error - ang aming segmentation fault. Kaya - oops. Kami ay pagpunta sa itigil ang out sa gdb. Ang aming mga linya - ang aming problema - ang tama dito sa linyang ito. At ito ay isang problema dahil ng linyang ito. Paano namin maaaring lumikha ng isang kahon na ay naa-access sa fread. Mag-right? Kailangan namin upang lumikha ng isang kahon na isa byte na malaki, ang laki ng isang pansamantalang trabaho. Ngunit kailangan namin na kahon upang ma-access kapag executes ito function. Kaya kung saan - oo. Ang anumang mga ideya? AARAL 60: itakda lamang ito bilang anumang mga random na character. Gawin lamang pansamantalang trabaho buffer Kapantay ang character. At pagkatapos ay, kapag iyong na-buffer doon - Jason HIRSCHHORN: Maghintay. Pansamantalang trabaho buffer? Kaya walang star? AARAL 60: Oo. Ilabas ang bituin. Kapantay ng random na character. Jason HIRSCHHORN: OK. Kaya ninyo ako ng isa. AARAL 60: Tulad ng isang o isang bagay. At pagkatapos ay kapag mayroon kang buffer doon, gumamit ka ng - AARAL 61: Bituin? Ay naku, ang ampersand. AARAL 60: Gamitin ang ampersand. Jason HIRSCHHORN: OK. At kung ano ang tungkol sa fwrite? AARAL 60: Gamitin muli ang ampersand. Jason HIRSCHHORN: Lahat ng karapatan. Kaya ang iyong mga ideya ay, lumikha kami ng isang pansamantalang trabaho at ilagay ang isang bagay sa loob nito, at pagkatapos ay sumulat sa na pansamantalang trabaho. AARAL 60: Oo. Jason HIRSCHHORN: Ano ang lumalabas ang mga tao sa tingin? AARAL 62: Ito ay convoluted. Jason HIRSCHHORN: OK. Gumuhit ng ito Hayaan. Kaya oras na ito, pupuntahan ko upang gumuhit ito sa pula sa stack dito, at pagkatapos ay namin Magkakaroon - ooh! Sorry. Kaya oras na ito kami ay may isang bagay na tinatawag na nagpapahina ng lakas, at ito ay sa stack. Itama? At namin sine-save sa ito ng, sa umpisa. Pagkatapos ay mayroon namin ang aming tawag sa fread. Ano ang ibig fread ay tumatagal ng isang byte mula sa ang aming file at naglalagay ito sa isang lugar. Inilalagay nito ang ito sa kung anumang ang bagay ay tumuturo sa. Well, bago namin ay may address na ito - 0x0. Ngayon kung ano ang address ko mayroon kaming? AARAL 63: Anuman address buffer ay. Jason HIRSCHHORN: Anuman address buffer ay. Marahil ito ay pagpunta sa maging ang isang bagay tulad na. Marahil pagpunta sa magsimula sa isang b at isang f, at pagkatapos ay mayroon anim na iba pang mga hexadecimal digit. Hindi ba mahalaga. Ang ilang mga address. At kami ay pagpasa sa address na iyon in At kami ay pagpunta sa ilagay ang aming isa byte na bagay sa address na iyon. Kaya kami ay pagpunta sa ilagay ang aming isa byte na bagay sa loob dito. At pagkatapos ay kami ay pagpunta sa magsulat mula sa kung ano ang kailanman loob dito. Kahit sinong mayroon ba kayong mga katanungan tungkol iyon? Sino sa palagay ang code na ito gagana? Itaas ang iyong kamay kung sa tingin mo ang code na ito gagana. Mayroon kang gumawa ng isang tindig. At sino ang code na ito ay hindi gagana sa palagay? Itaas ang iyong kamay. Bawat tao iba ay dapat na pagtataas ng kanilang mga kamay. OK. Michael, kung saan ay nakatayo ka? Michael: Hindi ko ma-magpasya. Uri ng sa gitna. Jason HIRSCHHORN: Kayo sa gitna. Pumili ng isa. Michael: Kukunin ko ang pananampalataya at sabihin ay ito ay gagana. Jason HIRSCHHORN: OK. Magkakaroon ka ng pananampalataya at sabihin ito gumagana? Ano ang nangyari? [INTERPOSING tinig] Jason HIRSCHHORN: Walang seg fault. Paano namin suriin upang makita kung dalawang bagay ay pantay-pantay? Dalawang mga file ay pantay-pantay. AARAL 64: diff. Jason HIRSCHHORN: diff. Diff mga tseke para sa mga pagkakaiba sa pagitan ng dalawang mga file, at kung ito ay nagbabalik wala, ang mga ito ay magkapareho. At kung buksan namin up, makuha namin ang aming file. Kaya na ay ang tamang solusyon. Ni lingunin ito nang isa pang beses Hayaan. Talaga namin ginawa hindi kahit na kailangan ang pagsisimula ito. Ito marahil tumingin ng kaunti mas malinis kung hindi mo ilalagay isang bagay random sa doon. Pagiging punto Ang, kailangan mong lumikha ng ilang espasyo upang i-imbak ang isang bagay mula sa fread at gagawa ng isang bagay out sa fwrite. At bagay na nagkaroon upang maging alinman sa isang lokal na variable sa stack - mo maaaring na-malloc'd ilang espasyo. Kaya aktwal na maaaring magkaroon kami nakasulat malloc dito, at na sana ay nagtrabaho. At pagkatapos ay nais namin na-iimbak ng pang lugar sa kimpal aming mga bagay. Ngunit ito ay ang tunay, marahil, ang pinaka-eleganteng solusyon. Lumikha lamang ng ilang espasyo sa stack para sa mga bagay na ito upang pumunta. Gusto ko may dalawang iba pang mga komento. Kung ikaw ay gumawa ng pagliko sa ito, at pagkatapos makakuha ng nakapuntos sa ito, ang aking mga komento ay magiging tulad ng sumusunod. Ang mga 1 meron dito, sa akin, hanapin parang magic numero. Ang 1, sa mga tuntunin ng fread, saysay ang. Iyan ang bilang ng mga bagay upang basahin o sumulat. Ngunit ang isang ito dito mismo dapat marahil maging iba pang dahilan. Kaya kung ano ay isa solusyon? AARAL 65: Laki ng byte. Jason HIRSCHHORN: Tulad ng mga iyon? AARAL 65: Laki ng pansamantalang trabaho. Jason HIRSCHHORN: Laki ng pansamantalang trabaho. Oo, byte ay hindi isang uri. Kaya laki ng mga gawa pansamantalang trabaho. Maaari naming mayroon, sa tuktok ng ang aming code, # natukoy na iyon. Tinatawag na isang bagay byte at talaga isang pansamantalang trabaho. Talaga, isang mas mahusay na diskarte Maaaring naging ito - uint. Kahit sino malaman kung ano ang na? Sorry. Mayroon akong ito paurong. Maghintay, hindi. Aling paraan ang mga ito pumunta? Kahit sino malaman kung ano ang na? Oo. AARAL 67: ipagpalagay upang makatulong sa alisunod sa pamantayan sa kabuuan ng sistema ng mga bagay na mayroon - tulad ng unsigned integer na mayroong 8 bytes? Jason HIRSCHHORN: Iyon akmang-akma. Sa iba't ibang machine, ang laki ng isang pansamantalang trabaho - hindi karaniwan ay isang pansamantalang trabaho. Char ay karaniwang isang byte. Ngunit sa laki ng iba pang mga uri ng data ay iba't ibang mga laki sa isang 32-bit na machine kumpara sa isang 64-bit na machine. Isang uint8_t ay laging 8 bits - laging isa byte. At kailangan kong isama na karaniwang int header na file. Kaya ngayon, ito sana ay marahil naging ang pinakamahusay na paraan upang isulat ang code na ito. Kaya makakuha ko mapupuksa ang mga magic numero. At mayroon din ako ng isang mas lohikal nagta-type para sa buffer. Ito ay hindi lamang ng isang pansamantalang trabaho, ito ay isang byte, na kung saan ay kung ano ang inaasahan namin ito upang maging. At dito, hindi namin talaga naging mas matatag nang kaunti. Hindi kami pagtawag ito ng isang pansamantalang trabaho, na - siguro, may alam - maaaring maging isang iba't ibang mga laki sa iba't ibang machine. Talaga namin sinasabi na ito ay eksaktong isa byte, palaging, kahit na ano. At kung tiningnan namin dito, gumawa kami ng CP. Uh-oh. Ano ang nangyari? AARAL 68: Maaaring ilipat. Jason HIRSCHHORN: Ano? AARAL 69: ba ito? AARAL 70: Ikaw ay hindi tukuyin ito bilang isang uri. AARAL 71: Ngunit dapat ito ay tinukoy sa standard. AARAL 72: Ano kaya ang nangyari? AARAL 73: Dapat tukuyin ang maging lahat ng cap? Jason HIRSCHHORN: Kaya ito ay hindi # tukuyin. Talaga, sa kasong ito, ako pagpunta sa gamitin typedef. Dahil ang aming ginagamit ito bilang isang uri sa isang lokasyon. Kaya sa kasong ito, talaga namin nais na typedef tulad namin sa pagpi-print ng isang bagong uri byte, at ito ay, mahalagang, ito. Ito ay isang bit naiiba kaysa # tukuyin. At ngayon, ang aming code ay gumagana ganap na ganap. Kaya, muli, # tukuyin tumatagal ng isang bagay, Pinapalitan ito sa lahat ng dako sa iba pang mga bagay. Ito ay isang macro lang - shorthand upang mapupuksa ang magic numero. Ngunit sa kasong ito, dahil kami gamitin ito bilang isang uri - karapatan dito - sa pagkakasunud-sunod para sa na upang gumana, kailangan namin sa typedef kahit anong byte ay. At kami ay pagtukoy ito dito mismo. Ito ay hindi isang struct, ito ay aktwal na lamang isang wala pang kontratang integer. Ito ay isa byte mahaba. Ang code na ito ay makukuha sa online, at dapat mo ang lahat ng mayroon ito ngayon. Kaya mayroon kaming - perpekto - 13 minuto ang natitira upang pumunta itakda sa paglipas ng problema 5. Gusto kong maglakad sa pamamagitan copy.c magkasama, at pagkatapos ay gagamitin namin makipag-usap sa madaling sabi tungkol sa iba pang mga bahagi ng problema set. Kaya ipaalam sa akin makuha ang copy.c. At ang mga cool na bagay ay, hindi namin talaga na isinulat ng maraming ang code na ito. Ang code namin na sinulat nang literal lamang ay dumating out sa dito kapag ako ay pagsusulat ng mga ito sa aking sarili. Ngunit ito ay copy.c, bumubuo ang pundasyon para sa unang dalawang bahagi ng ang problema itinakda para sa whodunit.c, na kailangan mo upang sumulat, at resize.c. Recover.c, kung saan ay ang ikatlong at huling bahagi ng hanay problema, ay hindi batay off ng file na ito. Ikaw ay pagpunta sa kailangan upang isulat ang file na iyon, bigyan ka namin ng isang template para sa na mag-file, ngunit ito ay walang kinalaman ang gagawin sa copy.c. Ngunit dahil copy.c ay ang pundasyon para sa ang unang dalawang bahagi, kami ay pagpunta upang maglakad sa pamamagitan ito ngayon, sa gayon mayroon kang isang mahusay na pakiramdam kung ano ang ginagawa nito. At ang mga komento ibigay ang ilan sa mga ito ang layo. Na isinulat namin ang ilan sa mga ito. Una, ginagawa namin sigurado makakakuha tayo ng tatlong argumento. Susunod, kami ay pag-alala sa file name. Kaya nilaktawan namin ang hakbang na ito kapag namin ma-code ang aming mga bagay - kapag ang aming CP. Ngunit dito, ang mga ito ginagawa ito ng kaunti mas malinis. Sila ay naka-check upang tiyakin ang parehong mga file ang mga magandang, sa karagdagan sa pagbubukas ng mga ito. Sinulat ni namin ang lahat ng code na ito ngayon lang, kaya ako ay hindi pagpunta sa mangatwiran ang code na ito. Susunod ay ang ilang mga bagay-bagay na tiyak para sa ang mga uri ng file na aming ginagamit, na ay bitmap file. Paghahatid ng mga file kumuha ng metadata nauugnay sa mga ito. Kaya ang unang ilang mga byte sabihin sa iyo ang tungkol sa ang file. Ang mga ito ay hindi ang mga kulay ng ang pixel sa na imahe. Sabihin nila sa iyo tungkol sa ang file. At kung nabasa mo sa pamamagitan ng hanay problema, magkakaroon ka ng higit pang impormasyon sa kung anong uri ng mga istraktura ng metadata Kasama sa bitmaps. Ngunit iyon ang dahilan kung bakit mayroon muna ito namin set ng - ang code na ito dito mismo. Pagbabasa namin ang metadata - dalawang piraso ng metadata - ang file header at ang header impormasyon. At kami ng pagsuri ay ang ilang mga bahagi ng ito sa tiyakin na ito ay isang tunay na bitmap file bago magpatuloy. At muli, narito ang mga detalye namin hindi na kailangan upang pumunta sa ngayon. Kung basahin mo sa pamamagitan ng hanay problema, ay sa iyo na maunawaan ang mga ito. Long kuwento maikli, ang mga ito ay nagsasabi lamang, ito ay isang bitmap na file, at na nagkukumpirma na. Susunod, kami ay sumusulat mga sa labas ng file. Nakita namin na dito. Kami ay sumusulat upang ang out pointer. Susunod, kami ay tinutukoy ang padding. Kaya muli, bilang ay partikularidad na may isang bitmap file, may ilang mga linya isama padding sa dulo. At kung nabasa mo sa pamamagitan ng hanay problema, makikita mo matuto nang higit pa tungkol sa padding. Ito ang formula upang mahanap ang padding. Mahalaga na tandaan - kapag binago mo ang laki ng isang bitmap mag-file, ang mga pagbabago padding. Kapag binago mo ang laki ng isang mag-file, ang mga pagbabago padding. Hindi kailanman Ito ay pagpunta sa maging mas malaki kaysa sa 3 - Makikita ito maging sa pamamagitan ng 0 3, inclusive. Ngunit kapag binago mo ang laki ng isang bagay, ang mga pagbabago padding. Kung mayroon akong lamang ng isang pixel sa hilerang iyon, ako kailangan tatlong byte ng padding, dahil sa bawat hilera ay dapat na multiple ng apat bytes mahaba sa isang bitmap na file. Ngunit kung double ko ito, upang pumunta mula sa isang pixel sa dalawang pixel, ang bawat isa, sabihin nating, ay isang byte, pagkatapos kailangan ko dalawang byte ng padding upang gawing na katumbas ng apat. Kaya kapag binago ko ang laki ng isang bagay, Kailangan ko upang baguhin ang halaga ng padding Mayroon akong. Ba na magkaroon ng kahulugan sa lahat? Susunod, umulit kami sa ibabaw ng bawat hilera, o sa pamamagitan ng lahat ang mga hilera. At pagkatapos ay umulit namin sa pamamagitan ng bawat haligi sa bawat hilera. Kami ay pagpapagamot ng ito bitmap tulad ng isang grid, tulad ng na-itinuturing namin ang board sa 15. Tulad ng aming ginagamot ang brick kapag kami naka-print ang mga ito sa screen. Ang isang grid ng mga hilera at mga hanay. Pagkatapos - Nakita namin ito. Talaga namin ma-code lang ito. Nilikha namin ang ilang pansamantalang imbakan. Basahin namin sa doon, at pagkatapos ay isulat namin ito out. Ito ay eksakto kung ano ang ginawa namin lamang. Susunod, dahil sinabi ko bawat linya ay nagtatapos sa ilang mga padding, namin laktawan sa ibabaw na padding - ang lumang padding. At pagkatapos ay idagdag namin ito pabalik. Sa kasong ito, kami ay paglikha ang parehong eksaktong file. Lang namin kinokopya ito. Kaya ang linyang ito ay uri ng ulok. Maaari naming literal lamang ilagay ang padding in Ngunit kung babaguhin mo ang laki ng file, huwag mo pa rin bang ang linyang ito? Kaya kung babaguhin namin ang laki ng file, huwag namin na gusto pa rin upang laktawan sa ibabaw ng lumang padding? AARAL 74: Oo. Jason HIRSCHHORN: Kaya ang ginagawa namin. Dahil ito, muli, deal may mga source file. Hindi namin pakialam tungkol sa padding mula sa source file. Gusto naming pumunta sa susunod na linya. Ngunit hindi kami maglagay lamang pabalik ang lumang halaga ng padding. Kailangan naming ibalik ang bagong halaga ng padding. Kaya kapag kami Binabago ang laki ng isang file, gusto pa rin namin upang laktawan sa ibabaw ng padding sa lumang file - kung ano kami ay pagbabasa sa mula sa. Ngunit ano kami ay sumusulat upang, kami ay pagpunta sa kailangan upang ibalik ang ilang iba't ibang bilang ng mga padding na Natukoy namin. Oo. AARAL 75: Ang pagkakasunud-sunod ng mga dalawang mga linya ay hindi mahalaga, tama? Dahil ka sa paghawak ng mga iba't ibang mga file. Jason HIRSCHHORN: Mismong. Ang pagkakasunud-sunod ng mga dalawang linya ay hindi mahalaga. Isulat namin sa linyang ito. Ito ay dito para sa file kami ay sumusulat upang. Iyan ay mahalaga, kaya makuha namin ang tamang dami ng padding. Ito ay haharapin ang mga file sa. Gusto naming laktawan karapatan sa ibabaw ng padding. Hindi namin nais na basahin - kung kami ay nagbabasa ng isang byte sa isang pagkakataon, namin huwag na nagmamalasakit sa mga padding bytes. Gusto naming lumipat sa susunod na linya. Sa wakas tulad ng Lucy nagbigay para sa amin, isara namin ang mga file at ibalik 0. Kaya ito ay copy.c. At talagang namin na sinulat - namin na ginugol sa karamihan ng seksyon pagsusulat na ito, mahalagang. Ginawa mo ito. Kaya sana ay mayroon kang isang mahusay na pakiramdam ng kung ano ang nangyayari sa dito. Ang malaking pagkakaiba, totoo lang, ay lamang ito unang bahagi na deal na may peculiarities ng bitmap file. Kaya Mayroon akong bilang aking susunod na slide, ano ang kailangan naming gawin? Well, sa tingin tungkol sa sinong may kagagawan ipaalam. At para sa isang tao na basahin sa pamamagitan ng itakda ang problema, ano ang ginagawa namin kailangang gawin sa sinong may kagagawan? Simpleng. Aleja. ALEJA: Maaari mong gawin ang mga bahagi ng bawat pixel na Tinutukoy ng pula. At pagkatapos ay - uri ng? Jason HIRSCHHORN: OK. Kaya kumuha ang bahagi ng bawat pixel na Tinutukoy ng pula. Iyon ay malapit, ngunit hindi lahat ng mga ito. AARAL 76: Well, mayroong iba't ibang mga paraan upang magawa ito. Jason HIRSCHHORN: OK. Bigyan ako ng isang paraan. AARAL 76: Ilabas ang lahat ng pula, at pagkatapos ay bigyan ng diin ang kulay asul at berde. Jason HIRSCHHORN: OK. Kaya ibinigay na parehong mga paraan - ito tunog tulad namin ibinigay ito ng pixel, ito May pula, asul, berde at antas. Gusto naming baguhin ang mga kamag-anak na antas ng ang pula, asul, berde at, depende sa na pixel. Saan sa code na ito ay dapat naming baguhin ang kamag-anak pula, asul, berde at mga antas ng isang naibigay na pixel. Matapos basahin namin ito - bago namin isulat ito? Bigyan mo ako ng numero ng linya. Maramihang ESTUDYANTE: 83. Jason HIRSCHHORN: 83. Kaya dito mismo. Para sa sinong may kagagawan, ang code kailangan mong i- pagpapawalang dapat lahat pumunta doon. At iyon ang lamang code kailangan mong magsulat. Dahil, tulad ng narinig namin, ang kailangan mo upang gawin ay baguhin ang mga kamag-anak bughaw, pula, berde at mga antas mula sa bawat pixel. Nabasa mo na ito sa, at ngayon ikaw pagpunta sa isulat ito. Paano ako makakakuha ng - kung mayroon akong bagay na ito tinatawag na triple, dito mismo, at ito ay ng type RGBTRIPLE - na rin, kapag tiningnan namin sa bmp.h, ano ang RGBTRIPLE? AARAL 77: Ito ay isang struct. Jason HIRSCHHORN: RGBTRIPLE ay isang struct. Nakita namin na kanan pababa dito. At kaya kung Nais kong pag-access, sabihin nating, ang pula antas ng struct, paano gagawin ko ma-access ang pulang antas ng ito struct? [Class MURMURS] AARAL 78: RGBTRIPLE.rgbtred? Jason HIRSCHHORN: tama ba iyon? AARAL 79: Dapat itong maging triple tuldok, sa halip na RGBTRIPLE tuldok? Jason HIRSCHHORN: Triple. Triple ay ang lokal na variable, kaya dito, walang mga payo dito. Kaya gamitin na lamang namin ang pagtatanda na tuldok. Ito ay magbibigay sa akin ang antas ng pula. Kung gusto kong baguhin ito, lamang itinakda ko ito kasing-halaga sa isang bagay na naiiba. Kaya muli, ito linya ng code access ito variable sa loob ng struct, at maaari naming itakda ito sa isang bagong bagay. Kaya para sa sinong may kagagawan, muli, ito ay, sa kakanyahan, kung ano ang kailangan naming gawin. Napakasimpleng. Baguhin lang ang ilang kamag-anak mga antas, at ito ay kung saan napupunta ang code na iyon. Baguhin ang laki, sa kabilang banda, ay isang bit trickier. Sa katunayan, palitan ang laki ay marahil ang trickiest bahagi ng problema sa set. Mayroon kaming tatlong minuto upang pumunta sa paglipas ng ito. Ngunit muli, na nakasulat na namin ang karamihan ng ang code na ito, kaya kami ay dapat na medyo pamilyar. Ano ang ilang mga bagay na gusto naming gawin sa baguhin ang laki, kung nabasa mo na sa ibabaw ng itakda ang problema? Kung magbibigay sa iyo ng mga ito sa akin, namin Maaari makipag-usap tungkol sa mga ito. Ano ang ilang mga bagay na gusto naming gawin? AARAL 80: Patayo - kaya wala kayong upang pahalang baguhin ang laki nito, ngunit patayo baguhin ang laki nito pati na rin? Jason HIRSCHHORN: Kaya kung kami ay bibigyan ng pixel, at gusto naming baguhin ang laki nito sa pamamagitan ng isang factor ng dalawa, kailangang ngayon ito upang maging Binabago ang laki ng pahalang at ang sukat patayo. Ba na magkaroon ng kahulugan? Oo. Kaya na ay marahil ang pinakamalaking hamon. At muli naming makipag-usap tungkol sa na sa isang segundo. Oo. AARAL 81: Ang paraan naisip ko ng ito ay kinakailangan mong i-print ito out - Jason HIRSCHHORN: Maghintay. Huwag sabihin sa amin kung ano ang iyong ginawa. Kami ay pagpunta sa makipag-usap sa logic. AARAL 81: OK. Ano ang tanong? Jason HIRSCHHORN: Ikaw lamang itinaas ang iyong kamay. Walang tanong. Hayaan akong ipakita ito. Hayaan akong lamang talakayin ito sa madaling sabi. Kaya namin ang isa pixel, nais naming ginagaya ito, parehong pahalang at patayo. Kaya may perpektong ano ang ginagawa namin dito ay, namin basahin sa aming mga pixel, isulat namin ito gayunpaman maraming ng beses. Ngunit pagkatapos ay mayroon kaming ang aming mga kahanga-hangang gawa dito, dahil pagkatapos ay nais naming lumaktaw sa susunod na linya at isulat ito sa simula ng susunod na linya. Kaya kung gusto naming ginagaya kapwa pahalang at patayo, ano ang isa mahusay na paraan upang gawin iyon - isa magandang bagaman bang gawin iyon? Kaya hindi namin kailangan upang patuloy na humingi ng sa paligid ng aming mga file upang ilagay ang mga bagay. Tanong na hindi maaaring mayroon ginawa kahulugan, ngunit sa palagay ko isang sagutin na ito ay makakatulong sa. AARAL 82: Lumikha ng isang array? Jason HIRSCHHORN: Kaya sabihin sa tingin ng bawat file bilang isang hilera. Ni sa tingin sa mga tuntunin ng mga hilera Hayaan. Kung mayroon namin ang aming mga unang hilera mula sa aming maliit na larawan, maaari kaming magsagawa ng sunud-sunod na sa isang malaking hilera mula sa malaking larawan, at pagkatapos ay gumagaya hilera na gayunpaman maraming beses na kailangan nito upang ma-Ginagaya, sa halip ng pagpunta pixel sa pamamagitan ng pixel, na kung saan ay makakakuha ng nakalilito kapag pagharap sa mga file. Dahil kung nagkaroon kami - Nauubusan na ako ng puwang. Kung ito ang aming file, at mayroon kaming na isang pixel doon, at gusto naming ilagay ito doon, mayroon pa rin namin ang ilang mga bagay na pangangailangan upang pumunta doon kapag kami ay pagsusulat at paglikha ng aming mga bagong file - ang aming file na dalawang beses na malaki. Ngunit ito ay talagang mahirap na may mga pag-andar ng file lumaktaw sa paligid sa mga bagong linya tulad na, at pagkatapos ay bumalik dito at ilagay ang mga bagay sa doon. Ito ay halos imposible upang gawin ang isang bagay tulad na, kung na saysay. Kaya kung sa tingin namin sa mga tuntunin ng mga hilera, na aming makakaya tumagal ang aming mga hilera, at pagkatapos ay ilagay ito - ginagaya hilera patayo. At na kung paano namin haharapin ang mga pagbabago ng laki patayo sa halip na pahalang. Iyon ay uri ng mabilis, at medyo nakakalito. Sa kasamaang palad ang aming oras ay up. Ako ay tumindig sa labas para sa mga ng sa iyo dito na may mga katanungan tungkol sa hanay problema, kabilang ang mabawi. Kaya ni itindig para sa ngayon hayaan. At muli, kung mayroon kang anumang mga katanungan, maaari naming makipag-chat sa labas.