[Powered by Google Translate] [TAQSIMA 5: INQAS komdu] [Nate Hardison, Università ta 'Harvard] [Dan huwa CS50.] [CS50.TV] Allura merħba lura, guys. Merħba għas-sezzjoni 5. Fuq dan il-punt, wara li kkompletaw kwizz 0 u wara li jkunu raw kif inti ghamilt, nisperaw tħossok verament tajba għaliex I kien impressjonat ħafna mill-punteġġi f'din it-taqsima. Għal telespettaturi online tagħna, aħna kellna koppja ta 'mistoqsijiet dwar l-aħħar żewġ problemi fuq is-sett problema - jew fuq il-kwizz, pjuttost. Allura aħna qed tmur biex jmorru fuq dawk verament malajr sabiex kulħadd jara dak li ġara u kif jgħaddu s-soluzzjoni reali pjuttost milli biss viewing-soluzzjoni nnifisha. Aħna se jmorru fuq l-aħħar ftit problemi verament malajr, 32 u 33. Just, għal darb'oħra, b'tali mod li l-telespettaturi online jista 'jara dan. Jekk iddawwar għall-problema tiegħek 32, li hija fuq il-paġna 13, 13 minn 16, problema 32 hija dwar swaps. Hija kienet kollha dwar iskambji żewġ numri interi. Hu l-problema li għandna ntlaqgħet marret fuq ftit drabi fil lecture. U fil hawn, dak li konna inti titlob sabiex tagħmel huwa traċċa memorja malajr. Biex timla l-valuri tal-fatturi varjabbli kif huma fuq il-munzell bħala l-kodiċi tmur permezz din il-funzjoni tpartit. B'mod partikolari, dak li aħna qed tħares lejn - I'm se timplimenta din iPad isfel - b'mod partikolari, dak li aħna qed tħares lejn huwa din il-linja numru 6 dritt hawn. U huwa numru 6 għall biss kontigwità mal-problema ta 'qabel. Dak li rridu nagħmlu hu wiri jew it-tikketta l-istat ta 'memorja kif huwa fil-ħin meta aħna tesegwixxi dan in-numru linja 6, li hija effettivament ritorn mill-funzjoni tpartit tagħna dritt hawn. Jekk aħna iscroll hawn, rajna li l-indirizzi ta 'kollox fil-memorja kienet ipprovduta għalina. Dan huwa ħafna importanti; aħna ser terga 'lura lilu biss mument. U mbagħad stabbiliti hawn fil-qiegħ, kellna dijagramma memorja ftit li aħna qed tmur biex jirreferi għal. I attwalment għamlu dan fuq iPad tiegħi. Allura jien ser jalternaw quddiem u lura bejn il-iPad u dan il-kodiċi biss għall-referenza. Nibdew. L-ewwel, ejja tiffoka fuq l-ewwel koppja ta 'linji ta' prinċipali dritt hawn. Biex tibda, aħna qed tmur biex initialize x sa 1 uy sa 2. Allura aħna għandna żewġ varjabbli numru sħiħ, dawn qed kemm ser jitqiegħdu fuq il-munzell. Aħna ser ipoġġi 1 u 2 fihom. Mela jekk jien flip fuq l iPad tiegħi, wieħed jittama, ejja ara - Apple duplikazzjoni TV, u hemm immorru. Okay. Mela jekk jien flip fuq l iPad tiegħi, Irrid li initialize x sa y 1 u sa 2. We do dan sempliċement billi tikteb 1 fil-kaxxa mmarkata x u 2 fil-kaxxa mmarkata y. Pjuttost sempliċi. Allura issa ejja mmorru lura għall-laptop, tara x'jiġri li jmiss. Allura din il-linja li jmiss huwa fejn affarijiet nikseb delikata. Aħna jgħaddu l-indirizz ta 'xu l-indirizz ta' y bħala l-parametri aub għall-funzjoni tpartit. L-indirizz tal xu l-indirizz ta 'y huma affarijiet li aħna ma jistgħu jikkalkolaw mingħajr ma jirreferu għal dawn bullet punti dritt isfel hawn. U fortunatament, il-punti 1 bulit 2 jgħidulna eżattament dak l-tweġibiet huma. L-indirizz tal-x fil-memorja huwa 10, u l-indirizz ta 'y fil-memorja huwa 14. Għalhekk dawn huma l-valuri li nikseb għadda fl bħala aub top up fil-funzjoni tpartit tagħna. Għalhekk għal darb'oħra, il-qlib lura għall-dijagramma tagħna, Kapaċi nikteb 10 fil- u 14 fil-b. Issa, dan il-punt huwa fejn aħna jipproċedi bil-tpartit. Allura flipping lura għall-laptop ġdid, naraw li l-mod kif l-tpartit xogħlijiet huwa I dereference 1 a u jaħżnu r-riżultat fl-TMP. Allura l-operatur dereference jgħid, "ħej. Ittratta l-kontenut tal-varjabbli ta 'bħala indirizz. Mur kollu li huwa maħżun f'dak l-indirizz, u tagħbija. " Dak li inti tagħbija mill-varjabbli se jiġi maħżun fil-varjabbli TMP tagħna. Flipping lura għall-iPad. Jekk immorru biex tindirizza 10, nafu li l-indirizz 10 huwa l-x varible għaliex aħna qalulhom mill-punt bulit tagħna li l-indirizz tal-x fil-memorja huwa 10. Allura nistgħu mmorru hemmhekk, jiksbu l-valur ta 'dan, li huwa 1, kif naraw fuq iPad tagħna, u t-tagħbija li fil-TMP. Għal darb'oħra, dan mhuwiex il-kontenut finali. Aħna qed tmur biex jimxu permezz u aħna ser tingħata għall-istat finali tagħna tal-programm fl-aħħar. Imma issa dritt, aħna għandna l-valur ta '1 maħżuna fil TMP. U hemm mistoqsija malajr fuq hawn. [Alexander] Il-operatur dereference - li jinsab biss id-dritt istilla quddiem il-varjabbli? >> Iva. Allura l-operatur dereference, kif aħna flip lura għall-laptop tagħna għal darb'oħra, huwa dan il stilla dritt quddiem. F'dan is-sens, huwa - inti kuntrast ma 'l-operatur multiplikazzjoni li teħtieġ żewġ affarijiet; l-operatur dereference hija operatur unary. Just applikati għall valur wieħed għall-kuntrarju operatur binarju, fejn inti tapplika għal żewġ valuri differenti. Allura dak hu li jiġri f'dan il-linja. Aħna mgħobbija l-valur 1 u maħżuna fis varjabbli numru sħiħ tagħna temporanju. Il-linja li jmiss, aħna jaħżnu l-kontenut ta 'b fil - jew, pjuttost, aħna jaħżnu l-kontenut li huwa b tipponta lejn in-post fejn hija li tipponta lejn. Jekk aħna janalizza din mill-lemin għax-xellug, aħna ser b dereference, aħna ser tindirizza 14, aħna ser grab-numru sħiħ li jkun hemm, u allura aħna se jmorru fl-indirizz 10, u aħna ser tarmi r-riżultat ta dereference tagħna ta 'b f'dak l-ispazju. Flipping lura għall iPad tagħna, fejn nistgħu nagħmlu dan ftit aktar konkret, dan jista 'jgħin jekk nikteb numri fuq kollha ta' l-indirizzi hawn. Allura aħna nafu li fil y, aħna fl-indirizz 14, x huwa fl-indirizz 10. Meta nibdew mill-b, aħna dereference b, aħna qed tmur biex grab il-valur 2. Aħna ser grab dan il-valur minħabba li huwa l-valur li jgħix fl-indirizz 14. U aħna qed tmur biex jitqiegħdu fil-varjabbli li jgħix fl-indirizz 10, li huwa hemm dritt, li jikkorrispondu għal x varjabbli tagħna. Allura nistgħu nagħmlu xi ftit ta 'kitba fuq oħra hawn fejn aħna jeħles 1 tagħna u minflok aħna jiktbu 2. Allura kollha tal ukoll u tajjeb fid-dinja, anke jekk aħna stajt x miktub fuq xulxin issa. Aħna maħżuna valur qadim x fil-varjabbli TMP tagħna. Allura nistgħu jitlesta l-iswap mal-linja li jmiss. Flipping lura għall-laptop tagħna. Issa dak kollu li jibqa 'huwa li jieħdu l-kontenut mill-varjabbli numru sħiħ tagħna temporanju u jaħżinhom fil-varjabbli li jgħix fl-indirizz li b qiegħed iżomm. Allura aħna qed tmur biex b dereference effettiv biex jiksbu aċċess għall-varjabbli li huwa fl-indirizz li b jkollha fiha, u aħna qed tmur biex Jittieħed il-valur li TMP huwa azjenda fih. Flipping lura għall-iPad darba aktar. I tista 'tħassar dan il-valur hawnhekk, 2, u minflok aħna ser kopja fuq il-lemin 1 fih. Imbagħad il-linja li jmiss li tesegwixxi, naturalment - jekk irridu flip lura lill-laptop - huwa dan il-punt 6, li huwa l-punt li fih ridna li jkollhom dijagramma tagħna kompletament mimlija. Allura flipping lura għall-iPad darba aktar, biss sabiex inti tista 'tara l-dijagramma mimlija, tista 'tara li għandna 10 fil, ta' 14 fil-b, '1 TMP, ta' 2 fil x, u 1 fil y. Hemm xi mistoqsijiet dwar dan? Ma dan jagħmel aktar sens, li mixi permezz ta 'dan? Jagħmel sens inqas? Nisperaw le. Okay. Pointers huma suġġetti ferm delikata. Wieħed mill-guys naħdmu ma għandha tgħid komuni ħafna: "Biex tifhem pointers, l-ewwel trid tifhem pointers." Li naħseb huwa ħafna minnu. Hija ma tieħu filwaqt li jidraw lilha. Tpinġija lottijiet ta 'stampi, tpinġija lottijiet ta' dijagrammi tal-memorja bħal dan wieħed huma utli ħafna, u wara li inti timxi permezz ta 'eżempju wara eżempju wara eżempju, dan ser tibda tagħmel sens ftit aktar u sens ftit aktar u sens ftit aktar. Fl-aħħarnett, jum wieħed, inti ser ikollok dan kollu kompletament mhaddma. Kwalunkwe mistoqsijiet qabel nimxu fuq il-problema li jmiss? Kull dritt. Allura flip lura għall-laptop. Il-problema li jmiss għandna huwa numru problema 33 fuq fajl I / O. Zoom fl fuq din id-daqsxejn ftit. Problema 33 - Iva? [Daniel] I biss kellhom mistoqsija ta 'malajr. Dan star, jew l-asterisk, huwa msejjaħ dereferencing meta tuża asterisk qabel. X'hemm dan jissejjaħ meta tuża l-ampersand qabel? >> Il-ampersand qabel huwa l-indirizz-'operatur. Mela ejja iscroll back up. Oops. Jien fil-modalità zoom so I ma tistax verament scroll. Jekk inħarsu lejn dan il-kodiċi verament malajr dritt hawn, għal darb'oħra, istess ħaġa jiġri. Jekk inħarsu lejn dan il-kodiċi dritt hawn, fuq din il-linja fejn aħna tagħmel is-sejħa li tpartit, l-ampersand huwa biss qal "tikseb l-indirizz fuq li jgħix x varjabbli." Meta kompilatur tiegħek jikkompila kodiċi tiegħek, għandu fil-fatt fiżikament trade mark fl post fil-memorja għal kulħadd ta 'varjabbli tiegħek biex jgħixu. U għalhekk dak li l-kumpilatur tista 'mbagħad tagħmel ladarba huwa miġbura kollox, dan jaf, "Oh, I tpoġġi x fl-indirizz 10. nressaq y fl-indirizz 14." Dan jista 'mbagħad timla dawn il-valuri għalik. Allura inti tista 'mbagħad - tista' imbagħad jgħaddu din in u jgħaddu & y fil ukoll. Dawn guys jiksbu l-indirizz, iżda huma wkoll, meta inti tgħaddi minnhom fil-funzjoni tpartit, din l-informazzjoni tat-tip, dan * int dritt hawn, jirrakkonta l-kumpilatur, "Okay, aħna qed tmur biex tkun jinterpretaw dan l-indirizz bħala indirizz ta 'varjabbli numru sħiħ." Bħala l-indirizz ta 'int, li hija differenti mill-indirizz ta' varjabbli karattru għaliex int tibda, fuq magna 32-bit, tibda 4 bytes ta 'spazju, billi karattru tieħu biss sar 1 byte ta 'spazju. Allura huwa importanti li tkun taf ukoll dak li hu - dak tgħix, liema tip ta 'valur qed tgħix fl-indirizz li ltqajna għadda pulzieri Jew l-indirizz li inti qed jittrattaw. B'dan il-mod, inti taf kemm bytes ta 'informazzjoni li attwalment tagħbija mill-RAM tiegħek. U mbagħad, iva, dan l-operatur dereference, bħal inti kienu tistaqsi, tmur u aċċessi informazzjoni f'indirizz partikolari. Għalhekk jgħid, ma dan il-varjabbli ta 'hawn, jikkura l-kontenut ta' bħala indirizz, tmur f'dak l-indirizz, u iġbed, tagħbija fis-proċessur, tagħbija fi reġistru il-valuri attwali jew il-kontenut li jgħixu f'dak l-indirizz. Kwalunkwe aktar mistoqsijiet? Dawn huma mistoqsijiet tajba. Huwa ħafna ta 'terminoloġija ġdida wisq. Huwa wkoll tip ta 'funky, jaraw & u * f'postijiet differenti. Kull dritt. Allura lura għall-problema 33, fajl I / O. Dan kien wieħed minn dawk il-problemi li naħseb ftit affarijiet li ġara. Wieħed, huwa suġġett pjuttost ġdida. Huwa ġie ppreżentat pretty hekk qabel l-kwizz, u mbagħad naħseb li kien tip ta 'bħal wieħed minn dawk il-problemi kelma fil-matematika fejn huma jagħtuk ħafna ta 'informazzjoni, iżda inti fil-fatt ma jispiċċaw wara li tuża ton ta' dan. L-ewwel parti ta 'din il-problema hija tiddeskrivi dak fajl CSV huwa. Issa, fajl CSV, skond id-deskrizzjoni, il-fajl huwa valuri comma-separat. Ir-raġuni li dawn huma livelli kollha interessanti, u r-raġuni inti qatt jużawhom, huwa, għaliex, kif ħafna minnkom qatt jintużaw għalf bħal Excel? Figura ħafna minnkom, probabbilment, jew se tuża f'xi punt fil-ħajja tiegħek. Int ser ikollok tuża xi ħaġa bħal Excel. Sabiex tikseb l-informazzjoni mill-Excel spreadsheet jew jagħmlu kwalunkwe tip ta 'pproċessar magħha, jekk int riedu jiktbu program C jew programm Python, programm Java, biex jittrattaw l-informazzjoni li għandek maħżuna fil hemm, wieħed mill-modi l-aktar komuni biex jiksbu dan jitwettaq huwa fil-fajl CSV. U inti tista 'tiftaħ Excel u meta inti tmur għall-"Save As" djalogu, inti tista 'toħroġ fajl CSV attwali. Handy li jkunu jafu kif jittrattaw ma 'dawn l-affarijiet. Il-mod kif jaħdem huwa li huwa simili għall - I jfisser, huwa essenzjalment li jimitaw spreadsheet, fejn, kif naraw hawn, fil-biċċa ħafna xellug-aktar, aħna għandna l-ismijiet l-aħħar. Allura aħna għandna Malan, imbagħad Hardison, u mbagħad Bowden, MacWilliam, u mbagħad Chan. L-ismijiet l-aħħar. U mbagħad virgola jifred l-ismijiet l-aħħar mill-ewwel ismijiet. David, Nate, Rob, Tommy, u Zamyla. Jien dejjem ħallat Robby u Tom. U mbagħad, fl-aħħarnett, it-tielet kolonna hija l-indirizzi email. Ladarba inti tifhem li, l-bqija tal-programm huwa pjuttost sempliċi biex jiġu implimentati. Dak li aħna ghamilt biex jimitaw din l-istruttura istess programm C tagħna huwa konna użat struttura. Aħna ser tibda playing ma 'dawn aktar ftit ukoll. Rajna minnhom għall-ftit ewwel sett problema 3, meta konna jittrattaw il-dizzjunarji. Iżda dan Struct persunal ħwienet isem l-aħħar, l-ewwel isem, u email. Eżatt bħal fajl CSV tagħna kien ħażna. Allura dan huwa biss konverżjoni minn format għall-ieħor. Irridu jikkonvertu, f'dan il-każ, Struct persunal fis-linja, linja comma-separat, bħal dak. Does li jagħmel sens? You guys kollha ħadu l-kwizz, so I jimmaġina inti inqas kellhom xi żmien biex jaħsbu dwar dan. Fil-funzjoni kiri, il-problema jitlob minna li jieħdu - zoom we'll fil dwar din id-daqsxejn ftit - tieħu fi struttura tal-persunal, ta 'Struct persunal, bl-isem i, u tehmeż kontenut tiegħu għall-fajl staff.csv tagħna. Jirriżulta li dan huwa pjuttost sempliċi biex jintuża. Aħna ser tip ta 'play madwar ma' dawn il-funzjonijiet ftit aktar illum. Iżda f'dan il-każ, il-funzjoni fprintf huwa verament il-muftieħ. Allura ma fprintf, nistgħu jistampaw, bħad inti guys kienu qegħdin jużaw printf dan it-terminu kollu. Tista printf linja għall-fajl. Allura minflok sempliċiment tagħmel is-sejħa printf soltu fejn inti tagħtih l-sekwenza format u allura inti tissostitwixxi l-varjabbli bl-argumenti li ġejjin, ma fprintf, l-argument ewwel tiegħek huwa minflok il-fajl inti tixtieq li tikteb. Jekk konna li tħares lejn dan l-apparat, per eżempju, il-bniedem fprintf, nistgħu naraw id-differenza bejn printf u fprintf. I ser zoom hawn ftit. Allura ma printf, aħna tagħtiha a string format, u mbagħad l-argumenti ta 'wara huma l-varjabbli kollha għas-sostituzzjoni jew is-sostituzzjoni fi string format tagħna. Billi bil fprintf, l-ewwel argument huwa tabilħaqq dan * fajl imsejħa nixxiegħa. Nimxu lura fuq hawn biex kiri tagħna, aħna stajt diġà ltqajna nixxiegħa tagħna * fajl miftuħ għalina. Dak hu li dan l-ewwel linja ma; li tiftaħ il-fajl staff.csv, tiftaħ fil-modalità tehmeż, u dak kollu li ħalla għalina li tagħmel huwa jiktbu l-istruttura tal-persunal għall-fajl. U, ejja ara, do nixtieq li jużaw il-iPad? I ser tuża l-iPad. Għandna vojt - ejja tpoġġi dan fuq il-mejda so I tista 'tikteb ftit aħjar - null kiri u li tieħu f'waħda argument, struttura tal-persunal imsejjaħ i. Ghandek ċingi tagħna, konna ltqajna fajl * tagħna imsejħa fajl, għandna fopen linja tagħna mogħtija lilna, u jien ser biss jiktbu bħala tikek peress li huwa diġà fil-pedia. U mbagħad fuq il-linja li jmiss tagħna, aħna qed tmur biex tagħmel sejħa biex fprintf u aħna qed tmur biex jgħaddu mill-proċess li rridu li jistampaw li, u mbagħad format string tagħna, li - I ser tavżak guys tell me dak li jidher qisu. Kif dwarek, Stella? Taf x'inhi l-ewwel parti tas-sekwenza format Dehra? [Stella] M'inix ċert. >> Ħossok liberu li jitlob Jimmy. Taf, Jimmy? [Jimmy] Ikun biss tkun l-aħħar? I do not know. M'inix totalment ċert. Okay. >> Kif dwar, ma xi ħadd nikseb dan korretta fuq l-eżami? No Kull dritt. Jirriżulta li hawn kollha għandna nagħmlu huwa li rridu kull parti mill-istruttura l-istaff tagħna li jiġu stampati bħala string fil-fajl tagħna. Aħna biss jużaw il-karattru sostituzzjoni sekwenza tliet darbiet differenti għaliex għandna isem l-aħħar segwit minn virgola, allura l-ewwel isem segwit minn virgola, u mbagħad finalment l-indirizz email li tkun segwita - li ma jkunx twaħħil fuq l-iskrin tiegħi - imma hija segwita minn karattru newline. Allura jien ser jikteb hija biss stabbiliti hemmhekk. U mbagħad wara string format tagħna, aħna biss għandhom il-sostituzzjonijiet, li aħna jkollhom aċċess bl-użu notazzjoni dot li rajna fil-sett problema 3. Nistgħu nużaw s.last, s.first, u s.email li tissostitwixxi f'dawk tliet valuri fis-sekwenza format tagħna. Allura kif ma li jmorru? Jagħmel sens? Iva? Nru? Possibilment? Okay. L-aħħar ħaġa li nagħmlu wara konna stampati u wara konna miftuħa fajl tagħna: kull meta aħna ve fetaħ fajl, aħna dejjem niftakru li tagħlaq dan. Għaliex inkella aħna ser jispiċċaw jnixxu l-memorja, jużaw up deskritturi fajl. Allura biex jingħalaq, li l-funzjoni do nużaw? Daniel? [Daniel] fclose? >> Fclose, eżattament. Allura l-aħħar parti ta 'din il-problema kienet li suppost jagħlaq il-fajl, bl-użu l-funzjoni fclose, li biss jistenna bħal dik. Mhux wisq crazy. Kessaħ. Allura dak problema 33 fuq il-kwizz. Aħna ser ikollhom fajl definittivament aktar I / O ġejjin up. Aħna ser tagħmel ftit aktar fil lecture llum, jew fit-taqsima tal-lum, għaliex dan huwa dak li għaddej biex jiffurmaw il-maġġoranza ta 'dan pset jmiss. Ejja jimxu fuq mill-kwizz f'dan il-punt. Iva? [Charlotte]] Għaliex fclose (fajl) minflok fclose (staff.csv)? >> Ah. Minħabba jirriżulta li - hekk il-kwistjoni, li hija waħda kbira, huwa għaliex, meta aħna tikteb fclose, aħna tikteb varjabbli fclose stilla (fajl) kif oppost għad-isem ta 'fajl, staff.csv? Huwa li korretta? Yeah. Mela ejja tagħti ħarsa. Jekk I jaqilbu lura għall-laptop tiegħi, u ejja nħarsu lejn il-funzjoni fclose. Allura l-funzjoni fclose jagħlaq nixxiegħa u li tieħu fit-pointer għall-fluss li aħna rridu li tagħlaq, kif oppost għad-isem ta 'fajl proprju li aħna rridu li tagħlaq. U dan huwa minħabba wara l-kwinti, meta inti tagħmel sejħa biex fopen, meta inti tiftaħ fajl, int fil-fatt jalloka memorja biex taħżen l-informazzjoni dwar il-fajl. Allura inti għandek pointer fajl li għandu informazzjoni dwar il-fajl, bħal kif huwa miftuħ, id-daqs tagħha, fejn inti bħalissa fil-fajl, sabiex inti tista 'tagħmel qari u kitba sejħiet għal dak il-post partikolari fil-fajl. Inti tispiċċa tagħlaq il-pointer minflok jagħlaq il-fajl isem. Iva? [Daniel] Għalhekk sabiex jużaw kiri, tgħid - kif ma tikseb l-input utent? Ma fprintf jaġixxu bħall GetString fis-sens li ser biss stenna għall-input utent u jitlob li inti tip dan - jew stenna għalik biex tip dawn it-tliet affarijiet fil-? Jew għandek bżonn tuża xi ħaġa li jimplimentaw kiri? >> Yeah. Allura aħna mhux qed - il-kwistjoni kienet, kif nistgħu tikseb l-input utent sabiex jimplimentaw kiri? U dak li għandna hawnhekk huwa l-sejjieħ ta 'kiri, għadda f'dan Struct persunal kollha tad-data maħżuna fil-Struct diġà. Allura fprintf huwa kapaċi biss jiktbu dik id-data direttament għall-fajl. M'hemm l-ebda stennija għall jintuza mill-utent. L-utent li diġà jingħata l-kontribut kif suppost mill-tqegħid f'dan Struct persunal. U l-affarijiet, naturalment, se jkisser jekk xi waħda minn dawk pointers kienu null, hekk aħna iscroll back up hawn u nħarsu lejn Struct tagħna. Aħna l-aħħar, spag string 1, email sekwenza. Aħna issa jkunu jafu li dawk kollha verament, taħt il-barnuża, huma varjabbli * char. Li jistgħu jew ma jistgħux ikunu tipponta lejn null. Huma jistgħu jiġu tipponta lejn memorja fuq il-munzell, forsi memorja fuq il-munzell. Aħna ma verament jafu, imma jekk xi wieħed minn dawn pointers huma nulli, jew invalidi, li din ser definittivament tiġrifa funzjoni kiri tagħna. Dan kien xi ħaġa li kien tip ta 'lil hinn mill-ambitu ta' l-eżami. Aħna ma jinkwetaw dwar dan. Great. Okay. Allura jimxu fuq mill-kwizz. Ejja qrib dan Guy, u aħna qed tmur biex tħares lejn pset 4. Mela jekk inti guys ħarsa lejn il-spec pset, ladarba inti tista 'aċċess għaliha, cs50.net/quizzes, aħna se jmorru permezz ta 'ftit mill-problemi taqsima illum. Jien scrolling isfel - is-sezzjoni ta 'mistoqsijiet tibda fuq il-paġna 3 ta' l-spec pset. U l-ewwel parti tistaqsi tmur u tara l-qasir fuq ridirezzjonar u pajpijiet. Liema kien tip ta 'qasir jibred, turi li inti xi tricks jibred, kmand ġodda linja li tista' tuża. U allura konna ltqajna ftit mistoqsijiet ghalik ukoll. Din il-kwistjoni l-ewwel dwar flussi, li printf jikteb fil-kontumaċja, aħna tip ta 'mimsus fuq ftit ftit mument ilu. Dan fprintf li konna biss jiddiskutu tieħu fi fluss * fajl bħala argument tagħha. fclose tieħu fi fluss * fajl kif ukoll, u l-valur tar-ritorn ta 'fopen jagħtik nixxiegħa * fajl kif ukoll. Ir-raġuni aħna ma bbenefikawx dawk qabel meta konna ttrattati printf huwa minħabba printf għandha nixxiegħa default. U l-fluss default li għalih jikteb inti ser issir taf dwar fil-qosor. Allura definittivament tagħti ħarsa lejn dan. Fit-taqsima tal-lum, aħna qed tmur biex jitkellmu ftit dwar GDB, peress li l-aktar familjari int ma 'dan, il-prattika aktar ikollok magħha, l-aktar kapaċi inti ser tkun li fil-fatt kaċċa stabbiliti bugs fil-kodiċi tiegħek. Dan il-veloċitajiet l-proċess ta 'debugging up bil-kbir. Hekk billi tuża printf, kull darba li inti tagħmel dan inti għandek recompile kodiċi tiegħek, inti għandek run mill-ġdid, xi kultant ikollok biex jiċċaqalqu l-sejħa printf madwar, jikkummentaw out kodiċi, hija biss tieħu ftit żmien. L-għan tagħna huwa li tipprova u tikkonvinċi lilek li ma GDB, inti tista 'essenzjalment xejn printf fi kwalunkwe punt fil-kodiċi tiegħek u inti qatt ma jkollhom recompile dan. Inti qatt ma jkollhom jibdew u jżommu guessing fejn printf jmiss. L-ewwel ħaġa li tagħmel huwa li kopja din il-linja u jiksbu l-kodiċi taqsima off tal-web. Jien ikkupjar din il-linja tal-kodiċi li tgħid, "http://cdn.cs50.net Wget". Jien ser jibagħtu kopja tagħha. Jien se jmorru fuq l-appliance tiegħi, zoom out sabiex inti tista tara dak li qed nagħmel, pasta fil hemm, u meta I hit Ikteb, dan il-kmand Wget litteralment huwa web tikseb. Huwa ser pull isfel dan il-fajl off ta 'l-Internet, u li għaddej biex isalva lill-direttorju kurrenti. Issa jekk jien lista direttorju kurrenti tiegħi tista 'tara li stajt ltqajna dan il-fajl section5.zip dritt fil hemmhekk. Il-mod biex jittrattaw ma 'dak Guy huwa li unzip, li inti tista 'tagħmel fil-linja tal-kmand, biss bħal dan. Section5.zip. Li ser unzip, joħolqu l-folder għalija, ttella kollha tal-kontenut, tpoġġihom fil hemmhekk. Allura issa I tista 'tmur fis-sezzjoni 5 tiegħi direttorju tuża l-kmand cd. Ċar il-iskrin bl-użu ċara. Allura ċar l-iskrin. Issa stajt ltqajna terminal nadif sbieħ li jittrattaw. Issa jekk jien lista l-fajls li nara f'dan id-direttorju, tara li stajt ltqajna erba 'fajls: buggy1, buggy2, buggy3, u buggy4. Stajt ukoll ltqajna fajls korrispondenti. Tagħhom c. Aħna mhux se tħares lejn il-fajls c. Għal issa. Minflok, aħna qed tmur biex jużawhom meta aħna tiftaħ GDB. Imxejna miżmuma minnhom madwar hekk li aħna jkollhom aċċess għall-kodiċi sors attwali meta aħna qed jużaw GDB, iżda l-għan ta 'din il-parti tat-taqsima huwa li tinker madwar GDB u tara kif nistgħu nużaw biex insemmu x'hemm tmur ħażina ma 'kull wieħed minn dawn il-programmi Buggy 4. Allura aħna qed biss jmorru madwar il-kamra verament malajr, u jien ser jistaqsu xi ħadd biex imexxu wieħed mill-programmi Buggy, u mbagħad aħna ser imorru bħala grupp permezz GDB, u aħna ser tara dak li nistgħu nagħmlu biex tiffissa dawn il-programmi, jew għall-inqas jidentifikaw x'inhu għaddej ħażin f'kull wieħed minnhom. Nibdew minn hawn ma 'Daniel. Se inti tmexxi buggy1? Ejja naraw x'jiġri. [Daniel] Dan jgħid hemm xi tort applikazzjoni. >> Yeah. Eżattament. Mela jekk I run buggy1, niġi tort seq. Fuq dan il-punt, I tista 'tmur u jiftħu buggy1.c, jippruvaw u ċifra barra dak li għaddej ħażin, iżda wieħed mill-aktar affarijiet obnoxious dwar dan l-iżball tort seq hija li ma jgħidlek dwar liema linja ta 'l-affarijiet tal-programm fil-fatt marret ħażin u kissru. Int tip ta 'għandek tfittex fil-kodiċi u figura użu raden u jivverifika jew printf biex tara x'inhu għaddej ħażin. Waħda mill-affarijiet coolest dwar GDB hija li huwa tassew, tassew faċli biex insemmu l-linja li biha ħabtiet programm tiegħek. Huwa totalment worth it li jużawh, anki jekk biss għal dak. Allura biex boot up GDB, I tip GDB, u mbagħad I tagħtiha l-passaġġ għall-eżekutibbli li nixtieq li run. Hawnhekk jien ittajpjar GDB ./buggy1. Hit Ikteb. Jagħti me din l-informazzjoni awtur, u 'l isfel hawn inti ser tara din il-linja li tgħid, "simboli Qari mid / home / jharvard/section5/buggy1. " U jekk kollox imur sew, tkun taf tara li jistampa messaġġ li tidher bħal dan. Hija ser taqra simboli, dan ser jgħidu "jien qari simboli mill-fajl eżekutibbli tiegħek," u mbagħad se jkollhom dan "isir" messaġġ fuq hawn. Jekk tara xi varjazzjoni oħra ta 'dan, jew tara li ma setgħux isibu l-simboli jew xi ħaġa bħal dik, dak li tfisser hija li inti biss ma jkunux ikkompilaw eżekutibbli tiegħek sewwa. Meta aħna jikkompilaw programmi għall-użu ma 'GDB, irridu jużaw dik il-bandiera speċjali g, u dan isir b'mod awtomatiku jekk inti tiġbor programmi tiegħek, biss billi jittajpja jagħmlu jew jagħmlu Buggy jew jagħmlu jirkupraw, kwalunkwe minn dawn. Imma jekk int kumpilazzjoni manwalment bl clang, imbagħad inti ser ikollok tmur fi u jinkludu li-g bandiera. Fuq dan il-punt, issa li għandna GDB pront tagħna, huwa pjuttost sempliċi biex imexxu l-programm. Nistgħu jew tip run, jew nistgħu biss tip r. Jikkmanda GDB Ħafna jistgħu jiġu mqassra. Normalment biex wieħed biss jew ta 'ittri koppja, li huwa pjuttost sbieħ. Għalhekk Saad, jekk inti tip ru hit Ikteb, x'jiġri? [Saad] sibt SIGSEGV, tort segmentazzjoni, u mbagħad dan kollu gobbledygook. >> Yeah. Bħal aħna qed tara fuq l-iskrin dritt issa, u bħal Saad qal, meta aħna tip run jew ru hit Ikteb, aħna xorta jiksbu l-tort seq istess. Hekk billi tuża GDB ma jsolvix il-problema tagħna. Iżda tagħtina xi gobbledygook, u jirriżulta li din gobbledygook fil-fatt tgħidilna meta din se ssir. Biex parse din id-daqsxejn ftit, din id-daqsxejn ewwel huwa l-funzjoni li fih kollox għaddej ħażin. Hemm din __ strcmp_sse4_2, u jgħidilna li din se ssir f'dan il-fajl imsejħa sysdeps/i386, dan kollu, għal darb'oħra, it-tip ta 'mess - iżda line 254. Dak it-tip ta 'diffiċli biex parse. Normalment meta inti tara għalf bħal dan, dan ifisser li huwa seg faulting f'wieħed mill-libreriji sistema. Allura xi ħaġa li tagħmel ma 'strcmp. You guys raw strcmp qabel. Mhux wisq crazy, iżda dan ifisser li strcmp ikun miksur jew li hemm problema bil strcmp? X'taħseb, Alexander? [Alexander] Hu li - huwa 254 l-linja? U l-- mhux il-binarju, iżda mhux limiti massimi tagħhom, u allura hemm ilsien ieħor għal kull funzjoni. Hija li 254 f'dik il-funzjoni, jew -? >> Huwa linja 254. Jidher qisu f'dan il-fajl i., U għalhekk il-kodiċi assemblaġġ s probabbilment. Iżda, I raden il-ħaġa aktar urġenti hija, għaliex aħna ve gotten tort seq, u jidher qisu huwa li ġejjin mill-funzjoni strcmp, m'hemm implikat, allura, li strcmp hija maqsuma? Ma għandhom, nisperaw. Hekk biss għax għandek tort segmentazzjoni f'wieħed mill-funzjonijiet tas-sistema, tipikament dan ifisser li inti biss ma imsejħa b'mod korrett. Il-ħaġa eħfef biex tagħmel biex insemmu dak li attwalment għaddejjin meta inti tara xi ħaġa crazy bħal dan, kull meta inti tara tort seq, speċjalment jekk ikollok program li l-użu ta 'aktar minn sempliċiment prinċipali, huwa l-użu backtrace. I jqassar backtrace billi tikteb bt, għall-kuntrarju l-kelma backtrace sħiħa. Imma Charlotte, dak li jiġri meta inti tip bt u hit Ikteb? [Charlotte] Dan juri me żewġ linji, 0 linja u l-linja 1. >> Yeah. Allura linja 0 u linja 1. Dawn huma l-frejms munzell attwali li kienu attwalment fis-rwol meta program tiegħek ġġarraf. Tibda mill-qafas topmost, il-qafas 0, u li jmorru lill-bottom-aktar, li huwa qafas 1. Qafas topmost tagħna hija l-qafas strcmp. Inti tista 'taħseb ta' dan bħala simili għal dik il-problema konna biss tagħmel fuq il-kwizz mal-pointers, fejn kellna tpartit qafas munzell fuq quċċata ta 'qafas munzell prinċipali, u kellna l-varjabbli li tpartit kien li jużaw fuq nett tal-varjabbli li kien prinċipali jużaw. Hawnhekk tiġrifa tagħna ġara fil-funzjoni strcmp tagħna, li kienet tissejjaħ il-funzjoni prinċipali tagħna, u backtrace qed tagħti us mhux biss il-funzjonijiet li fihom affarijiet li fallew, imma hija wkoll tgħidilna fejn kollox kien jissejjaħ minn. Mela jekk jien iscroll fuq ftit aktar lejn il-lemin, nistgħu naraw li yeah, konna fuq il-linja 254 ta 'dan il-fajl strcmp-sse4.s. Iżda l-sejħa kienet magħmula fi buggy1.c, linja 6. Allura dan ifisser li nistgħu nagħmlu - huwa nistgħu biss tmur check out u ara dak li kien għaddej fil buggy1.c, linja 6. Għal darb'oħra, hemm modi koppja biex tagħmel dan. Wieħed huwa li ħruġ minn GDB jew ikollhom kodiċi tiegħek tiftaħ fi tieqa u referenza transkonfinali. Li, minnu nnifsu, huwa pjuttost handy għaliex issa jekk int fid-ħinijiet tal-uffiċċju u inti stajt ltqajna tort seq u TF tiegħek s mintix fejn kollox kien tkissir, inti tista 'biss jgħidu, "Oh, linja 6. I do not know x'inhu għaddej, imma xi ħaġa dwar il-linja 6 qed jikkawża programm tiegħi biex jinkiser. " Il-mod ieħor biex tagħmel dan huwa inti tista 'tuża dan il-kmand imsejħa lista GDB. Tista 'wkoll jqassar ma l. Allura jekk aħna hit l, liema do nikbru hawn? We jiksbu mazz sħiħ ta 'għalf stramb. Dan huwa l-kodiċi assemblea attwali li huwa fil strcmp_sse4_2. Dan jidher tip ta 'funky, u r-raġuni aħna jkollna dan hija għaliex id-dritt issa, GDB għandha magħna fil-qafas 0. Allura ghaċ nħarsu lejn varjabbli, kwalunkwe ħin irridu nħarsu lejn il-kodiċi sors, aħna qed tħares lejn il-kodiċi sors li tappartjieni għall-qafas munzell aħna bħalissa pulzieri Allura biex tikseb xi ħaġa sinifikanti, irridu jimxu lejn qafas munzell li jagħmel aktar sens. F'dan il-każ, il-qafas munzell prinċipali jagħmel sens ftit aktar, minħabba li kien effettivament il-kodiċi li aħna kiteb. Mhux l-strcmp kodiċi. Il-mod inti tista 'timxi bejn frames, f'dan il-każ, għaliex għandna tnejn, għandna 0 u 1, inti tagħmel dan bil-up u l-kmandi isfel. Jekk I ningranaw frame wieħed, Issa jien fil-qafas munzell prinċipali. I tista 'timxi l isfel li jmorru lura lejn fejn kien I, jitla 'mill-ġdid, jinżlu għal darb'oħra, u jitla' mill-ġdid. Jekk inti qatt do program tiegħek GDB, ikollok crash, ikollok l-backtrace, u tara li huwa f'xi fajl li inti ma tafx x'inhu għaddej. Inti tipprova lista, il-kodiċi ma tfittex familjari għalik, tagħti ħarsa lejn frames tiegħek u ċifra barra fejn int. Inti probabbilment fil-qafas munzell żbaljata. Jew għall-inqas int fil-qafas munzell li ma tkunx waħda li inti tista 'verament debug. Issa li aħna qed fil-qafas munzell xieraq, aħna qed fil prinċipali, Issa nistgħu nużaw il-kmand lista li ċifra barra dak l-linja kien. U inti tista 'tara dan, hi stampata dan għalina dritt hawn. Iżda nistgħu hit lista kollha l-istess, u l-lista tagħtina din printout sbieħ tas-source code attwali li għaddej fil hawn. B'mod partikolari, nistgħu nħarsu lejn linja 6. Nistgħu naraw x'inhu għaddej hawn. U jidher qisu aħna qed jagħmlu paragun string bejn il-string "CS50 blat" u ARGV [1]. Xi ħaġa dwar dan kien jiġġarrfu. Allura Missy, do ikollok xi ħsibijiet dwar dak li jista 'jiġri hawn? [Missy] I do not know għaliex huwa jiġġarrfu. >> Inti ma taf għaliex huwa jiġġarrfu? Jimmy, xi ħsibijiet? [Jimmy] M'inix totalment ċert, iżda l-aħħar darba aħna użati string tqabbel, jew strcmp, kellna bħal tliet każijiet differenti taħtu. Aħna ma jkollu ==, ma naħsibx, id-dritt f'dik il-linja l-ewwel. Minflok kien mifrud fi tlieta, u wieħed kien == 0, wieħed kien <0, I think, u wieħed kien> 0. Allura forsi xi ħaġa bħal dik? >> Yeah. Allura hemm din il-kwistjoni ta 'li qed nagħmlu l-paragun korrett? Stella? Kwalunkwe ħsibijiet? [Stella] M'inix ċert. >> Mhux żgur. Daniel? Ħsibijiet? Okay. Jirriżulta minn dak li qed jiġri dritt hawnhekk hija meta aħna mexxa l-programm u aħna ltqajna l-tort seq, meta inti dam il-programm għall-ewwel darba, Daniel, ma inti tagħti l-ebda argument kmand tal-linja? [Daniel] No >> No F'dak il-każ, dak li huwa l-valur ta 'ARGV [1]? >> M'hemm l-ebda valur. >> Dritt. Ukoll, m'hemmx valur string xieraq. Iżda hemm xi valur. X'inhu l-valur li gets maħżuna hemmhekk? >> Valur żibel? >> Huwa jew valur żibel jew, f'dan il-każ, l-aħħar ta 'l-array ARGV huwa dejjem terminat bil null. Allura x'inhu dak li attwalment ltqajna maħżuna fil hemm huwa null. Il-mod ieħor biex issolvi din, aktar milli ħsieb permezz, huwa li jippruvaw l-istampar out. Dan huwa fejn I kien qal li l-użu GDB huwa kbir, għaliex inti tista 'jistampaw l-varjabbli, il-valuri kollha li tixtieq jużaw dan il-kmand p handy dandy-. Mela jekk jien tip p u mbagħad I tip l-valur ta 'varjabbli jew l-isem ta' varjabbli, jiġifieri, argc, nara li argc huwa 1. Jekk irrid li jistampa ARGV [0], I tista 'tagħmel dan biss bħal dik. U bħall rajna, ARGV [0] hija dejjem l-isem tal-programm tiegħek, dejjem l-isem tal-eżekutibbli. Hawnhekk għandek tara huwa ltqajna l-isem traġitt sħiħ. I tista 'wkoll jistampa ARGV [1] u tara x'jiġri. Hawnhekk aħna ltqajna dan it-tip ta 'valur mystical. Sirna dan 0x0. Ftakar fil-bidu tat-terminu meta tkellimna dwar in-numri hexadecimal? Jew din il-kwistjoni ftit fl-aħħar tal pset 0 dwar kif li jirrappreżentaw 50 fil-hex? Il-mod kif aħna jiktbu numri hex f 'CS, just biex ma jħawdu lilna nfusna bin-numri deċimali, hija aħna dejjem prefiss bl 0x. Allura dan prefiss 0x dejjem ifisser biss jinterpretaw il-numru li ġej bħala numru hexadeċimali, mhux bħala string, mhux bħala numru deċimali, mhux bħala numru binarju. Peress li n-numru 5-0 huwa numru validu f'hexadecimal. U huwa numru fil deċimali, 50. Allura dan huwa biss kif aħna disambiguate. Allura 0x0 mezzi 0 hexadeċimali, li huwa wkoll deċimali 0, binarja 0. Huwa biss il-valur 0. Jirriżulta li dan huwa dak null hija, fil-fatt, fil-memorja. Null huwa biss 0. Hawnhekk, l-element maħżuna ARGV [1] huwa null. Allura aħna qed tipprova tqabbel "CS50 blat tagħna" string għal string null. Allura dereferencing null, jippruvaw jiksbu aċċess għas affarijiet fil null, dawk huma tipikament se jikkawżaw xi tip ta 'tort segmentazzjoni jew affarijiet ħżiena oħra li jiġri. U jirriżulta li strcmp ma tikkontrolla biex tara jekk jew le inti ħadthom għadda fi valur li l null. Pjuttost, hija biss timxi 'l quddiem, tipprova tagħmel ħaġa tagħha, u jekk seg difetti, din seg difetti, u huwa problema tiegħek. Ikollok tmur tiffissa lilha. Really malajr, kif tista aħna tiffissa din il-problema? Charlotte? [Charlotte] Tista 'tiċċekkja bl-użu jekk. Mela jekk ARGV [1] huwa null, == 0, mbagħad jirritornaw 1, jew xi ħaġa [mhux intelliġibbli]. >> Yeah. Allura dak mod wieħed tajjeb ħafna biex jagħmlu dan, kif nistgħu tikkontrolla biex tara, il-valur aħna waslu biex jgħaddu fil strcmp, ARGV [1], hija din null? Jekk null huwa, allura nistgħu ngħidu okay, abort. Mod aktar komuni biex isir dan huwa li tuża l-valur argc. Tista 'tara dritt hawn fil-bidu tal ewlieni, aħna barra dak it-test ewwel li aħna tipikament jagħmlu meta nużaw argumenti kmand tal-linja, li huwa li teżamina jekk jew le il-valur argc tagħna huwa dak li nistennew. F'dan il-każ, aħna qed jistennew mill-inqas żewġ argumenti, l-isem tal-programm plus ieħor. Għaliex aħna qed madwar biex jużaw t-tieni argument dritt hawn. Allura wara xi tip ta 'test qabel, qabel sejħa strcmp tagħna li t-testijiet jew le ARGV ikun mill-anqas 2, wkoll se jagħmel l-istess tip ta 'ħaġa. Nistgħu naraw jekk dan jaħdem billi tmexxija tal-programm mill-ġdid. Inti tista 'dejjem terġa' tibda programm tiegħek fi GDB, li huwa tassew sbieħ. Inti tista 'taħdem, u meta inti tgħaddi fl-argumenti għall-programm tiegħek, inti tgħaddi minnhom meta inti sejħa run, mhux meta inti boot up GDB. B'dak il-mod inti tista 'żżomm jinvoka program tiegħek ma' l-argumenti differenti kull darba. Allura run, jew għal darb'oħra, I tista tip r, u ejja ara dak li jiġri jekk aħna tip "bonjour". Dejjem se jgħidlek jekk inti tixtieq li tibda mill-bidu mill-ġdid. Normalment, inti tixtieq li tibda mill-bidu mill-ġdid. U f'dan il-punt, huwa startjar mill-ġdid mill-ġdid, dan tistampa il-programm li aħna qed taħdem, buggy1, bl-argument hello, u prints dan out istandard; jgħid, "Inti tikseb D," wiċċ imdejjaq. Iżda aħna ma seg tort. Huwa qal li l-proċess ħareġ normalment. Allura li jistenna pretty tajba. Nru tort aktar seq, għamilna dan fil-passat, hekk jidher qisu dan kien tassew il-bug tort seq li konna jkollna. Sfortunatament, jgħidilna li aħna qed jkollna D. Aħna tista 'tmur lura u nħarsu lejn l-kodiċi u ara dak li kien għaddej hemmhekk ċifra barra dak li kien - għaliex kien tgħidilna li aħna ltqajna D. Ejja naraw, hawnhekk kien dan printf tgħid li inti ltqajna D. Jekk aħna tip lista, kif inti żżomm lista ittajpjar, iżomm iterazzjoni stabbiliti permezz program tiegħek, għalhekk ser nuruk l-linji ewwel ftit tal-programm tiegħek. Imbagħad ser nuruk l-linji li ġejjin, u l-blokki li jmiss u l-blokki li jmiss. U dan ser iżommu tipprova jinżlu. U issa aħna ser jiksbu "linja numru 16 hija barra mill-firxa." Minħabba li għandha biss 15 linji. Jekk ikollok dan il-punt u tiegħek mintix, "What do I do?" inti tista 'tuża l-kmand għajnuna. Użu jgħinu u mbagħad tagħtih l-isem ta 'kmand. U inti tara l-GDB tagħtina dan kollu tip ta 'għalf. Huwa jgħid, "Bl-ebda argument, telenka għaxar linji aktar wara jew madwar l-elenkar ta 'qabel. Lista - jelenka l-linji 10 qabel - " Mela ejja ipprova uża minus lista. U li jelenka l-linji 10 qabel; inti tista 'tilgħab madwar mal-lista ftit. Tista 'tagħmel lista, lista -, inti tista' anki tagħti lista ta 'numru, bħall-lista 8, u dan ser telenka l-linji 10 ta 'madwar linja 8. U inti tista 'tara x'inhu għaddej hawn huwa inti ħadthom ltqajna sempliċi jekk ieħor. Jekk inti tip CS50 blat, li tistampa "Ikollok A." Inkella prints out "Ikollok D." Belt Bummer. Kull dritt. Iva? [Daniel] Allura meta I ppruvaw jagħmlu CS50 blat mingħajr il-kwotazzjonijiet, jgħid "Ikollok D." I meħtieġa l-kwotazzjonijiet biex tiksbu biex jaħdmu; għaliex huwa li? >> Yeah. Jirriżulta li meta - dan huwa pass ieħor tidbit ftit gost - meta inti tmexxi l-programm, jekk aħna run u aħna tip fil CS50 blat, bħad Daniel kien qal huwa ma, u inti hit Ikteb, xorta jgħid irridu jiksbu D. U l-kwistjoni hija, għaliex hija din? U jirriżulta li kemm terminal tagħna u GDB parse dawn bħala żewġ argumenti separati. Għaliex meta jkun hemm spazju, li l-implikat bħala l-ewwel argument intemmet; l-argument li jmiss tkun waslet biex tibda. Il-mod li jikkombinaw dawn fi tnejn, jew sorry, f'waħda argument, huwa l-użu l-kwotazzjonijiet. Allura issa, jekk aħna poġġih fil-kwotazzjonijiet u run mill-ġdid, irridu jiksbu A. Hekk biss biex terġa, l-ebda kwotazzjonijiet, CS50 u blat huma parsed bħala żewġ argumenti separati. Bil-kwotazzjonijiet, huwa parsed bħala wieħed argument għal kollox. Nistgħu naraw dan bil-breakpoint. S'issa konna qed tmexxi programm tagħna, u huwa kien għaddej jew sa ma seg ħsarat jew hits żball jew sakemm ikun ħareġ u kollha kienet totalment multa. Dan mhuwiex neċessarjament l-aktar ħaġa utli, għaliex kultant għandek żball fil-programm tiegħek, iżda mhux jikkawżaw tort segmentazzjoni. Mhuwiex jikkawżaw program tiegħek biex tieqaf jew xi ħaġa bħal dik. Il-mod biex jiksbu GDB li nieqaf programm tiegħek fuq punt partikolari huwa li jiġi stabbilit breakpoint. Inti tista 'jew tagħmel dan billi tistabbilixxi breakpoint fuq isem il-funzjoni jew inti tista 'tistabbilixxi breakpoint fuq linja partikolari ta' kodiċi. I simili li jiġu stabbiliti breakpoints dwar l-ismijiet tal-funzjoni, għaliex - faċli biex tiftakar, u jekk inti fil-fatt imorru fi u tibdel il-kodiċi sors tiegħek up ftit, allura breakpoint tiegħek fil-fatt se jibqa fl-istess post fil-kodiċi tiegħek. Billi jekk inti qed tuża numri linja, u n-numri linja bidla għaliex inti iżżid jew tħassar xi kodiċi, imbagħad breakpoints tiegħek huma kollha totalment invitat up. Waħda mill-aktar affarijiet komuni nagħmel huwa stabbilit breakpoint fuq il-funzjoni prinċipali. Spiss I ser boot up GDB, jien ser tip b prinċipali, hit Ikteb, u li ser jistabbilixxu breakpoint fuq il-funzjoni prinċipali li biss jgħid, "nieqaf il-programm hekk kif tibda taħdem," u li mod, meta I run program tiegħi ma ', ngħidu aħna, CS50 blat bħala żewġ argumenti u hit Ikteb, jiġrilha l-funzjoni prinċipali u jieqaf dritt fil-linja ewwel, dritt qabel ma jevalwa l-funzjoni strcmp. Peress li jien waqfa qasira, issa I tista 'tibda mucking madwar u jaraw x'inhu għaddej bl-varjabbli kollha differenti li huma mgħoddija fil-programm tiegħi. Hawnhekk nista 'jistampa argc u ara x'inhu għaddej. Ara li argc huwa 3, minħabba li ltqajna 3 valuri differenti fiha. Huwa ltqajna l-isem tal-programm, huwa ltqajna l-ewwel argument u t-tieni argument. Nistgħu print dawk barra mill tħares lejn ARGV [0], ARGV [1], u ARGV [2]. Allura issa inti tista 'wkoll tara għaliex din is-sejħa strcmp se jonqsu, għaliex inti tara li hija ma jinqasam il-CS50 u l-blat fil-żewġ argumenti separati. Fuq dan il-punt, ladarba inti stajt hit breakpoint, inti tista 'tkompli pass permezz tal-programm tiegħek linja b'linja, għall-kuntrarju jibdew program tiegħek mill-ġdid. Mela jekk inti ma tridx li tibda program tiegħek mill-ġdid u biss tkompli fuq minn hawn, inti tista 'tuża l-kmand jitkomplew u tkompli ser tmexxi l-programm sa l-aħħar. Eżatt bħal ma għamlet hawnhekk. Madankollu, jekk I jistartja l-programm, CS50 blat, hits breakpoint tiegħi mill-ġdid, u dan iż-żmien, jekk ma rridx li jmorru biss it-triq kollha permezz tal-bqija tal-programm, I jistgħu jużaw l-kmand li jmiss, li jiena wkoll jqassar bl-n. U dan se pass permezz tal-linja programm b'linja. Allura inti tista 'tara kif l-affarijiet jesegwixxu, bħala varjabbli bidla, kif l-affarijiet tikseb aġġornata. Liema hija pjuttost sbieħ. Il-ħaġa jibred oħra huwa minflok tirrepeti l-istess kmand aktar u aktar u aktar mill-ġdid, jekk inti biss hit Ikteb - hekk hawn inti tara I ma ittajpjat fil xejn - jekk I biss hit Ikteb, se jirrepeti l-kmand ta 'qabel, jew il-kmand GDB preċedenti li jien biss jitqiegħed pulzieri I tista 'żżomm laqtu Daħħal u dan ser iżommu titjib permezz tal-linja kodiċi tiegħi b'linja. Nixtieq jinkoraġġixxu inti guys tmur jiċċekkjaw il-programmi Buggy oħrajn ukoll. Aħna ma jkollhom il-ħin biex tikseb permezz ta 'kull wieħed minnhom illum fit-taqsima. Il-kodiċi ta 'sors hemmhekk, sabiex inti tista' tip ta 'tara x'inhu għaddej wara l-kwinti jekk ikollok verament staġnati, iżda għall-inqas, biss prattika booting up GDB, tmexxija tal-programm sakemm pawżi fuqek, jkollna l-backtrace, jidhru liema funzjoni-tiġrifa kien, liema linja kien fuq, stampar xi valuri varjabbli, biss sabiex inti tikseb jħossu għal dan, minħabba li se verament tgħinek miexi 'l quddiem. Fuq dan il-punt, aħna qed tmur biex nieqaf minn GDB, li inti ma tuża nieqaf jew biss q. Jekk programm tiegħek huwa fin-nofs ta 'tmexxija xorta, u ma ħareġ, dejjem se jgħidlek, "Inti żgur li int verament tixtieq li nieqaf?" Tista 'biss hit iva. Issa aħna qed tmur biex tħares lejn il-problema li jmiss li għandna, li huwa l-programm qattus. Jekk inti tara l-qasir fuq ridirezzjonar u pajpijiet, tkun taf tara li Tommy tuża dan il-programm li bażikament prints l-output ta 'fajl għall-iskrin. Mela jekk I run qattus, dan huwa attwalment programm built-in għall-appliance, u jekk ikollok MACs inti tista 'tagħmel dan fuq Mac tiegħek wisq, jekk inti tiftaħ terminal. U aħna - qattus, ejja ngħidu, cp.c, u hit Ikteb. X'inhu dan ma, jekk aħna iscroll sa ftit u ara fejn aħna mexxa l-linja, jew fejn aħna mexxa l-kmand tal-qtates, huwa litteralment biss stampata il-kontenuti tad cp.c għall-iskrin tagħna. Aħna tista 'taħdem mill-ġdid u inti tista' tpoġġi fil-fajls multipli flimkien. Allura inti tista 'tagħmel cp.c qtates, u allura nistgħu wkoll concatenate-fajl cat.c, li huwa l-programm aħna waslu biex tikteb, u dan ser jistampaw żewġ fajls lura lura għall-iskrin tagħna. Allura jekk aħna iscroll sa ftit, naraw li meta aħna dam dan cp.c qtates, cat.c, ewwel stampata tal-fajl cp, u mbagħad taħtu, hija stampata tal-fajl cat.c dritt isfel hawn. Aħna ser jużaw dan biex tikseb biss saqajn tagħna imxarrab. Play madwar bi stampar sempliċi għall-terminal, ara kif dan jaħdem. Jekk inti guys tiftaħ il gedit cat.c, hit Ikteb, tista 'tara l-programm li aħna qed madwar biex jiktbu. Imxejna inklużi din il-pjanċa tal-bojler sbieħ, hekk aħna ma jkollhom iqattgħu l-ħin ittajpjar kollha li barra. Aħna wkoll jikkontrolla l-għadd ta 'argumenti għadda pulzieri Aħna jistampa messaġġ użu sympathique. Dan huwa t-tip ta 'ħaġa li, għal darb'oħra, bħal aħna kont qed jitkellem dwar, huwa kważi simili memorja tal-muskoli. Just remember li jżomm tagħmel l-istess tip ta 'għalf u dejjem stampar xi tip ta 'messaġġ utli sabiex in-nies jafu kif tmexxi programm tiegħek. Bil qattus, huwa pjuttost sempliċi; aħna qed biss se jmorru kollha permezz ta 'l-argumenti differenti li kienu għaddew għall-programm tagħna, u aħna qed tmur għall-istampar kontenut tagħhom barra għall-iskrin wieħed kull darba. Sabiex jistampa fajls lill-iskrin, aħna qed tmur biex tagħmel xi ħaġa simili ħafna għal dak li għamilna fl-aħħar tal-kwizz. Fl-aħħar tal-kwizz, li jimpjegaw il-programm, kellna biex tiftaħ fajl, u mbagħad kellna biex jistampaw lilha. F'dan il-każ, aħna qed tmur biex jiftħu fajl, u aħna qed tmur biex taqra minnha minflok. Imbagħad aħna qed tmur biex jistampa, minflok għall-fajl, aħna qed tmur biex jistampaw l-iskrin. Allura l-istampar l-iskrin inti ħadthom kollha isir qabel ma printf. Allura dak mhux wisq crazy. Iżda qari fajl huwa tip ta 'stramb. Aħna ser jgħaddu dik ftit kull darba. Jekk inti guys tmur lura għal dak il-problema aħħar fuq kwizz tiegħek, problema 33, l-ewwel linja li aħna qed tmur biex tagħmel hawn, jiftaħ il-fajl, hija simili ħafna għal dak li għamilna hemm. Allura Stella, dak ma li tfittex linja simili, meta aħna tiftaħ fajl? [Stella] FAJL Kapitali *, file - >> Okay. >> - Hija ugwali għal fopen. >> Yup. Li f'dan il-każ huwa? Huwa fil-kumment. >> Huwa fil-kumment? ARGV [i] ur? >> Eżattament. Dritt fuq. Allura Stella totalment id-dritt. Dan huwa dak li l-linja Dehra. Aħna ser tikseb varjabbli nixxiegħa fajl, jaħżnu * FAJL, hekk kollha brieret, FAJL, *, u l-isem ta 'din il-varjabbli se jkun fajl. Aħna jista 'sejħa hija tkun xi tkun aħna simili. Aħna jista 'sejħa hija first_file, jew file_i, ikun x'ikun aħna tixtieq. U allura l-isem tal-fajl ġie mgħoddi fuq il-linja tal-kmand għal dan il-programm. Allura huwa maħżun fil ARGV [i,] u allura aħna qed tmur biex tiftaħ dan il-fajl fil-modalità jinqara. Issa li konna fetaħ il-fajl, x'inhu l-ħaġa li aħna dejjem għandek tiftakar li jagħmlu kull meta aħna ve fetaħ fajl? Agħlaq dan. Allura Missy, kif nistgħu tagħlaq fajl? [Missy] fclose (fajl) >> fclose (fajl). Eżattament. Great. Okay. Jekk inħarsu lejn din tagħmel kumment dritt hawn, jgħid, "Open ARGV [i] u jistampa l-kontenut tiegħu sa stdout." Out Standard huwa isem stramb. Stdout huwa biss mod tagħna ta 'tgħid irridu li jistampaw il-terminali; irridu li jistampaw il-fluss produzzjoni standard. Nistgħu attwalment teħles minn dan il-kumment dritt hawn. Jien ser kopja u paste dan peress li huwa dak li għamilna. Fuq dan il-punt, issa għandna biex taqra l-ftit fajl mill bit. Imxejna diskussi koppja ta 'modi ta' fajls qari. Liema huma Favourites tieghek s'issa? Liema modi inti dehru jew għandek tiftakar, li jaqra fajls? [Daniel] fread? >> Fread? Allura fread hija waħda. Jimmy, do you know xi ħaddieħor? [Jimmy] No >> Okay. Nope. Charlotte? Alexander? Kwalunkwe oħrajn? Okay. Allura l-oħrajn huma fgetc, huwa wieħed li aħna ser jużaw ħafna. Hemm ukoll fscanf; inti guys tara mudell hawn? Huma kollha tibda bil f. Xejn x'jaqsmu ma 'fajl. Hemm fread, fgetc, fscanf. Dawn huma kollha tal-funzjonijiet qari. Għall-kitba għandna fwrite, għandna fputc minflok fgetc. Għandna wkoll fprintf bħal rajna fuq il-kwizz. Peress li din hija problema li tinvolvi qari mill-fajl, aħna qed tmur biex tuża wieħed minn dawn il-funzjonijiet 3. Aħna mhux ser tuża dawn il-funzjonijiet stabbiliti hawn. Dawn il-funzjonijiet huma kollha jinsabu fl-istandard I / O librerija. Mela jekk inti tħares lejn il-quċċata ta 'dan il-programm, tista 'tara li konna diġà inkluża l-fajl tal-header għall-istandard I / O librerija. Jekk irridu insemmu liema waħda rridu l-użu, nistgħu dejjem tiftaħ il-paġni bniedem. Allura nistgħu tip stdio bniedem u taqra kollha dwar il-kontribut stdio u l-funzjonijiet ta 'produzzjoni fil C. U nistgħu diġà ara oh, tfittex. Huwa isemmi fgetc, huwa jsemmi fputc. Allura inti tista 'drill stabbiliti ftit u ħarsa lejn, jiġifieri, fgetc u ħarsa lejn il-paġna bniedem tagħha. Tista 'tara li din tmur flimkien ma' mazz sħiħ ta 'funzjonijiet oħra: fgetc, fgets, getc, getchar, gets, ungetc, u l-input tagħha ta 'karattri u kordi. Allura dan huwa kif naqraw fl karattri u kordi mill-fajls mill input standard, li huwa essenzjalment mill-utent. U dan huwa kif nagħmlu dan b'mod C. attwali Allura dan mhux bl-użu GetString u l-funzjonijiet GetChar li aħna użati mill-bibljoteka CS50. Aħna qed tmur biex tagħmel din il-problema fi ftit ta 'modi sabiex inti tista 'tara żewġ modi differenti ta' kif isir dan. Kemm il-funzjoni fread li Daniel imsemmija u fgetc huma modi tajba biex jagħmlu dan. Naħseb fgetc huwa ftit aktar faċli, minħabba li għandha biss, kif tara, 1 argument, il-* FILE li aħna qed jippruvaw biex taqra l-karattru minn, u l-valur tar-ritorn tiegħu huwa int. U dan huwa ftit konfuża, id-dritt? Għaliex aħna qed jkollna karattru, hekk għaliex ma dan ir-ritorn ta 'char? You guys xi ideat dwar l-għaliex dan jista 'ma jirritornaw char? [Tweġibiet Missy, mhux intelliġibbli] >> Yeah. Allura Missy totalment id-dritt. Jekk huwa ASCII, allura dan integer jistgħu jiġu identifikati ma 'char attwali. Jista 'jkun karattru ASCII, u li d-dritt. Dan huwa eżattament dak li qed jiġri. Aħna qed jużaw int sempliċement minħabba li jkun bits aktar. Huwa akbar minn char; char tagħna biss għandha 8 bits, li 1 byte fuq 32-bit magni tagħna. U l-int tkun worth kollha bytes 4 "ta 'spazju. U jirriżulta li l-mod fgetc xogħlijiet, jekk aħna iscroll fil sinopsi tagħna f'din il-paġna bniedem ftit, iscroll-triq kollha stabbiliti. Jirriżulta li jużaw dan il-valur speċjali msejħa EOF. Huwa kostanti speċjali bħala l-valur tar-ritorn tal-funzjoni fgetc kull meta inti hit-aħħar tal-fajl jew jekk ikollok żball. U jirriżulta li tagħmel dawn il-paraguni ma 'EOF kif suppost, inti tixtieq li jkollok dak l-ammont żejjed ta 'informazzjoni li għandek fil-int kontradistint mill-użu ta 'varjabbli char. Anki jekk fgetc jkun effettivament jkollna karattru minn fajl, inti tixtieq li tiftakar li huwa jirritorna xi ħaġa li ta 'int tip għalik. Cela dit, huwa pjuttost faċli biex jintuża. Huwa ser tagħtina karattru; hekk kollha għandna tagħmel hu li jżomm fejn tistaqsi l-fajl, "Agħti me-karattru li jmiss, agħti lili il-karattru li jmiss, agħti lili il-karattru li jmiss," sakemm aħna nikseb l-aħħar tal-fajl. U li se pull karattru wieħed fi żmien mill-fajl tagħna, u allura nistgħu nagħmlu xi aħna nixtiequ magħha. Nistgħu jaħżnuh, nistgħu iżżidhiex mal string, nistgħu ipprintjaha. Do kwalunkwe ta 'dak. Zooming lura out u jmorru lura għall-programm cat.c tagħna, jekk aħna qed tmur għall-użu fgetc, kif jista qegħdin noqorbu din il-linja li jmiss tal-kodiċi? Aħna ser tużah - fread se jagħmlu xi ħaġa kemmxejn differenti. U din id-darba, aħna qed biss ser tuża fgetc biex tikseb karattru wieħed fi żmien. Biex il-proċess ta 'fajl sħiħ, dak li jista għandna nagħmlu? Kemm karattri hemm fil-fajl? Hemm ħafna. Allura inti probabilment tixtieq li tikseb wieħed u mbagħad jiksbu ieħor u jiksbu ieħor u jiksbu ieħor. X'tip ta 'algoritmu taħseb aħna jista' jkollha tuża hawn? Liema tip ta '-? [Alexander] A għal loop? >> Eżattament. Xi tip ta 'linja. A għall-linja huwa attwalment kbir, f'dan il-każ. U bħalek kienu jgħidu, ħsejjes bħal inti tixtieq ċirku fuq il-fajl kollu, jkollna karattru fi żmien. Xi suġġerimenti dwar dak li jista 'look like? [Alexander, mhux intelliġibbli] >> Okay, just tell me bl-Ingliż dak li qed tipprova tagħmel? [Alexander, mhux intelliġibbli] Allura f'dan il-każ, li ħsejjes simili aħna qed biss tipprova loop fuq il-fajl kollu. [Alexander] Hekk i > Id-daqs tal -? I raden-daqs tal-fajl, id-dritt? Id-daqs - we'll biss jiktbu dan bħal dan. Daqs tal-fajl għalissa, i + +. Għalhekk jirriżulta li l-mod inti tagħmel dan permezz fgetc, u dan huwa ġdid, hija li hemm ebda mod faċli biex tikseb biss id-daqs ta 'fajl ma 'dan "sizeof" tip ta' bini li inti stajt tidher qabel. Meta nużaw dik il-funzjoni fgetc, aħna qed jintroduċu xi tip ta ' ġdid, sintassi funky għal dan għal loop, fejn minflok li jużaw biss counter bażiku li jmorru karattru minn karattru, aħna qed tmur biex jiġbdu karattru wieħed fi żmien, karattru wieħed fi żmien, u l-mod nafu aħna fl-aħħar mhux meta konna magħduda ċertu numru ta 'karattri, iżda meta l-karattru aħna iġbed huwa dak il-għan speċjali ta 'karattru fajl. Allura nistgħu nagħmlu dan billi - I call dan ch, u aħna qed tmur biex initialize din bl-ewwel sejħa tagħna sabiex inġibu l-ewwel karattru mill-fajl. Allura din il-parti dritt hawn, dan se tikseb karattru mill-fajl u jaħżnu fil-ch varjabbli. Aħna ser iżommu tagħmel dan sakemm irridu jiksbu l-aħħar tal-fajl, li nagħmlu mill-ittestjar għall-karattru li ma jkunux ugwali għal dan il-karattru EOF speċjali. U allura minflok tagħmel ch + +, li kien biss inkrement il-valur, hekk jekk irridu jaqra out tal-fajl, kapital A, ngħidu aħna, ch + + tagħtina b, u allura aħna d jiksbu ċ u mbagħad d. Li b'mod ċar mhux dak li rridu. Dak li rridu hawn f'dan bit-aħħar huwa irridu jiksbu l-karattru li jmiss mill-fajl. Allura kif tista irridu jiksbu l-karattru li jmiss mill-fajl? Kif se nilħqu dawn l-ewwel karattru mill-fajl? [Student] fgetfile? >> Fgetc, jew, sorry, inti kienu totalment id-dritt. I misspelled dan id-dritt hemmhekk. So yeah. Hawnhekk minflok tagħmel ch + +, aħna qed biss ser sejħa fgetc (fajl) darb'oħra u jaħżnu r-riżultat fil-varjabbli tagħna ch istess. [Kwistjoni Student, mhux intelliġibbli] >> Dan huwa fejn dawn guys * FAJL huma speċjali. Il-mod kif jaħdmu huwa li - meta inti l-ewwel tiftaħ - meta inti l-ewwel tagħmel dik is-sejħa fopen, l * FILE effettivament iservi bħala indikatur għall-bidu tal-fajl. U allura kull darba li inti sejħa fgetc, li jiċċaqlaq karattru wieħed permezz tal-fajl. Allura meta inti sejħa dan, int inkrementazzjoni l-pointer fajl minn karattru. U meta inti fgetc darb'oħra, int jmexxuh karattru ieħor u ieħor karattru u ieħor karattru u ieħor karattru. [Kwistjoni Student, mhux intelliġibbli] >> U that's - yeah. Huwa tip ta 'dan magic taħt il-barnuża. Inti biss iżommu inkrementazzjoni permezz. Fuq dan il-punt, int kapaċi attwalment jaħdmu bil-karattru. Allura kif tista aħna Stampa din lill-iskrin, issa? Nistgħu nużaw il-ħaġa printf istess li aħna użati qabel. Li aħna kont qed tuża l semestru. Nistgħu sejħa printf, u nistgħu jgħaddu fil-karattru biss bħal dik. Mod ieħor biex tagħmel dan huwa aktar milli jużaw printf u li jiġri dan string format, nistgħu wkoll jużaw waħda mill-funzjonijiet l-oħra. Nistgħu nużaw fputc, li tistampa karattru għall-iskrin, ħlief jekk inħarsu lejn fputc - let me zoom out ftit. Naraw liema sabiħ huwa jieħu fil-karattru li naqraw bl-użu fgetc, iżda mbagħad aħna għandna biex jagħtuh nixxiegħa għall-istampar għall. Aħna jista 'wkoll tuża l-funzjoni putchar, li se jpoġġi direttament lill out standard. Allura hemm mazz sħiħ ta 'għażliet differenti li nistgħu nużaw għall-istampar. Huma qed kollha fl-istandard I / O librerija. Kull meta inti tixtieq li jistampaw - hekk printf, awtomatikament, se print għall-istandard speċjali barra nixxiegħa, li huwa li stdout. Allura nistgħu biss jirreferu għaliha bħala tip ta 'dan il-valur magic, stdout fil hawn. Oops. Poġġi l-virgola barra. Dan huwa ħafna ta 'informazzjoni ġdida funky fil hawn. A lott ta 'dan huwa ħafna idjomatiku, fis-sens li dan huwa il-kodiċi li huwa miktub b'dan il-mod biss għaliex dan huwa nadif biex jinqraw, faċli biex jinqara. Hemm ħafna modi differenti biex tagħmel dan, il-funzjonijiet differenti ħafna tista 'tuża, imma għandna t-tendenza li kemm issegwi dawn it-tendenzi istess tul u aktar. Allura ma jkun sorpriż jekk tara kodiċi bħal dan ġejjin up u għal darb'oħra. Kull dritt. Fuq dan il-punt, għandna bżonn li jinkiser għall-jum. Grazzi għall ġejjin. Grazzi għall-ħars jekk int online. U aħna ser tara inti ġimgħa d-dieħla. [CS50.TV]