[Musika jotzen] David J. MALAN: Eskubidea guztiak. [Barreak] Ongi itzuli. Hau CS50 da. Eta hau da, bost aste bukaeran. Eta, orain arte, nahiko askoz dugu eman eman hartuz ez dagoela konpiladore honetan, Clang, hori dituzun existitzen dira honen bidez dei beste tresna izeneko Egin hori nolabait magikoki zure iturburu kodea bihurtzen objektu-kodea, zero eta zeintzuk sartu ordenagailu CPU, central que prozesatzeko unitatea, benetan ulertzen. Baina badira zenbaki bat hori da, bihurtzen da gertatzen kanpaia azpian hasi sarrera eta irteera artean. Eta haragia dugula proposatu nahi nuke Xehetasun gehiagorekin sartu dela lau urrats horiek, zerbait izeneko pre-tratamendua, zerbait izeneko konpilazioaren, eta hori ikusi dugu, zerbait izeneko muntaia, eta zerbait izeneko lotzen ditu. Beraz, orain arte, gure zenbait programak, izan dugu zorrotzak barne. Duela gutxi izan dugu zorrotz batzuk konstanteak definitzen. Beraz bihurtzen da gauza horiek duten ari ikurra hash edo aurretik libera sinboloa dira pre-prozesadorea zuzentarau. Hori besterik ez da esaten, modu dotore bat , kode-lerro hori benetan beste zerbait aurretik bihurtu ordenagailuan ere saiatu bihurtu zure zeroen eta programa sartzen direnak. Esate baterako, estandar zorrotzak hartzen ditu barne I / O. H, nahiko askoz besterik esan nahi du joan aurretik, hartu fitxategiak edukia stdio.h eta itsatsi bertan. Zero ez direnak eta, beraz, puntu horretan oraindik ere. Benetan aldaketa bat besterik ez da. Eta hori da deiturikoak zehar egindako aurrez prozesatzeko etapa duzunean benetan exekutatu Clang edo berariaz Kasu gehienetan egiteko. Beraz, hau guztia gertatzen ari da Lehenengo automatikoki horrela urruti. Ondoren, konpilazio urratsa dator. Baina dugu bada oversimplified konpilazio. Programa bat konpilatzea benetan esan nahi hartu C bezalako zerbait, batetik, iturburu kodea gara, idatziz zerbait izeneko muntaketa. Batzar hizkuntza maila txikiagoa da hizkuntza hori, zorionez, ez dugu dute askoz oraingoan idatzi seihileko honetan. Baina maila txikiena zuen Zentzu literalki, zuk idazten hasteko gehitzeko eta kenketak eta biderketak eta kargatu memoria eta memoria gorde nahi du, oso oinarrizko jarraibideak ordenagailu bat, kanpaia azpian, benetan ulertzen. Azkenik, muntaia hizkuntza hartzen to zero eta bai dugun izan beraz, orain arte deskribatzeko. Eta, azkenik, benetan, ez dago deritzona da fasea lotzen dituen, eta horrek egiten zaitugu une bat besterik ez da, eta horrek konbinatzen ikusi zure zero eta zero dituztenak eta direnak beste pertsona batzuk lehenago zuk sortutakoak. Beraz, kontuan hartu hau super simple programa. Izan zen Astea 1etik da. Esan zuen, besterik gabe, Hello World, pantailan. Hau ran dugu Clang bidez. Edo Egin bidez ran dugu horrek ran Clang. Eta garai hartan outputted non zero batzuk ere bai. Baina, ez da kanpo bihurtzen da tarteko urrats bat. Joan nintzen baino gehiago izanez gero, hemen - Ene, ez nahi zion ikusteko oraindik. Joan nintzen baino gehiago izanez gero, hemen nire tresnaren eta ireki dut hello.c, hemen bera duen programa da. Eta zein da nire terminal egin dut leiho hemen noa exekutatu Clang baino Make, eta horrek automatizatzen guztiak lau Gurekin urrats horiek. Eta clang-S egiten dut eta hello.c ondoren, eta, ondoren, idatzi. Eta keinuka gonbit bat eskuratu dut berriro ere, eta hori ona da. Eta orain, apur bat handiagoak leihoan, Ireki gedit hemen noa. Eta ireki fitxategi bat dut, bihurtzen da, deritzo hello.s honetan muntaia hizkuntza hori du Aipatu dut lehenago. Eta hau da, zer deitzen muntaia hizkuntza, nahiko maila baxua argibideak zure Intel CPU duten edo edozein hori barruan da ulertzen. Eta mov mugitzen da. deia da , telefonora deitu behar da, oso maila funtzioa. Azpi kendu da. Beraz, bereziki PUZ bat duzu barruan Zure ordenagailuan, zer egiten du Ezberdinak, versus bestetik PUZ merkatua da, eta horrek argibideak da ulertzen du, eta, askotan, nola eraginkorra da da, nola azkar da zenbait exekutatzean da jarraibide horien. Orain honi buruzko informazio gehiago lortzeko, hartu ahal izango duzu hurrengo Fall Colegio CS61. Baina, hemen, dugu, adibidez, batzuk identifikadore hori ezagutzen begiratu dezake. hello.c programa baten izena da. . Testua - Ez dago interes handirik ez orain, gogoratzen den testua segmentuan, astelehenetik bezala, non parte memoria zure programa benetan amaitzen. Beraz, hori da, gutxienez vaguely ezagutzen ez. Hemen, jakina, aipatu behar da Gure eginkizun nagusia da. Behera korritu, gauza hauek erreferentzia izenekoa erregistroak, oso txikiak Saiakera memoria zure CPU benetako barruan. Eta joan I behera bada, are are gehiago, nolabaiteko ikusten dut ASCII zeharkako aipamena. Eta hor dago, hain zuzen ere, kate hau da, kaixo, koma, mundua. Beraz, istorio laburrak, hau izan da zuretzat, gertatzen ari da automatikoki, kanpaia azpian, denbora hori guztia. Eta zer dira benetan gertatzen ari dena da behin exekutatu duzun Clang, edo bidearen arabera Egiteko, lehen ari zaren lortzean, iturburu-kodea, batetik, izenekoak muntaia hizkuntza. Ondoren Clang muntaia hau bihurtzean Hizkuntza behera zero eta direnak. Eta hau diapositiba hasi dugu Gure Aste 0 buruzko eztabaida - eta, ondoren, Aste 1. Eta, azkenik, zero horiek eta bai daude zero eta bai konbinatzen liburutegi horiek gara hartuz Standard I / O edo atsegin ematen Katea Liburutegia edo are CS50 liburutegian. Beraz, irudi hau margotzeko gehiago ikusmen, hello.c dugu. Eta, jakina, baina, erabiltzen printf du funtzionatzeko, esan kaixo mundua. Konpilazio urratsa hartzen du behera espedientea ikusi besterik ez dugu hello.s, nahiz hori, normalean, nahiz eta ezabatu automatikoki. Baina hori muntaia kodea da erdiko urratsean. Eta orduan, muntaia muntatzen dugu hizkuntza, nolabait esateko, hori egiten duzunean lortu zero eta horiek ere. Beraz, modu eraginkorrean parte dugu handitutako gaur egun on zer gara emandako hartuz, esan nahi du iturri kodea joan kodea oposiziorako. Baina, azkenik, gaur egun, irudi bera dela - it shove dezagun baino gehiago ezkerreko aldean. Eta ohartu goian dagoela Stdio.h aipatu dut. Duen fitxategi bat dugun sartzen da ia hasi programak idatzitakoa dugu. Eta espedientea horren edukia da get kopia itsatsi, eraginkortasunez zure kodea gainean. Baina bihurtzen da, eta ordenagailu batek sistema, nonbait, ez da zentzuzkoa bat stdio.c fitxategia norbaitek idatzi zuen urte duela inplementatzen guztiak funtzio izendatu zuten stdio.h batean. Orain errealitate seguruenik ez zure Mac edo zure PC edo are batean CS50 tresnaren bat gordinak C kodea da. Norbaitek dagoeneko konpilatu da, eta barne . O kode objektu edo fitxategi bat. fitxategia, eta horrek liburutegi partekatua aipatzen hori izan da aurrez instalatutako eta zuretzat aurrez konpilatutako. Baina demagun ez dagoela, hain zuzen ere existitzen gure ordenagailuak paraleloki stdio.c an Clang batera. Zure kodea da konpilatuta eta muntatu. stdio.c kodearen ari bildu eta muntatu, beraz, azken hori zapaldu, behera hemen, nolabait dugu lotura, nolabait esateko, zure zero eta bai bere zero eta bai bat sartu programa erraz bat da, azken finean, deitu besterik Hello. Beraz, hori da magia hori guztia izan da, beraz, orain arte gertatzen. Eta hauek hartzen jarraituko du prozesuak ematen, baina konturatu han xehetasunak mamitsuena asko gertatzen ez azpian. Eta hau da, zer egiten du zure Intel barruan ordenagailu bereziki desberdin. Beraz, ohar horretan, nahi duzu bada gurekin Bazkaltzeko ostiral honetan, joan egin Ohiko leku cs50.net/rsvp, 1:15 PM ostiral honetan. Eta, orain gutxi iragarkiak bat. Beraz, berri onak batzuk ditugu. Eta zenbait albiste txarra izan dugu. Berri onak hemen hasi. [GROANING] Guztiak eskubidea. Beno, teknikoki da opor eta, beraz, ez da hainbeste digu opari bat. Baina gero, noski, albiste txarra da. [GROANING] Denbora asko igaro dut animazioak horien gainean. [Barreak] Ez dago berrikuspen saio bat izango da, hau astelehena datozen. PM 5:30 etan izango da joan. Gogoratzen izango ditugu datu horiek guztiak Ikastaro horrek e-posta bidez besterik gabe, egun pare bat webgunea. It filmatu egingo da, eta eskuragarri Handik gutxira. Beraz, bada, ezin duzu egiteko hori astelehena gau zirrikitua, ez kezkatu. Atal datozen aste honetan izango da, gainera, Iritzia zentratu galdetegiko. Zure atala Astelehena, hau da, badago hain zuzen ere, unibertsitateko opor dugu oraindik atalean betetzen. Besterik gabe, ezin baduzu egin duten Atal ari zaren joan delako kanpoan, hori ongi. Igandea joateko bat edo Asteartea atala edo to tune-en Jason atala, hau da, eskuragarri online. Beraz, gehiago albiste txarra. Beraz, curriculumaren arabera, hitzaldia dugu datorren ostiralean. Baina berri ona - argi eta garbi, denbora gehiegi igaro dut honetan. [Barreak] Ostirala en hurrengo hitzaldiak izango ditugu bertan behera uzteko. Beraz, guretzat opari bat izango da, beraz, benetan polita izan atsedenaldi batean aste honetan, eta beraz, bi aste bitartean. Ez hitzaldi datorren astean, txiki-txiki bat besterik ez da, beraz, galdetegi txiki, zein izan behar duzu ohitu gero eta ilusioa. Hargatik, gaur egun gure arreta piztu behar zerbait gehiago da, hain zuzen ere, ikusmen eta gehiago zirraragarria eta etapa ezartzeko zer horizonte izan joan denbora besterik aste pare bat. Lehenengo galdetegi ondoren, buelta dugu gure arazoa multzoen bestera fokua domeinu arazo jakin, dela auzitegi edo segurtasun gehiago, oro har. Izan ere, arazo hau tradizio set me bat da ikaskide edo CAk irakasten ibiltzen zehar campuseko argazki batzuk hartzen identifikagarri baina ez bistako pertsona, leku, edo gauzak, eta, ondoren, urtero dut nolabait kudeatzeko ustekabean ezabatu edo hondatutako digital media txartela hori da gure barruan kamera. Baina big deal ez. Aurrera dezaket eta plug nire ordenagailuan sartzen. Da irudi auzitegiko bat egin nuen, beraz, , hitz egiten zero kopiatzea eta direnak off memoria txartela duten ala ez bere SD txartela edo compact flash txartela edo edozein dela ere ezagutzen duzu. Eta gero entregatu ahal izango dugu. Eta, beraz, erronka aurretik, besteak beste, zuretzat gauza, idazteko izango da C kodea duten sorta oso bat berreskuratu du Niretzat JPEGs eta agerian izango da Pertsona horiek, lekuak, edo gauza. Eta, gainera, hitz egingo dugu, arazo honetan ezarri eta egunetan, zatoz buruz grafikoak orokorrean. Erabili dugu beraiekin, ikastaro bat, apurtu da. Baina Ordena duzun hartu emandako existitzen ez horiek maila handiko nozio laukizuzenak eta obalo du. Baina kanpaia azpian daude pixel. Eta izan dituzun hasteko horiek pentsatzen. Edo p-multzoa izango duzu 4 izatea uste Zure adreilu arteko aldea buruz, nola azkar baloia zaren zehar mugitzen da Pantailako apurtu. Beraz, ideia hau da: zure pantaila hori puntu play sartuko da dagoeneko. Orain ikusten duzuna, baina, zer da lortu ordenagailuko pantailan duzu. Dituzun inoiz bada gainbegiratu onak edo txarra telebista, odds askoz politak dira tratatzeko technophobes bezalako ikusleek ez duten benetan ezagutzen informatika buruz asko. Eta, beraz, oso erraza da polizia for detektibe esan, ezin duzu garbitu niretzat sortu dela? Edo hobetzeko, ezta? Hobetu hitza buzz bezalakoa da gehien edozein delitu erlazionatutako ikuskizuna. Eta errealitatea da hartu duzu oso bat bada susmagarri bat egiteko argazki lausoak zerbait txarra, ezin duzu hobetu besterik ez da. Ezin duzu infinituki gerturatzeko. Ezin duzu norbait en glint ikusi begi duten konpromisoa hartu duten bereziki delitu, izan arren hau prebalentzia telebistan. Eta, beraz dezagun motibatu duten próximas arazoa ohi batean ezarri ikuskizunak eta horietako batzuk egiten duzun ezaguna izan daiteke. [Bideo-erreprodukzioa] -Ados. Orain, duzun begirada on bat lortzeko en. -Hold it. Exekutatu back hori. -Itxaron minutu bat. Joan eskuinera. -Ez dago. Izoztu dela. -Pantaila osoa. -Ados. Izoztu dela. -Estutu sortu horretan, egingo dut? Mutil on-Vector atzeko gurpila arabera. Eskubidea hemen Zoom-Leku honetan. -Ekipoak, eskuin, imaged du handitu ahal izango da, eta zorroztu. -Zer da hori? Ditu hobekuntza-programa bat da. -Ezin duela garbitu edozein sortu? -Nik ez dakit. Dezagun areagotuko da. -Hobetu atal A-6. -I xehetasun hobetu eta - -Nik ez da nahikoa uste hobetzeko. Askatu da nire pantaila. -Hobetu bere begi isla. -Dezagun exekutatu honen bidez bideo-hobekuntza. -Edgar, hau hobetu ahal izango duzu? Hang-an. -I've dira hausnarketa hori lantzen. Norbaitek-en gogoeta. -Hausnarketa. -Bada, gogoeta bat da gizonaren aurpegian. -Hausnarketa. -Bada, gogoeta bat da. Ispilu on-Txikiagotu. -Duzu gogoeta bat ikus daiteke. -Can, irudia hobetzeko duzu hemendik aurrera? -Ezin hura hobetzeko duzu hemen? -Ezin hobetzen duzu? -Ezin hobetzen duzu? -Ezin dugu hau hobetzeko? -Ezin hobetzen duzu? Bigarren an-Eutsi, hobetu dut. Ate-en Txikiagotu. X10-. Zoom-. [Barreak] -Mugitu sartu -Itxaron, gelditu. -Gelditu. -Pausatu da. -Biratu 75 gradu inguruan bertikala mesedez. [Barreak] -Gelditu, eta atzera zatia atea buruz berriro. Got-irudi bat Enhancer ahal bit? -Agian Pradeep Sen erabili ahal izango dugu metodoa leihoetatik sartzen ikusi. -Hau software artearen egoera da. The ikono-balioa da off. -Rekin eskuineko konbinazio algoritmoak. -Hartu zuen argiztapen algoritmoak behar hurrengo maila I eta horiek erabili ahal izateko argazki hau indartzeko. -Lock eta z ardatzean handitzeko. -Hobetu. -Hobetu. -Hobetu. Izoztu-eta hobetzeko. [END bideo-erreprodukzioa] David J. MALAN: Beraz Arazoa Ezarri 5 zer datza aurretik dago. Beraz, laster ikusiko dugu hobeto ulertzeko noiz eta zergatik ditzakezun eta gure ezin horrela hobetzeko. Baina lehen, dezagun itzuli, gure arreta eraikuntza-blokeak egiten zaitugu batzuk gai izan behar duen istorio kontatu nahi izan. Beraz, gogora ekarri atera dugun argazki honetan Astelehena, eta pixka bat azken astean. Eta hau gauza diseinua deskribatzen ordenagailuaren memorian denean programa exekutatzen ari. Gora gora segmentu Tech, oroitzapen, aipatzen , benetako zero eta bai osatzen duten programa. Ez da, behean, edo batzuk hasieratu uninitialized datuak, eta horrek, normalean, konstanteak nahi bezala gauzak edo aipatzen kateak edo global aldagaiak dira, aldez aurretik onartuta. Badira zeure da, baina etorri egingo dugu itzuli pixka batean. Eta gero pila da. Askoz erretiluak pila bezala kafetegia, hau da, non memoria lortzen geruzetan eta geruzetan direnean Zer programa batean? Zer pila erabiltzeko da? Bai? Funtzioa deitu. Denbora edozein funtzio-dei bat duzunean, memoria sliver bere egiteko aldagai lokalak edo bere parametroak. Pictorially eta, ikusiko dugun bakoitzean duten ondoz ondoko funtzioa deitzen denean, A deiak deiak B C D deiak, haiek get pila gainean sartuta. Eta xerra horietako bakoitzean memoria funtsean berezia hedadura funtzio hori, eta, jakina, problematikoa da nahi duzun eskua bada ko funtzio batetik bestera pieza bat datuak nahi duzun da edo mutate aldatzeko. Beraz, zein izan zen gure aukera ematen irtenbide Pila bat irudikatzen dute funtzio bat enkoadratzearekin memoria barruan aldatzeko pilaren markoa beste bat? Nola bi eztabaida horiek beste bat? Beraz, erakusleak edo helbideak moduan, horrek, berriz, besterik gabe, deskribatzeko non hasi memoria, jakin bat modu Esku-zenbakia, bereziki, balioa aurkitu daitezke. Beraz, azken aldiz gogoratzen dugu gehiegi jarraitu istorioa eta begiratu nahiko buggy programa. Eta programa honen gutxi bat da buggy arrazoiak, baina gehienak worrisome bat da huts egiten badu zer egiaztatu behar delako? Bai, sarrera egiaztatu huts egin. Sentitzen dut? Da 12 karaktere baino gehiago badu. Beraz, oso smartly, noiz memcopy deituz, horrek, izenak dioen bezala, besterik gabe, kopiak bere argumentua bigarren memoria bere lehen argumentua da. Hirugarren argumentua, oso smartly da hautatuta Ziur ez duzula egiteko kopiatzeko baino gehiago, kasu honetan, luzera bar, karaktere-kopurua, helmuga izan da, hau da, array C. Baina arazoa da zer C bera ez bada nahikoa handi kudeatzeko duten? Kopuruaren kopiatzeko duzu byte duzula eman. Baina, zer egin behar benetan gehiago byte baino gela? Beno, programa hau oso foolishly besterik blindly hasten da, edozein dela ere hartu behar da eman, kaixo backslash 0 handia bada kate laburra nahikoa, bost karaktere bezala. Baina benetan bada edo 12 karaktere 1.200 karaktere, azken aldiz ikusi genuen ari zaren, besterik gabe, erabat joan gainidatzi memoria ez du zurea. Eta kasurik okerrenean, gainidatzi baduzu gorri zati izeneko dugun itzultzeko helbidea - hau da, ordenagailuaren automatikoki, zuretzat, atzean eszenak, tucks kanpoan 32 biteko balioa duen gogorarazten zer helbide behar itzuliko dira foo, beste funtzio hau, egiten da exekutatzen. Ordenatzen du mamia, ogi bat da zein itzultzen. Gainidatzi baduzu, seguru asko, Oraindik txarra zentzuduna bada, ezin liteke potentzialki hartu baino gehiago norbaiten ordenagailuan. Eta, zalantzarik gabe, izango duzu, kraska da kasu gehienetan. Orain, arazo hau areagotu besterik ez zen hasi ginen memoria buruz hitz gisa kudeaketa orokorrean. Eta malloc, memoria esleitzeko, bada bat funtzioak esleitu dugu erabili ahal memoria ez dugu aldez aurretik jakin batzuk garela behar izatea. Beraz, adibidez, joan nintzen atzera tresnara hemen. Eta ireki nuen azken aldiz hello2.c batetik, gogoratzen programa hau hemen, eta horrek begiratu honen antzeko zerbait apur bat, Hiru lerro - adierazi zure izena eta, ondoren, kate izena, ezkerretik, berdinen getstring. Eta, ondoren, inprimatu dugu, erabiltzailearen izena. Beraz, hau super programa erraza izan zen. Argi izan dezagun, aurrera me eta hola-2. Dot barra-2 kaixo egin nahi dut. Adierazi zure izen - David. Sartu. Kaixo David. Ados lan egin behar dela dirudi. Baina zer da benetan gertatzen kanpaia hemen azpian? Lehen dezagun atzera azala geruza batzuk en. Katea sinonimo besterik ez dugu da konturatu zer? Char izarra. Hargatik, pixka bat gehiago da urrutira baina teknikoki zuzena hau karaktererik izar, eta horrek esan nahi du, hau da, izena, bai, aldagai bat da. Baina zer gertatzen da izen-dendak helbide da karaktere bat, sentitzen pixka bat arraroa dut itzuli delako katea. Atzera anitz dut lortzean karaktereak ez du karaktere bat. Baina, noski, bakarrik behar duzu lehenengo char en helbide gogoratu du, non kate osoa da, zergatik delako? Nola irudikatu duzu, non bukaera katea hasieran dago, zertarako? Backslash zero. Beraz, bi arrasto horiek irudikatu duzu hasiera eta amaiera baino lehenago edozein kate daude eta, beraz, luze jo dute Oraindik ongi null horrekin eratu amaiera, backslash zero dela. Baina hori getstring deituz. Eta bihurtzen da hori getstring denbora honetan guztian izan da mota Gurekin iruzurra. Ari dira lan hori egiteko, ziur izan, Erabiltzaile-kate bat lortzean. Baina non memoria hori dira datozen? Joaten gara itzuliz gero, argazkia eta hemen aplikatuko definizio berri bat Oraingoz, duela pila dagoela, non memoria joaten denean funtzioak deitzen dira, logika horren arabera, noiz getstring deitu, eta, ondoren, idatzi dut D-A-V-I-d, non sartu da D-A-V-I-D backslash zero gordetzen oinarritutako an istorioa kontatzen dugu gurekin arte? Badirudi ahal izango litzateke pila, ezta? Noiz lortu katea deitu bat lortuko duzu pila memoria zati txiki. Beraz, D-A-V-I-D arrazoia nabarmentzen da backslash zero gordetzen pila dago. Baina itxaron minutu bat, itzultzen getstring katea, nolabait esateko, eta horrek esan nahi du kafetegitik erretilu da hartu off pila. Eta azken aldiz esan dugun bezala, laster batean gisa funtzioak, eta zuk hartu iturria, nolabait esateko, pila off, zer ahal izango du bere gain hartzen arrastoen buruz memoria hori? Redrew Ordena ditut galdera-marka gisa eragingarritasunez bihurtu delako balio ezezaguna da. Dira berriz erabili daiteke batzuk hurrengo funtzioa deitzen da. Bestela esanda, gerta badugu egon gordetzeko to - Azkar irudi bat marraztu dut Hemen pilaren. Gerta dugu marrazketa beheraino bada nire memoria segmentu, eta esan dugu hori memorian lekua arg nagusia, eta, agian, C eta okupatzen arg V eta ezer gehiago programan, denean getstring deitzen da, zentzuzkoa getstring lortzen bat memoria zatia hemen. Eta, ondoren, D-A-V-I-D nolabait amaitzen funtzio honetan. Eta oversimplify noa. Baina Demagun bere D-A-V-I-D backslash zero. Hainbeste byte hau erabiltzen getstring for markoan. Baina berehala itzultzen getstring gisa, dugu esan zuen azken aldiz memoria honetan zehar Hemen guztiak bihurtzen - woops! - guztiak bihurtzen eraginkortasunez ezabatu. Eta hau ezin dugu uste, orain galdera markak nork daki zeren zer memoria horren bihurtu dugu. Izan ere, askotan deitu dut funtzioak getstring beste. Eta berehala deituko dudan bezala, beste batzuk getstring baino funtzioa, agian ez bereziki, programa honetan begiratu besterik ez dugu baina, ziur aski, beste beste batzuk funtzioa azkenean baliteke ematen pila in situ etorkizunean. Beraz, ezin da getstring azalera izatea Pilan D-A-V-I-D nuke, zeren berehala galduko sarbidea. Baina badakigu getstring bakarrik zer? Ez da itzuli Niri sei pertsonaiak. Zer da zuen benetan itzuli azken ordua ondorioztatu dugu? Lehenengoa helbidea. Beraz, nolabait, noiz getstring deitzen duzu, memoria zatia da aldi baterako katea, erabiltzaile mota eta hori eta gero itzuli da helbidea. Eta bihurtzen denean nahi duzu Funtzio honek memoria esleitu modu eta pertsonari deitzen bueltan funtzioa, helbide memoria zatia dela, zu erabat ezin jarri pila in hartan behean, funtzionalki delako besterik ez da ez zurea bihurtu Oso joan azkar, beraz, seguruenik dezakezu asmatzeko non ziurrenik gara zozketa joan ordez, llamado zeure du. Beraz, zure memoria en beheko arteko diseinua eta zure memoria en goiko diseinua segmentu sorta oso bat dira. Pila bat da, eta eskuineko gainean zeure da. Eta zeure bat besterik ez da, hainbat zatika memoria hori ez funtzioak erabiltzen direnean, deitzen ari. Honez memoria epe luzean erabiltzen denean, ko funtzio batzuk hartu nahi duzun memoria eta gai izango an zintzilikatzeko da gainean kontrola galdu gabe. Orain agian ezin duzu berehala ikusten hau ez dela perfektua diseinu bat egotea. Zure programa egotzitako memoria gisa, pila, edo deitu duzun bezala, gero eta Funtzio gehiago, edo bestela, esleitu gisa da malloc batera zeure gisa off memoria getstring da, zer egiten ari da argi eta garbi, badirudi saihestezina izango da arazoa? Eskubidea. Izan ere, hala nola gezi horiek elkar seinalatuz ez du Bode ondo. Eta, hain zuzen ere, oso azkar izan dugu huts modu kopurua edozein programa bat. Izan ere, izan dezake dugula uste dut honek ustekabean egin ondoren. Edo ez bada, utzi egin nahita orain. Let me aurrera idazten eta super azkar Programa bat izeneko dontdothis.c. Eta orain, joan naiz eta hemen ez zorrotz artean, stdio.h. Funtzioa foo hartzen aldarrika dezagun argumentuak ez du, hau da, baita hutsunea adierazten du. Eta gauza bakarra da foo egingo da dei foo, ziurrenik ez da smartest ideia, baina hain da. Ent hutsune nagusia. Orain gauza bakarra da nagusira joan egin foo deitzen da baita ere. Eta besterik Jaurtiketa egiteko, joan naiz Aurrera eta hemen esan printf "Kaixo tik foo ". Ados. Beraz, bada, ez dut akatsik egin, Egin dontdothis dot barra. Eta utzi egin da handiagoa leihoan - dot barra, dontdothis. Goazen. Ai ene. Dirudienez, hau egin ahal izango duzu. Madarikatua da. Ados. Itxaron. Stand by. Egin dugu - Berau erabili genuen Egin batera. [Suspiros] Ezagutzen dut, baina uste dut besterik ezabatu duten. Uh, bai. Madarikatua da. Rob hau konpontzeko. Zer? Oso erraza da. Bai, optimizazioa aktibatuta off dugu. Ados, stand bye. Orain hobeto sentitzen naiz. Ados. Guztiak eskubidea. Hargatik konpilatu hau - Egin duzun dontdothis. Hau izenez aldatu beharko duzu besterik gabe, une batean dothis.c. Ez dago goaz. Eskerrik asko. Ados. Izan zen duten I inprimatzeko beraz, zerbait atera zen benetan besterik moteldu dituen prozesua dugu iritsi litzateke puntu horretan. Ados. Phew! Beraz, zer da benetan gertatzen ari da? Arrazoia ez dago, besterik gabe, bat alde batera bezala, ezer egin sarrerari dagokionez, eta irteera joera motelagoa izan nahi duzulako izan karaktereak idatzi du pantailan, korritu ditu. Hain luze ipuinean, izan nuen benetan gertatu da, beraz, pazientzia, izango genuke ikusten da azken emaitza hau ere. Orain dela inprimatu-ak duen ibilaldi lortu nuen, ikusten dugu berehala. Beraz, zergatik ez da hau gertatzen. Beno, azalpen errazak, jakina, foo da hori beharko ez bera izango deituz. Gaur egun, oro har, hau errekurtsio da. Eta aste pare bat pentsatu genuen Duela recursive ona da. Errekurtsio hau modu magikoa da zeure burua adierazteko super succinctly. Eta lan egiten besterik ez da. Baina ez dago guztien ezaugarri nagusietako bat du recursive programak hitz egin dugu buruz, eta begiratu batean, beraz, orain arte, eta horrek izan zen, zer egiten dute? A-oinarria kasuan, hau da, batzuetan gogorra kodetuak Kasu horretan, egoera batzuetan esan ez deitu foo, hau da, argi eta garbi ez da kasua hemen. Beraz, zer da benetan gertatzen ari dena Argazki hau dagokionez? Beno, orduan nagusia foo deitzen da, memoria zati bat jasotzen du. Noiz foo foo deiak, baina lortzen memoria-xerra bat. Noiz foo foo deiak, xerra bat lortzen da. Xerra bat lortzen da. Xerra bat lortzen da. Foo da inoiz itzuli. Inoiz ari gara horietako bat ezabatu tik pila fotograma. Beraz, zeure bidez ari gara, ez putz nork daki zer gehiago, eta aipatu nahi gure mugetatik gara overstepping izenekoak memoria segmentu. ERROREA joan segmentazio faltsua. Konponbidea ez da, beraz, argi eta garbi, ez egin hori. Baina inplikazio handiagoa du, hori bai, ez da ez dago erabat muga batzuk, bada ere, ez da oso ondo definitu, nola jo askotan funtzio bat dei dezakezu programa, zenbat aldiz funtzio bat berak dei daiteke. Beraz, nahiz eta predikatzeko errekurtsio genuen hau potentzialki magiko gisa, gauza bat aste pare duela sigma du funtzioa, eta datuak eskuratzeko dugu egiturak eta CS50, beste bat ikusiko duzu ditu eskaerak, ez da nahitaez onena. Zeren eta funtzio bat deitzen du bere burua, deitzen dio berak, nahiz eta han-base bat da kasu horretan, ez duzu hit bada, kasu horretan, oinarri 1.000 deiak edo 10.000 deiak, arabera duten aldia exekutatu agian gela Zure deiturikoak pila eta hit on memoria segmentu beste batzuk. Beraz, ez da gehiegi diseinua merkataritza-off dotorezia artean eta artean zure sendotasuna ezartzeko. Beraz, ez dago arazotxo bat, edo da zer dugu Gotcha beste izan da, beraz, orain arte egiten ari dira. Noiz getstring deitu nuen - dezagun atzera me-kaixo 2. Nabarituko dut getstring deituz, duen helbide bat itzuli egin da. Eta gaur aldarrikatzen dugu helbide zeure bada. Eta orain naiz inprimatzen du helbide hartan katea. Baina inoiz ez dugu deitu getstring kontrakoa. Inoiz ez dugu izan, funtzio bat bezala calll to ungetstring, non atzera eskua duzu memoria hori. Baina sinceramente dugu ziurrenik izan behar zuen. Mantendu dugu ordenagailuan galdetuz Zeren memoria, norbaitek bezalako modu getstring baina inoiz eman atzera, ziur aski, hori gehiegi da bound to ekar Horren bidez, arazoak agortuko dugu memoria. Eta, hain zuzen ere, horiek ahal dugun tresna berria, eta horren erabilera-arazoak apur bat críptica idatzi da. Baina aurrera me, eta zipriztintzen sortu besterik gabe, une batean pantailan. Aurrera joan eta exekutatu Valgrind dut Parametro horren lehen komando batekin lerroko izena da duen programa kaixo-2. Eta, zoritxarrez, oso irteera da atrociously ez da ona, arrazoi konplexuak. Beraz, gaizki dagoela ikusi dugu. David da nire izena aipatu. Beraz, programaren benetan exekutatzen. Eta orain, irteera hau lortu dugu. Beraz Valgrind antzekoa da to GDB espirituz. Ez da berez araztaileak bat. Baina memoria checker bat da. Programa bat zure exekutatu egingo da programatu eta esango galdetu baduzu ordenagailuaren memoria entregatu eta inoiz ez da atzera, eta, beraz duzula zentzua leak memoria bat. Eta memoria filtrazioen joera txarra izan. Eta ordenagailuen erabiltzaile izan da duzu ziurrenik sentitu hau, izan ala ez duzu Mac edo PC bat. Erabili izan duzu inoiz zure ordenagailuaren eta ez, berriz, hainbat berrabiarazi egun, edo, besterik gabe duzun got asko programak exekutatzen, eta madarikatua gauza egiteko artezteko geldialdi bat motelduz, edo, gutxienez, super gogaikarriak da erabili, izan ere, dena besterik lortu super motela. Orain dela arrazoi kopurua edozein izan daiteke. Infinitua begizta, akats bat izan liteke norbaiten kodea, edo, besterik gabe, eta ari zaren gehiago erabiliz, esan liteke memoria, edo saiatzen da, zure baino ordenagailua du, benetan. Eta, agian, beste programa batzuk akats bat da memoria hori mantentzeko eskatuz. Urte nabigatzaile ziren notorio for hau, memoria gero eta gehiago eskatzen baina inoiz ez da gozamenerako. Ziur asko, besterik ez baduzu finitu bat memoria, ezin duzu eskatu infinituki asko aldiz memoria duten batzuk. Eta, beraz, hemen zer ikusten duzu, nahiz eta berriro Valgrind irteera da alferrik konplexua begiratu at Lehenengo, interesgarri hau zatia da. Montón - irtetean erabiltzen. Beraz, hemen zenbat memoria zen zeure erabilera honetan; denbora nire programa amaitu da - itxuraz sei bloke bat byte. Beraz, nire esku olatu noa zer at bloke bat da. Uste da, besterik gabe pusketa bat, bat gehiago zatia hitz teknikoak. Baina sei byte - Zein dira sei byte duten ziren oraindik erabileran? Zehazki. D-A-V-I-D backslash zero, bost gutun izena + null amaiera da. Beraz, programa honen Valgrind nabaritu dut sei byte eskatu, itxuraz, erabiltzaileak getstring modu bat, baina inoiz ez bizkarra eman zien. Eta, hain zuzen ere, hau ez da, beraz, begi-bistakoa da nire programa ez da hiru lerroak, baina 300 lerro da. Beraz, benetan, ezin dugu eman komando beste lerroko nahi Valgrind make it more verbose. Apur bat gogaikarria da gogoratzen. Baina nik ez bada - ikus dezagun. Leak - Zen Leak - are gehiago, ez dut gogoratzen zer da eskuz egiten. - Leak check-berdin betea. Bai, eskerrik asko. - Leak check-berdin betea. Sartu. Berean, programa exekutatzen ari da. David Idatzi berriro. Orain pixka bat xehetasun gehiago ikusten dut. Baina zeure beheko laburpenean, eta horrek da, lau berdin-berdin - Ah, hau polita mota da. Orain Valgrind benetan bila pixka bat nire kodean gogorragoa da. Eta hori da esaten, antza denez, lerroan malloc - Zooma dugu. Lerroan - ez dugu ikusten zer lerroa da. Baina malloc lehen culprit da. Ez dago malloc blog-a da. Guztiak eskubidea? Ados, ez. Eskuin? Getstring deitu nuen. getstring itxuraz deiak malloc. Beraz, zer kode-lerro itxuraz izateagatik errua at egotzitako memoria hau? Demagun duenak idatzi malloc ha sido inguruan nahikoa luzea dela ez da bere errua. Beraz, ziurrenik, ez da nirea. cs50.c en getstring - hori da, beraz, artxibatzen nonbait ordenagailuan - line 286 dirudi erruduna izango da. Orain Demagun cs50 izan dela denbora duin zenbatekoa, beraz, inguruan gehiegi dugu erasoezinak. Eta, beraz, seguruenik ez getstring en bug duten datza, baizik eta en kaixo-2.c line 18. Hargatik begirada batean zer linea 18 izan zen. Oh. Nolabait, lerro hau ez da zertan buggy, berez, baina arrazoia da memory leak duten atzean. Beraz, super, besterik gabe, zer egingo intuizioa konponbidea hemen? Ari gara memoria galtzen eskatuz, ez ziren inoiz bizkarra emanez, eta badirudi bat izan nahi Arazo denbora nire ordenagailuan baino gehiago delako agortuko baliteke memoria, agian motela behera, gauza txarrak gerta liteke, bai, zer simple intuitiboa da irtenbidea? Eman besterik ez du atzera. Nola askatu duzun memoria hori? Beno, zorionez, nahiko erraza da besterik esan free izena. Eta inoiz ez dugu hau egin aurretik. Baina, funtsean, ezin duzu uste malloc kontrakoa da doan. free kontrakoa da memoria esleitzean. Beraz, orain utzi hau konpilatu me. Egin kaixo-2. Utzi exekutatu berriro. kaixo-2 David. Beraz, lan egiten hasi dela dirudi zehazki modu berean. Baina joan nintzen itzuliz gero Valgrind eta berriro exekutatu nire berri den komandoa berean konpilatutako programa, mekanografia nire aurretik izen - politak. Montón laburpena - irtetean erabiltzen - zero bloke zero byte. Eta hau super polita da, guztiak zeure bloke askatu zituzten. Filtrazioen ez dira posible. Beraz, datozen, ez da arazo Set 4, Baina arazoa Ezarri 5, auzitegi batera eta aurrerantzean, hori ere izango da zure zuzentasuna neurri programa, ala ez duzu edo ez dute memoria filtrazioak. Baina, zorionez, ez bakarrik dezakezu Arrazoia Horietako intuizioa, horren bidez, da, dudarik gabe, programa txiki erraza baina programak handiagoa zailagoa da, Valgrind, horiek handiagoak programetan, zu identifikatzeko lagungarria izan daiteke bereziki arazoa. Baina bada beste arazo bat da agian sortzen. Let me ireki fitxategia hemen, hau da, berriro ere, zertxobait adibide erraz bat. Baina zer zentratu programa honek. Hau deitzen da memory.c. Etiketa geroago, gaur egun honetan dizugu en gaur egun, iturburu-kodea zip. Eta nabarituko dute I izeneko funtzio bat f duten argumentu eta itzultzen ezer. Linea 20, itxuraz naiz geratuko to int bat eta x deituz erakuslea. Esleitzea dut bueltan da malloc balioa. Eta besterik gabe, argi eta garbi izan behar du, zenbat byte am Itzuli ziurrenik ditut malloc tik egoera horretan? Seguruenik, 40. Non, hori lortzeko duzu? Beno, gogoratzen baduzu int bat da, sarritan 4 byte, gutxienez, ez da bertan tresnaren, 10 aldiz 4 da, jakina, 40. Beraz malloc helbide itzuli bat memoria zatia eta gordetzeko duten aurre, azken finean, x. Beraz, argi izan, zer gero, gertatzen ari da? Beno, goazen atzera aldatzeko me gure argazki hemen. Let besterik ez dit nire marrazteko behealdean ordenagailuaren memoria, let me aurrera eta marraztu laukizuzen osoan duten adierazten nire RAM guztia. Esan dugu pila duen behean dago. Eta ez dago testu segmentu bat hasi uninitialized datuak. Baina besterik ez dut abstraktu horiek joan beste gauza batzuk ihes dot, dot dot gisa. Besterik ez naiz honen erreferentzia joan goialdean zeure gisa. Eta, ondoren, irudi hau behealdean, nagusia irudikatzeko, joan naiz emateko xerra memoria pilan. F, emateko xerra bat dut pila buruzko memoria. Orain, nire kontsultatu dut iturburu-kodea berriro. Zer dira nagusia aldagai lokala? Antza denez, ez da ezer, eta, beraz, hau da xerra eraginkortasunez hutsik dago edo ez, nahiz eta handi gisa Nik dudan bezala marraztuko da. Baina f, tokiko aldagai bat daukat, hau da, x deitu. Beraz, aurrera eta F dut bat memoria zatia da, x deituz. Eta orain, 10 aldiz 4 malloc, Malloc 40, non da, beraz, memoria datozen? Ez dugu marrazten irudi bat like honen aurretik. Baina dezagun hori eraginkortasunez Hemen etorritakoak, beraz, bi, hiru, lau, bost. Eta orain, horietako 40 behar dut. Beraz, besterik ez dut egin dot, dot, dot iradokitzen ez dagoela, are gehiago da memoria atzera datozen zeure hasita. Orain zer helbidea da? Dezagun gure aukeratu arbitrarioak aurre, beti bezala - Ox123, nahiz eta seguruenik joan Zerbait guztiz ezberdina izango da. Hori byte lehen helbidea da memoria duten malloc dut galdetu. Beraz, azken finean, behin lerro 20 exekutatzen du, zer da, hitzez hitz x barruan gordetzen dira hemen? Ox123. Ox123. Eta idi da izanarren. Esan nahi du, besterik ez da hemen bat hamaseitarra kopurua. Baina, zer da garrantzitsua da zer esan denda dut x, eta horrek tokian tokiko aldagai bat da. Baina, bere datu-mota, berriz, int baten helbide bat da. Beno, Ox123 gorde nahi dut. Baina, berriro ere, hori da apur bat ere bada konplexua alferrik, joan badut atzera, abstraktua dugu hau nahiko urrun arrazoiz eta besterik esan x dela memoria zatia duen erakuslea. Ados. Orain esku galdera honako hau da: - linea 21, bihurtzen da, buggy da. Zergatik? Sentitzen dut? Ez du - esan berriro. Beno, ez da doan. Beraz, bigarren da, baina. Beraz, ez da beste bat, baina zehazki line 21. Zehazki. Kode-lerro hau sinple bat besterik ez da bufferraren gainezkatzea, buffer bat inbaditu. Buffer bat besterik memoria pusketa bat esan nahi du. Baina memoria zatia duten tamaina 10, 10 osokoak, eta horrek esan nahi dugu sartu indizea sintaktiko azukrea erabiliz array idazkera du, plazan Parentesi, sarbidea izango duzu parentesi x 0 x 1 x egokirik, parentesi dot, dot, dot. x 9 tarte handiena da. Hala bada tarte x 10, egiten dut, non Benetan ari naiz memorian joan? Beno, izan dut 10 int bada - dezagun benetan marraztu guztiak horiek hemen. Beraz, lehen bost izan zen. Hona hemen beste bost ints. Beraz, tarte x 0 da hemen. x tarte 1 hemen. x tarte 9 da hemen. x-tarte 10 Hemen da, eta horrek esan nahi du, kontatzen dut, linea 21, ordenagailua jarri zenbakia, non? Kopurua 0 non? Beno, 0 da, bai. Baina, hain zuzen ere, bere 0 kointzidentzia moduko bat da. Zenbakia izan daiteke 50, denok zaindu. Baina jarri x tarte ari gara saiatzen 10, hau da, non honetan galdera ikurra marrazten da, eta horrek ez da gauza ona. Programa hori oso ondo ondorioz, huts. Orain, aurrera ikusi eta hau bada da, hain zuzen ere, zer gertatzen den. Ziurtatu memoria, geroztik fitxategia deitzen da memory.c. Goazen aurrera eta exekutatu programaren memoria. Beraz, zortea lortu dugu, benetan, dirudienez. Zorioneko lortu dugu. Baina ikus dezagun orain exekutatu bada Valgrind. Lehen begiratuan, nire programa agian Badirudi ezin hobeto zuzena izan behar du. Baina utzi niri exekutatu duen Valgrind - Leak check-berdin memoria beterik. Eta orain, hori exekutatu I - interesgarria da. Tamaina baliogabea 4 idazteko at linea 21 memory.c du. Line 21 memory.c zein da? Oh, interesgarria da. Baina itxaron. Tamaina 4, zer da hori aipatuz? Ez zuen besterik ez dut bat idatzi, baina tamaina 4 da. Zergatik da 4? Int da beti, eta hori da, zeren da, berriz ere, lau byte. Beraz Valgrind akats bat aurkitu dut, nire kodea at glancing, ez. Eta, agian, zure TF litzateke edo ez litzateke izango. Baina ziur zer aurkitu horretarako Valgrind egin dugu akats bat dago, nahiz eta genuen zorterik izan arren, eta ordenagailua erabaki du, eh, ez dut huts joan besterik ez delako bat byte, bat ukitu duzu int memoria merezi ez duzula benetan egin. Beno, zer gehiago da buggy hemen. Helbidea - hau zoro bat bilatzen helbidea ez da hamaseitarrean. Dagoela esan nahi du, besterik gabe, zeure nonbait dago zero ondoren tamaina 40 bloke bat byte esleitu. Let me zooma hemen, eta ikus hau da, pixka bat gehiago lagungarria da. Interesgarria da. 40 byte dira behin betiko galdu galera erregistroa 1 de 1. Berriro ere, hitzak baino gehiago erabilgarria da hemen. Baina nabarmendu lerro oinarritzen da, non fokua ziurrenik behar dut nire bug beste arreta? Lerro bat 20 memory.c baten itxura du. Beraz, bada, atzera egingo dugu lerro 20, hori da bat lehenago identifikatu duzu. Eta ez da akatsak egotea. Baina hau dugu, alderantziz, bere ondorioak. Beraz, nola ez, behintzat, zuzendu dut akats horietako bat? Zer egin liteke linea 21 I ondoren? Do x libre nuen, beraz, atzera emateko memoria hori. Eta, nola ez, bug hau konpontzen dut? Behin betiko behar dut joan no urrunago 0 baino. Hargatik, eta saiatu me berriro exekutatu. Sentitzen dut, behin betiko joan no urrunago 9 baino. Ziurtatu memoria. Orain berrabiarazi Valgrind handiagoa leihoan. Eta orain begiratu. Niza. Zeure bloke guztiak askatu ziren. Filtrazioen ez dira posible. Eta hemen, batez ere, ez dago aipamenik ez da baliogabe eskubidea gehiago. Just Greedy lortzeko, eta egin dezagun Ikus erakustaldi bat baduzu ez du joan nahi - Zorioneko lortu nuen une bat duela. Izan ere, hori da, agian, 0 alferrik engainagarria. Dezagun, besterik gabe, egin 50, pixka bat arbitrarioa zenbakia, memoria egin dot barra memoria - oraindik lortu zortea. Ezer ez da bertan behera gelditzen. Demagun egin dut zerbait inozoak, eta 100 dut. Let memoria remake me, dot barra memoria - lortu zortea berriro. Nola 1.000? ints haratago, gutxi gorabehera, non egon behar dut? Ziurtatu memoria - madarikatua da. [Barreak] Ados. Ez dezagun mezurik inguruan jada. Berrabiarazi memoria. Ez dago goaz. Guztiak eskubidea. Beraz, itxuraz 100.000 ints indizea duzu non izan behar duzu izan haratago memoria, gauza txarrak gertatuko dira. Beraz, hau da, jakina, ez da gogor, azkar araua. Trial erabiliz mota izan dut eta akats iritsi. Baina honetan ere, luze istorio labur, ordenagailuaren memoria ere banatzen gauza horiek sartu izeneko segmentu. Eta batzuetan, ordenagailua benetan eman duzu, pixka bat gehiago memoria baino eskatuko dizu. Baina eraginkortasuna, besterik gabe, errazagoa da memoria gehiago lortzeko, baina bakarrik esango zaren zati bat lortzeko. Eta lortu duzu zortea izanez gero, batzuetan, beraz, egin ahal izango dute ukitu dezake memoria ez dela zurea. Bermea ez daukazu zer balio duten han bertan geratuko dira jartzen, izan ere, ordenagailua ustez oraindik ez da zurea, baina ez da nahitaez joan memoria segmentu beste hit-en informatika eta akats bat bultzatu bezalako hau hemen. Guztiak eskubidea. Edozein galdera, ondoren, memoria-on? Guztiak eskubidea. Ikus dezagun hemen, beraz, at zerbait gara for hartuz denbora luzez emango du, eta horrek izeneko cs50.h. fitxategi hau da, Beraz, hau fitxategi bat da. Hauek osotasunean mordo bat dira top sortu iruzkinak. Eta hau izan bada, baliteke begiratu inguruan poked duzun tresnan. Baina bihurtzen da hori denbora guztian, denean katea erabili behar bezala erabiltzen ditugu sinonimo, bide horren bidez, deklaratu dugu duten sinonimo hau izan zen keyword mota definizioa, typedef. Eta, funtsean, esaten ari gara, egin katea izar char sinonimo. Esan nahi du horren bidez, pila sortu ezaguna prestakuntza gurpil horiek katea. Orain hemen prototipoa besterik ez da getchar da. Ikusi dugu, agian, baina hori da hain zuzen ere, zer egiten. getchar argumentu, karaktere bat itzultzen du. getdouble argumentu, itzultzen bikoitza. getfloat argumentu, itzultzen mugikor bat, eta abar. getint hemen dago. getlonglong Hemen dago. Getstring eta hemen dago. Eta kito. Morea lerro hau Preprocessor bat da delako direktiba it hasieran hashtag. Guztiak eskubidea. Beraz, orain utzi cs50.c. sartu me Eta ez dugu hitz luzeegia honetan. Baina emateko zer ohi bat izan da hori guztia gertatzen ari da denbora, utzi zidan - dezagun getchar. Beraz getchar gehienbat iruzkinak. Baina itxura hau atsegin du. Beraz, gaur egun, hau da, getchar dugun izan emandako hartzen lehendik. Eta, hala ere, ez dugu hau erabili ko sarritan, inoiz bada, gutxienez da nahiko erraza da. Bat da, beraz, merezi du hemen begirada. Beraz getchar infinitua begizta bat du, nahita, beraz, itxuraz. Deiak gero - eta, hau da, mota kodea berrerabilpena polita dugu idatzi. Getstring deitzen da. Zer ez duelako esan nahi karaktere bat lortzeko? Beno, bai, agian saiatu bat lortzeko oro har, testu-line erabiltzaileak eta ondoren, bat besterik begiratu karaktere horien. Linea 60, hemen apur bat behatu txeke bat pixka. Getstring itzuli null bada, Ez dezagun jarraitu. Zerbait gaizki joan da. Azken hau samarra da gogaikarriak baina C. karaktere max seguruenik ohiko adierazten du zer bere izena oinarritutako? Konstante bat da. Da duen zenbakizko balioa bezalakoa da handiena karaktere irudikatzeko dezakezu mokadu bat, hau da, ziurrenik kopurua 255, horietatik handiena zenbakia da irudikatzeko zortzi bit, zero hasita. Beraz, hori erabili dut, funtzio hau, noiz kode hau idazten, soilik zerbait getchar bada, baina oker bere bizitzako helburua da itzultzeko char, nolabait gai izan behar duzu, Erabiltzaile duen seinalea Zerbait gaizki joan da. Ezin dugu itzultzeko null. Bihurtzen da nulua duten erakuslea da. Eta berriro ere, getchar du karaktere bat itzultzeko. Beraz, batzarra, zerbait galtzen doa gaizki, ez da programatzailea, edo, zuk Kasu honetan, ni liburutegi batera, nuen bat besterik ez arbitrarioki erabakitzen bada, zerbait oker, noa itzultzeko kopurua 255 da, hau da, benetan Beraz, ezin dugu, erabiltzaileak ezin idatzi ordezkatzen pertsonaia kopurua 255 izan dugulako bat lapurtu du bat deiturikoak Sentinel balioa gisa irudikatzeko arazo bat. Orain bihurtzen da pertsonaia hori 255 ez da zerbait idatzi ahal izango duzu zure teklatua, beraz, big deal ez da. Erabiltzaileak ez du nabarituko dela Lapurtu dut pertsonaia hau. Baina inoiz gizon bat orrialdeetan bada ikusteko informatika-sistema baten erreferentzia batzuk guztiak konstante bezala txanoak dela dio, error etengabeko agian hau kasuetan dira itzuliko, giza batzuk egin dena urte zen arbitrarioki erabaki itzultzeko berezi honen balioa eta deitu kasuan konstante bat zerbait oker. Orain magia behera gertatzen da hemen. Lehenik eta behin, lerroa 67 geratuko naiz bi pertsonaia, C1 eta C2. Eta, ondoren, 68 lerro, ez da benetan , kode-lerro hori gogorarazten du gure lagun printf, eman duen Cs berea izan ez komatxo artean. Baina konturatzen zer ari da gertatzen hemen. sscanf katea eskaneatu esan nahi du - esan nahi eskaneatu formatuko bat katea, ERGO sscanf. Zer esan nahi du? Kate bat sscanf pasatzen duzun esan nahi du. Lerroa da eta edozein dela ere Erabiltzaile mota sartu Formatu katea bezala sscanf pasatzen duzu hori kontatzen scanf zer dira mesederako erabiltzaileak idatzitako sartu Igaroko da-, orduan, bi helbideak memoria zatiak, kasu honetan, daukat bi leku delako. Beraz emateko helbidea noa C1 eta C2 du helbide. Eta gogoratzen eman duzula funtzio bat aldagai batzuen helbidea, zer inplikazioa? Zer egin daiteke funtzio baten ondorioz egin emanez baten helbide aldakorra, baita aurka aldagai bera? Aldatu ahal izango da, ezta? Izan duzu norbait fisiko baten mapa bat bada helbidea, joan ez daitezen eta zer edozein dela ere nahi helbidea dute. Ideia bera hemen. To sscanf, bi helbide gara pasatzen bada memoria zatiak, nahiz eta txiki-txiki horiek gutxi memoria, C1 eta C2-ko zatiak, baina esan dugu horietako helbidea, sscanf aldatu dezakezu. Sscanf bizitzako helburua, beraz, irakurtzen badugu man orria, da zer irakurri Erabiltzaile idatzitako batean, erabiltzaile izatea espero pertsonaia bat, idatzitako eta agian beste pertsonaia bat, eta edozein dela ere, erabiltzaileak idatzitako, lehen karaktere doa Hemen, bigarren pertsonaia doa hemen. Orain, bat alde batera bezala, horrek, eta duzun bakarrik ezagutzen hau dokumentazioa batetik, Izan ere, hori jarri dut leku huts batean dago esan nahi du, besterik ez ditut zaintzen bada erabiltzailea Space barra hits gutxira aldiz aurretik berak hartzen du bat pertsonaia, ez ikusi egin nahi dut zuri edozein espazioa. Da, beraz, eta ezagutzen ditut dokumentazioa. Izan ere, ez da bigarren% c da hutsune eta ondoren benetan nahita. Antzemateko gai izan nahi dut egiten badu screwed sortu edo ez laguntzea. Beraz, erabiltzaileak bakarrik idatzitako dut pertsonaia bat da, beraz, espero dut duten sscanf bakarrik dago itzultzeko joan 1 balioa, berriz, delako irakurri badut dokumentazioa, sscanf en helburua bizitza izateko kopuruaren itzultzeko aldagai ziren bete erabiltzailearen sarrera batera. Gainditu bi aldagai dut helbideak, C1 eta C2. , Espero dut, nahiz eta, bat besterik ez du horiek erabat hil galtzen delako sscanf funtzioak 2 itzultzen du, zer da zentzuzkoa inplikazioa logikoki? Erabiltzaileak ez du besterik ematen dit bat pertsonaia bezala kontatu nion edo bere. Idatzitako seguruenik at Gutxienez bi pertsonaiak. Beraz, bada, zuen ordez dut, ez dute bigarren % C, izan besterik ez dut, eta horrek sinceramente intuitiboagoa izango litzateke hurbilketa, lehen begiratu batean, uste dut, ez duzu antzemateko gai izango erabiltzailea izan baduzu, gehiago ematen sarrera baino benetan duzu nahi. Beraz, hau inplizitua forma bat da error egiaztatzea. Baina konturatu hemen zer egiten dut. Behin ziurtatu erabiltzaileari eman zidan bat naiz pertsonaia, lerro askatzeko nuen, egiten ari getstring da kontrakoa, eta horrek malloc erabiltzen ditu, eta, gero, itzuliko dut C1, pertsonaia hori espero dut Erabiltzaileak emandako eta bakarrik ematen da. Beraz, azkar bat glimpsed bakarra, baina getchar buruzko edozein galdera? Itzuli beharko dugu beste batzuk. Beno, goazen aurrera, eta niri hori egin - demagun orain, besterik gabe, gure motibatzea aste bat gehi denbora eztabaida, hau structs.h izeneko fitxategi bat da. Eta berriro ere, hau da, zapore zerbait datza aurretik. Baina iragarki asko hau iruzkin bat da. Hargatik me nabarmendu bakarrik oraingoz parte interesgarria. typedef - han berean, gako-hitz hori berriro. typedef kate adierazteko erabiltzen dugu datu-mota berezi gisa. Typedef erabili dezakezu marka berria sortzeko datu-mota hori existitzen ez denean C asmatu zen. Esate baterako, int C. char dator dator C. bikoitza C. dator, baina Ikasle bat ez kontzeptua ez da. Eta oraindik nahiko erabilgarria izango litzateke gai-programa bat gordetzen duten idazteko aldagai batean, ikaslearen NAN zenbakia, bere izena, eta beren etxea. Bestela esanda, hiru pieza datuak, nahi int bat eta katea eta string bat. Typedef, zer da nahiko indartsua hau eta keyword sturct buruz egitura, duzu, 2013an programatzailea, benetan zehaztu egin du datu-mota hori ez da existitzen urte duela, baina hori egokitzeko zure helburuetarako. Eta, beraz, hemen, lineak 13 19 bidez; berri bat datu-mota deklaratzen ari gara, adibidez, int bat, baina ikaslea deituz. Eta aldagai horren barruan dago, joan int bat, kate bat, - hiru gauza izan eta kate bat. Beraz, zer da benetan pentsa dezakezu Hemen gertatu zen, nahiz eta hori bat sinplifikazio bat pixka gaur, Ikasle bat da, funtsean, joan horrela begiratu. Bere pusketa bat izango ID bat duen memoria, izen bat eremuan, eta etxeko eremu bat. Eta gai izango horietako zatiak erabili dugu memoria eta bertan sartzeko honela. Struct0.c sartu nintzen gero, hemen da nahiko luzea da, baina bat jarraituz eredua, kodea duten berriak trikimailu hau erabiltzen du. Beraz, lehenik eta behin, utzi zure atentzioa me Gora gora zati interesgarriena. Zorrotz definitzen ikasle 3, deklaratzen bat etengabeko izeneko ikasle eta lagapen it arbitrarioki 3 zenbakia, besterik beraz, hiru ikasle izan nuen Gaur egun, programa honetan. Hemen dator nagusian. Oharra eta, nola ez dut deklaratzeko ikasle sorta bat? Beno, erabili besterik ez dut bera sintaxia. Hitza ikaslea da, jakina, berria. Baina ikaslea, klasea, tarte ikasleak. Beraz, tamalez, ez da asko terminoak hemen berriz. Hau besterik ez da zenbaki bat. Beraz hau hiru esaten duena bezalakoa da. Klase besterik ez da zer nahi dut aldagai deitzeko. Deitu ikasleek nuen. Baina klasea, hau ez da klase bat objektu bideratutako Java moduko bidea. Besterik ez da, ikasleek klasean. Eta elementu bakoitzaren datu mota array hori da ikaslea. Beraz, hau da, pixka bat ezberdinak eta zerbait esaten hasita horrela, besterik ez da - Ematen dit hiru ikasle naiz esaten eta deitu array-klase hori. Guztiak eskubidea. Orain hemen lau begizta bat da. Guy honen ezagunak - batetik bestera joateko zero-tik gora, hiru. Eta hemen sintaxia pieza berria da. Programa horrek niri galdetuko joan, giza, emateko, ikasle batek NAN, zein int da. Eta hemen sintaxia duen ahal duzun da gordetzeko zerbait ID eremuan at kokapena klasea parentesi I. So sintaxia hau ez da berria. Honek esan nahi du, besterik gabe, ematen dit zortzigarren klase ikaslea. Baina sinbolo berria da. Orain arte, ezin dugu erabili ez dot, gutxienez, hau bezalako kodea. Honek esan nahi du ezagutzen egitura gisa joan ikasle bat eta zerbait jartzea. Era berean, hau da, hurrengo lerroan, 31, joan Animatu eta jarri edozein izanik ere, erabiltzaileak motak izen bat hemen eta zer egiten dute bat house, gauza bera, aurrera eta ipini. etxean. Beraz, zer programa honek Azken finean, zer egin? Pixka bat teaser han ikusi ahal izango duzu. Dezagun aurrera ni eta structs egin dezaket 0 dot barra egiturari 0, ikaslearen identifikazio 1, esan David Mather, ikaslearen 2. Rob Kirkland, ikaslearen 3. Lauren Leverit - eta gauza bakarra egin zuen programa hau, hau da, besterik gabe, erabat arbitrarioa da, Zerbait egin behar datuak honekin nahi nuen, orain dela irakatsi digu dut nola erabili structs da, izan besterik ez dut hau aparteko begizta hemen. Batetik bestera joateko ikasleek array gainean nuen. Gure, agian, gaur egun ezagutzen lagun nituela, katea alderatu, stircomp to check 8an ikaslearen etxea to Mather berdinak? Eta hala bada, besterik gabe, zerbait inprimatu inori gustatzen, bai, da. Baina, berriro, nire aukera emanez erabili eta berrerabiltzeko eta berrerabiltzea berri honen dot idazkera. Beraz, nork zaintzen du, ezta? Datozen ikasle-programa bat da, zertxobait arbitrarioa da, baina bihurtzen da erabilgarria duten gauzak egiten dugun dezake honetan, esate baterako, honela. Hau askoz zailagoa da, eta egitura C. da zer lortu dozena bat edo gehiago eremuak, zertxobait cryptically izendatu. Baina duzun inoiz bada grafiko bat entzun fitxategi formatu izeneko bitmap, BMP da bihurtzen da bit fitxategi formatua da, hau nahiko askoz duten itxura. Apur bat ergela Smiley aurpegia da. Irudi txiki bat da ditudan en handitutako nahiko handia dela, beraz, bakoitzak ikusi izan dut puntuak banaka edo pixel. Orain, bat dugu irudikatzeko out dezakezu bihurtzen da , esan du, kopurua 0 puntu beltzak. Eta kopuruak 1 eta puntu zuri bat. Beraz, beste era batera esanda, nahi baduzu bat marrazteko Smiley face eta irudi hori gorde ordenagailua, zero gordetzeko eta nahikoa direnak itxura hau, non, berriro ere, zeintzuk dira zuri zeroen eta beltzak dira. Eta horrekin batera, modu eraginkorrean baduzu bat ere bai, eta zeroen de gird, bat duzu pixel-sareta, eta zelatan baduzu itzazu, polita izango duzu apur Smiley face. Orain, bit fitxategi formatua, BMP da eraginkorrean duten kanpaia azpian, baina pixel gehiago Sot egiten duzun hori benetan adierazten koloreak. Baina sofistikatuagoa behar duzu BMP fitxategia eta JPEG eta GIF bezalako formatu zein izan ezagutzen dituzu, agian, horiek diskoko fitxategiak, normalean, ez bakarrik izan zero eta pixel egiteko ere bai, baina metadatu batzuk dituzte, bai - zentzua ez dela benetan en meta datuak, baina erabilgarria da behar. Beraz, eremu horiek dira hemen, eta ulertuta hau ikusiko dugu P-multzoan xehetasun gehiago 5, hori zero eta bai horren aurretik adierazten irudi batean pixel, ez metadatuak mordo bat bezala irudiaren tamaina eta irudiaren zabalera. Eta konturatu naiz off plucking batzuk arbitrarioak gauzak hemen - zabalera eta altuera. Bit kopuruan eta beste gauza batzuk. Beraz, fitxategi batean metadatu batzuk. Baina, nola banatuta dauden fitxategiak ulertzeko arabera Modu honetan out, benetan dezakezu manipulatu ondoren, irudiak, irudiak berreskuratu diskotik, irudien tamaina aldatu. Baina ezin duzu nahitaez horiek hobetzeko. Argazki bat behar nuen. Beraz, atzera joan nintzen RJ hemen, nork ikusi pantailan, nahiko denbora pixka bat duela. Eta ireki nuen bada Keynote hemen, hau da, zer gertatzen saiatu duzu hurbiltzeko bada eta RJ hobetzeko. Ez du inolako hobea, benetan. Orain Hitzaldi bat lausotzen mota da pixka bat, besterik ez gainetik distira Izan ere, RJ ez dela bereziki hobetua sartu denean txikiagotzen Eta horrela egin bada, ikusi laukitxo? Bai, zalantzarik gabe, ikusiko duzu on proiektore bat laukiak. Horixe duzunean hobetzeko lortu duzu. Baina ulertzeko nola gure RJ edo Smiley face ezartzen digu utziko Egia esan, idatzi kodea duten manipulatu gauza horiek. Eta ohar honetan amaituko nuke pentsatu nuen, eta 55 bat segundotan hobetu dela, , Ausartzen naiz esaten, baizik eta nahasgarria da. [Bideo-erreprodukzioa] -Egin zuen, etzanda. Zeri buruz, ez dakit. -Beraz, zer dakigu? -Hori 9:15 Ray Santoya at Kutxazain zen. -Beraz, galdera da zer egiten ari zen, 9:16 etan zuen? -Filmaketa bederatzi milimetro du zerbait. Agian frankotiratzaile ikusi zuen. -Edo zen berarekin lanean. -Itxaron. Joan atzera bat. -Zer ikusi? -Ekarri bere aurpegia gora, pantaila osoan. -Bere betaurrekoak. -Bada, gogoeta bat da. -Hori Neuvitas beisbol taldea da. Hori da beren logo. -Eta nahi duenak egin zuen hitz egiten jaka jantzita dagoela. [END bideo-erreprodukzioa] David J. MALAN: Hau izango da Arazoa Ezarri 5 izango da. Baduzu, ikusiko dugu datorren astean. GIZONEZKOEN Hizlaria: hurrengo CS50 At. [Kilkerrak CHIRPING] [Musika jotzen]