DAVID Malan: Tout dwa, akeyi tounen. Sa a se CS50. Sa a se kòmanse nan semèn sèt. Se konsa, li te yon pandan y ap, se konsa mwen te panse nou ta pran yon toune toubouyon nan kote nou sispann ak kote n ap kounye a prale. Se konsa, bagay sa a isit la ka gen lakòz kèk Yanguas an premye. Men, èspere ke, w ap kòmanse aklimate a ki sa sa a vle di isit la - etwal ki reprezante yon konsèy, ki se jis sa, an tèm plis pwofàn la? Se konsa, li nan yon lari yo. Se konsa, li adrès la nan yon bagay nan memwa. Epi nou te kòmanse kale tounen kouch yo yon koup la semèn de sa, bagay sa yo tankou GetString ak lòt fonksyon sa yo tout tan sa a yo te retounen adrès de bagay sa yo nan memwa, tankou nan adrès nan karaktè a an premye nan kèk sekans. Se konsa, nou menm tou nou prezante valgrind, ki ou pral kòmanse pou itilize pou pwoblèm sa a mete, sitou pou pwochen an pwoblèm mete yo tou. Men, valgrind fè sa pou nou? Li chèk pou fwit memwa, epi li tou chèk pou abi nan memwa. Li ka, ak kèk pwobabilite, detekte si Kòd ou a pral nan manyen memwa ke li tou senpleman pa ta dwe. Se konsa, pa nesesèman yon fwit, men si ou ale pi lwen pase limit yo nan kèk etalaj, epi ou aktyèlman kouri valgrind ak pwovoke konpòtman pandan y ap valgrind ap kouri nan pwogram ou an kouri andedan nan li, ou pral jwenn mesaj tankou sa a - "valab ekri nan gwosè 4, "ki, sonje yon koup la semèn de sa vle di ke mwen te gen aksidantèlman renmen sou yon sèl Int twò lwen pi lwen pase limit yo nan yon etalaj. Se konsa, gwosè 4 vle di isit la gwosè a nan ki Int patikilye. Se konsa, pran rasirans nan lefèt ke pwodiksyon valgrind a, fòma a nan li, se jis atròs. Li nan reyèlman difisil yo wè nan dezòd la pou enfòmasyon an enteresan. Se konsa, sa nou te fè isit la se jis ekstrè kèk nan koup la ki gen plis liy ki enteresan. Men, reyalize ke 80% nan la valgrind pwodiksyon a pwal yon ti jan nan yon distraksyon. Jis gade pou modèl tankou sa yo - valab dwat, valab li, 40 bytes ak kèk nimewo nan blòk yo definitivman pèdi, mo kle tankou sa. Ak sa ki ou pral èspere ke wè se kèk kalite tras nan sa ki fonksyone nan erè se aktyèlman pous Nan ka sa a isit la, nan sa ki liy nan Kòd mwen te erè a aparamman? 26 nan yon dosye rele memory.c, ki te egzanp lan nou te jwe ak nan moman an. Se konsa, li pwobableman pa nan malok. Li te pwobableman nan Kòd mwen pito. Se konsa, nou pral wè sa a ankò ak ankò anvan lontan. Se konsa, skanf, sa a te vini nan yon koup nan fòm konsa byen lwen. Nou te wè sskanf yon ti tan. Li te yon bagay yon kantite ou plonje nan nan ou preparasyon pou egzamen an. Men, skanf se aktyèlman sa CS50 nan bibliyotèk a te lè l sèvi avèk anba a kapo pou kèk tan yo nan lòd l ka jwenn dizon soti nan itilizatè a. Pou egzanp, si mwen demenaje sou nan CS50 nan aparèy isit la, kite m 'louvri moute yon egzanp jodi a ke yo rele skanf-0.c Lè li nan senp super. Se jis nan yon liy kèk nan kòd. Men, li demontre vrèman ki jan getInt ki te travay tout tan sa a. Nan pwogram sa a isit la, nan liy 16 , Avi ke mwen deklare yon Int. Se konsa, pa gen okenn endikasyon, pa gen anyen majik la, jis yon Int. Lè sa a, nan liy 17, mwen Èd memwa a itilizatè pou yon nimewo, tanpri. Lè sa a, nan 18 an reta, mwen sèvi ak skanf isit la. Apre sa, mwen espesifye, kalite tankou printf, ke mwen ap tann quote unquote pousan mwen. Se konsa, pousan mwen, nan kou, vle di yon Int. Men, remake sa dezyèm lan agiman skanf se. Kouman ou ta dekri dezyèm lan agiman apre vigil la? Ki sa ki se sa? Li nan adrès ki nan x. Se konsa, sa a se itil paske lè yo bay skanf ak adrès la nan x, ki sa ki ap òganize pou pèmèt ke fonksyon fè? Pa sèlman ale la, men tou, fè sa? Fè yon chanjman nan li. Paske ou ka ale la, li sòt de tankou yon kat jeyografik nan yon kote nan memwa. Se konsa, depi w bay skanf, oswa nenpòt ak sa yo kat jeyografik yon, ki fonksyon ka ale la, epi yo pa sèlman gade nan valè a, men li kapab tou chanje sa valè, ki se itil si bi pou yo nan lavi nan skanf se eskane opinyon soti nan itilizatè a, espesyalman soti nan klavye la. Men, f a vle di formate, jis tankou printf, f a vle di yon formate fisèl ke ou vle ekri ak lèt ​​detache. Se konsa, nan kout, sa a 18 liy tou senpleman di, eseye li yon Int soti nan la nan itilizatè klavye ak magazen li andedan nan x, nan kèlkeswa adrès x k ap pase nan ap viv nan. Lè sa a, alafen, liy 19 jis di, mèsi pou Int a, nan ka sa a. Se konsa, kite m 'ale pi devan epi fè sa-a. Se konsa, fè skanf 0. Kite m 'ale pi devan epi rale pous Mwen pral ale epi kouri sa a ak pwen koupe skanf 0. Nimewo, tanpri? 50. Mèsi pou 50 an. Se konsa, li byen senp. Koulye a, ki sa ki li pa fè la a? Li pa nan fè yon pakèt tout nan kont kouran erè. Pou egzanp, si mwen pa kowopere, epi mwen pa tape nan yon kantite, men olye pou m 'ekri yon bagay tankou "hello," sa se sèlman kalite etranj. Se konsa, youn nan bagay ki CS50 nan bibliyotèk ki te fè pou nou pou kèk tan se ke reprompting ak reprompting. Sonje nan fraz rekoumanse te nan cs50.c, e ke sa a rezon ki fè getInt nan bibliyotèk la CS50 se aktyèlman yon antye pakèt moun sou liy ki long, paske nou ap tcheke pou bagay estipid tankou sa a. Èske itilizatè a pa bay nou, an reyalite, yon Int? Èske li oswa li te ban nou yon bagay tankou yon lèt alfabetik? Si se konsa, nou vle detekte ki ak rele nan yo. Men, bagay sa yo jwenn plis enteresan nan egzanp sa a kap vini an. Si m 'ale nan skanf 1.c-, ki sa ki se youn nan bagay ki fondamantalman chanje nan egzanp sa a kap vini yo? Mwen lè l sèvi avèk Char *, nan kou, olye pou yo Int. Se konsa, sa a se enteresan, paske * Char, sonje, se reyèlman jis nan menm bagay kòm fisèl. Se konsa, li santi l tankou petèt sa a se yon super senp aplikasyon GetString. Men, mwen te kale tounen kouch nan nan bibliyotèk la CS50, se konsa mwen rele sa a * Char kounye a. Se konsa, kite a wè ki kote, si nenpòt kote, n 'al jwenn sa ki mal. Liy 17 - Mwen ankò di, tanpri, ban m 'yon bagay, nan ka sa a, yon kòd. Lè sa a, nan liy kap vini an, mwen rele skanf, ankò, bay li yon kòd fòma, men sa a nan pousan tan. Lè sa a, tan sa a, mwen se bay li tanpon. Koulye a, avi, mwen pa lè l sèvi avèk comercial la. Men, poukisa se ke pwobableman OK isit la? Paske sa ki pezib deja? Li nan deja yon konsèy. Li nan deja yon adrès. Li kite yo sa a mo "konfonn," kite m ' jis rele li s, pou egzanp, pou senplisite. Men, mwen te rele l 'tanpon paske se nan jeneral, nan pwogram, si ou gen yon ti moso nan memwa, ki yon kòd reyèlman jis ki, ou ta ka rele li yon tanpon. Li nan yon kote ki nan magazen enfòmasyon. Menm jan ak bagay sa yo tankou YouTube, lè yo ap tampon, se konsa pale, ki jis vle di li nan Téléchargez Bits soti nan entènèt la epi estoke yo nan yon lokal etalaj, yon moso lokal nan memwa pou ke ou ka gade li pita san yo pa li sote oswa pann sou ou pandan y ap jwe tounen. Se konsa, gen nan yon pwoblèm isit la menm si, paske mwen di skanf, espere yon fisèl soti nan itilizatè a. Isit la nan adrès ki nan yon ti moso nan memwa. Mete ki fisèl la. Poukisa se sa mare bay nou pwoblèm, menm si? Ki sa ki nan sa? Èske mwen pèmèt yo gen aksè nan pati sa a nan memwa? Ou konnen, mwen pa konnen. Paske gen tanpon te initialisé anyen? Pa vrèman. Se konsa, li a ki sa nou ve yo te rele yon fatra valè, ki se pa di yon mo fòmèl. Li jis vle di nou pa gen okenn lide ki sa Bits yo andedan nan kat bytes yo ki Mwen te resevwa lajan kòm tanpon. Mwen pa yo te rele malok. Mwen te definitivman pa rele GetString. Se konsa, moun ki konnen sa ki aktyèlman andedan nan tanpon? Men, di skanf je fèmen, ale la , li mete tou sa itilizatè a tape. Se konsa, sa se kapab lakòz nan Kòd nou si nou kouri li? Pwobableman yon segfault. Petèt pa yo, men pwobableman yon segfault. Apre sa, mwen di petèt pa paske pafwa ou fè sa, pafwa ou pa jwenn yon segfault. Pafwa ou jis jwenn chans, men li nan Alòske yo pral yon ensèk nan pwogram nou an. Se konsa, kite m 'ale pi devan epi pou konpile sa a. Mwen pral fè l 'fason lekòl la fin vye granmoun. Se konsa, priz sonnen 0, skanf-1, skanf-1.c, antre. Wouch, tou fin vye granmoun lekòl la. Ann wè. Ki kote mwen te ale? Oh, Char tanpon *. Oh, di ou mèsi - Save, OK - fin vye granmoun lekòl la. Tout dwa, li te gen yon ti tan. Se konsa, mwen te jis sove dosye a apre yo fin fè ke pou yon ti tan chanje yon ti moman de sa. Koulye a, mwen te konpile li manyèlman ak sonnen. Epi, koulye a mwen pral ale pi devan epi kouri skanf-1, Antre. Fisèl tanpri. Mwen pral tape "hello." Koulye a, isit la nan kote, franchman, printf ka se yon ti kras anmèdan. Li pa nan aktyèlman ale nan segfault nan ka sa a. Printf se yon ti kras espesyal paske li nan se konsa super souvan itilize ki esansyèlman printf ap fè nou yon favè ak ka akonpli, sa a, se pa yon konsèy ki valid. Kite m 'pran l' sou tèt mwen jis ekri ak lèt ​​detache soti nan parantèz yo nil, menm menm si li pa nesesèman sa ki Nou menm nou espere. Se konsa, nou pa ka vrèman fasil pwovoke yon segfault ak sa-a, men byen klè sa a se pa konpòtman an mwen te vle. Se konsa, sa ki nan solisyon an senp? Oke, nan skanf 2-, kite m 'pwopoze ki olye pou yo aktyèlman jis allocation yon Char *, kite m 'gen yon ti kras pi entelijan sou sa a, ak kite m 'asiyen tanpon kòm yon sekans 16 charaktèr. Se konsa, mwen ka fè sa nan yon koup nan fason. Mwen te kapab absoliman itilize malok. Men, mwen ka ale tounen nan semèn de lè Mwen jis bezwen yon pakèt antye nan karaktè. Se jis yon etalaj. Se konsa, kite m 'olye redéfinir tanpon yo dwe yon etalaj de 16 karaktè. Epi, koulye a, lè m 'pase tanpon nan - ak sa a se yon bagay nou pa t ' pale sou nan semèn de - men ou ka trete yon etalaj kòm menm si li nan yon lari yo. Teknikman, jan nou te wè, yo ap yon ti jan diferan. Men, skanf pa pral tèt ou si ou pase l non an nan yon etalaj, paske sa Rezone pral fè pou nou se esansyèlman trete non an nan ki etalaj kòm la adrès nan moso an nan 16 bytes. Se konsa, sa a se pi byen. Sa vle di kounye a ke mwen kapab èspere ke fè bagay sa a. Kite m 'rale soti pou yon moman ak fè fè skanf-2, konpile OK. Koulye a, kite m 'te resevwa koupe skanf-2 a. Fisèl tanpri. "Hello." Epi li te sanble yo travay tan sa a. Men, ka yon moun pwopoze yon senaryo nan ki li pa ta ka toujou travay? Yeah? Yon bagay ki pi long pase 16 karaktè. Men, aktyèlman, nou ka yon ti kras plis presi. Yon bagay ki pi long Lè sa a, 15 karaktè, paske reyèlman nou bezwen kenbe nan tèt ou ke nou bezwen ki antislach zewo chal nan fen fisèl la, ki se yon skanf sou kote yo pral anjeneral pran swen pou nou. Se konsa, kite m 'fè yon bagay tankou - pafwa nou kapab jis kite li tankou sa. OK, se konsa nou te gen koulye a pwovoke fòt segmentation nou an. Poukisa? Paske mwen tape nan plis pase 15 karaktè, e konsa nou te aktyèlman manyen memwa ke mwen aktyèlman pa ta dwe gen. Se konsa, sa se vrèman solisyon an isit la? Oke, sa si nou bezwen yon fisèl ankò? Oke, nou petèt fè li 32 bytes. Oke, sa ki si sa a pa lontan ase? Kouman sou 64 bytes? E si sa a pa lontan ase? Kouman sou 128 oswa 200 bytes? Ki sa ki reyèlman se solisyon an isit la nan la jeneral ka, si nou pa konnen nan avanse sa ki itilizatè a ale nan tape? Se jis nan kalite yon doulè gwo nan manman bourik la, yo dwe onèt, ki se poukisa la CS50 bibliyotèk gen yon liy douzèn kèk nan kòd ki kolektivman aplike GetString fisèl nan yon fason ki nou pa fè sa gen konnen davans sa ki nan itilizatè ki pral tape. An patikilye, si ou gade tounen nan cs50.c soti nan de semèn de sa, ou ap wè ki GetString aktyèlman fè Pa sèvi ak skanf nan fason sa a. Olye de sa, li li yon karaktè nan yon tan. Paske yon sèl bèl bagay la sou li yon karaktè se sa nou kapab garanti tèt nou toujou gen omwen yon Char. Mwen ka jis deklare yon Char, ak Lè sa a, pran etap sa yo se vre wi: ti bebe a jis li yon karaktè nan nan yon tan soti nan klavye la. Lè sa a,, ki sa ou pral wè GetString fè, se chak fwa li kouri soti nan, di, 16 bytes nan memwa, li itilize malok, oswa yon ladan l 'kouzen, nan asiyen plis memwa, kopye fin vye granmoun lan memwa nan rale nan nouvo, ak Lè sa a, ansanm, ap resevwa yon karaktè nan yon moman, ak lè li kouri soti nan ki ti moso nan memwa, lanse li ale, sezi yon moso pi gwo nan memwa, kopi fin vye granmoun nan nouvo, repete ak. Epi li vrèman yon doulè ki aktyèlman aplike yon bagay kòm senp tankou ap resevwa opinyon ki sòti nan yon itilizatè. Se konsa, ou ka itilize skanf. Ou kapab sèvi ak lòt fonksyon menm jan an. Ak yon anpil nan liv lekòl yo ak sou entènèt egzanp fè, men yo ap tout vilnerab a pwoblèm tankou sa a. Men, finalman, ap resevwa yon segfault se kalite anmèdan. Li pa bon pou itilizatè a. Men, nan ka ki pi mal la, ki sa ki li fondamantalman mete ou Kòd a risk pou yo? Gen kèk kalite atak, kapab. Nou te pale de yon atak sa yo - debòde chemine a. Men, an jeneral, si w ap pèmèt yo debòde yon tanpon, tankou nou te fè yon koup la semèn de sa, ak jis ekri plis pase "alo" sou chemine a, ou ka tout bon pran sou, ki kapab, yon òdinatè, oswa omwen jwenn nan done ki pa fè pati nan ou. Se konsa, nan kout, sa a se rezon sa a genyen sa yo fòmasyon wou. Men koulye a,, nou kòmanse pran yo koupe, kòm pwogram nou yo pa bezwen ankò, nesesèman, D 'soti nan itilizatè a. Men, nan ka a nan pwoblèm mete sis, apò ou ap soti nan yon gwo dosye diksyonè ak 150 kèk enpè mil mo yo. Se konsa, ou pa pral gen enkyete sou abitrè D 'itilizatè a la. Nou pral ba ou kèk sipozisyon sou sa dosye. Nenpòt kesyon sou endikasyon oswa skanf oswa opinyon itilizatè an jeneral? Tout dwa, se konsa yon gade rapid Lè sa a, nan yon sèl fin sijè soti nan de semèn de sa. Men, sa ki te sa a nosyon nan yon struct. Se pa ke - sa a nosyon nan yon struct, ki te ki sa? Ki sa ki t 'struct fè pou nou? Defini - regrèt? Defini yon kalite varyab. Se konsa, sòt de. Nou ap aktyèlman konbine de sijè. Se konsa, avèk tipedèf, sonje ke nou kapab deklare yon di ki kalite pwòp nou, tankou yon synonym, tankou fil pou * Char. Men, lè l sèvi avèk tipedèf ak struct, nou ka kreye se vre wi: pwòp nou done estrikti. Pou egzanp, si m 'ale tounen nan jdi isit la sèlman pou moman yon, epi mwen ale pi devan ak fè yon bagay tankou, kite m 'sove sa a kòm, se pou yo di, structs.c pou yon ti tan, mwen jis ale ale pi devan epi gen ladan standardio.h, Int anile prensipal la. Lè sa a, nan isit la, ann sipoze ke mwen vle yo ekri yon pwogram ki magazen elèv yo miltip soti nan plizyè kay, pou egzanp. Se konsa, li tankou yon registrarial baz done nan kèk sòt. Se konsa, si mwen bezwen Non yon elèv a, mwen ta kapab fè yon bagay tankou Non * Char, epi mwen pral fè yon bagay tankou - aktyèlman, se pou yo sèvi ak bibliyotèk la CS50 sèlman pou moman yon fè sa-a yon ti kras pi fasil, pou nou ka prete sa yo plizyè douzèn liy nan kòd. Li kite yo jis kenbe li senp. Nou pwal kenbe li fisèl, e kounye a, GetString. Se konsa, mwen fè reklamasyon kounye a ke mwen te estoke non an nan kèk elèv, ak kay la nan kèk elèv, tou senpleman lè l sèvi avèk varyab tankou nou te fè ak nan yon semèn. Men, si mwen kounye a ou vle sipòte elèv yo miltip. Tout dwa, se konsa ensten m ', se fè fisèl name2, vin GetString, fisèl house2 vin GetString. Lè sa a, twazyèm elèv nou yo, kite a fè name3 GetString. Tout dwa, se konsa sa a se èspere ke frape ou kòm kalite estipid, paske pwosesis sa a se reyèlman pa janm ale nan fini, epi li jis ale nan fè Kòd mwen gade pi mal ak pi mal ak pi mal. Men, nou rezoud sa a twò nan semèn de. Ki sa ki te solisyon relativman pwòp nou lè nou te varyab miltip nan la menm done kalite ki, yo tout ki gen rapò, men nou pa t 'vle dezòd sa a atròs nan Menm jan an tou yo te rele varyab? Ki sa ki t 'nou fè olye? Se konsa, mwen panse ke mwen tande yon kote kèk. Nou te gen yon etalaj. Si ou vle ka miltip nan yon bagay, poukisa yo pa nou netwaye sa a tout leve, li jis di, ban m ' etalaj rele non? Men, pou kounye a, se pou yo difisil 3 kòd. Lè sa a, ban m 'yon lòt etalaj rele kay, ak kite m 'pou kounye a difisil Kòd 3. Apre sa, mwen te twouve netwaye la moute dezòd ke mwen jis te kreye. Koulye a, mwen te toujou di kode 3, men menm 3 a te kapab dynamique soti nan la itilizatè, oswa argv, oswa tankou la. Se konsa, sa a se deja pwòp. Men, sa ki nan anmèdan sou sa a se ke kounye a, menm si yon non se yon jan kanmenm fondamantalman lye nan kay yon elèv - li nan yon elèv vrèman ke mwen vle reprezante - Mwen kounye a gen de ranje ki paralèl nan sans ke yo ap nan menm gwosè, ak non bracket 0 prezimableman kat bracket kay 0, ak non bracket 1 kat nan kay bracket 1. Nan lòt mo, ke elèv ap viv nan kay sa a, e ke sa lòt elèv yo lavi nan kay sa a ak lòt. Men, siman sa a ta ka fè menm plis propr. Oke, li kapab, an reyalite. Men, kite m 'ale pi devan epi louvri moute structs.h, epi ou pral wè ide sa a isit la. Remake mwen te itilize tipedèf, menm jan ou mansyone nan yon moman de sa deklare nou pwòp done kalite. Men, mwen tou lè l sèvi avèk sa a mo kle lòt rele struct ki ban m 'yon nouvo done estrikti. Lè sa a estrikti done Mwen reklamasyon ki pral gen de bagay sa yo andedan nan li - yon kòd rele, ak yon kòd yo rele kay la. Ak non mwen pral bay estrikti sa a done ki pral yo dwe rele elèv yo. Mwen te kapab rele li anyen mwen vle, men sa a Semantics fè sans nan m 'nan lide m'. Se konsa, koulye a, si mwen louvri moute yon vèsyon pi bon nan pwogram nan, mwen te kòmanse ekri la, kite m 'woulo liv nan tèt la. Apre sa, nan kèk plis liy nan Kòd isit la, men kite m 'konsantre pou moman sa a sou yon sèl. Mwen te deklare yon konstan elèv yo rele epi yo ka difisil kode 3 pou kounye a. Men koulye a,, avi ki pwòp Kòd mwen kòmanse jwenn. Nan liy 22, Mwen deklare etalaj de elèv yo. Men, remake ke elèv la se aparamman kounye a yon done ki kalite. Paske nan tèt yo nan sa a ranpli, remake Mwen te enkli ke dosye header ke mwen rale moute jis yon ti moman de sa. Epi ki dosye header byen tou senpleman te gen definisyon sa a yon elèv. Se konsa, koulye a, mwen te kreye done m 'pwòp koutim kalite ki otè yo nan C ane de sa pa t 'panse a an davans. Men, pa gen pwoblèm. Mwen ka fè li tèt mwen. Se konsa, sa a se yon etalaj rele elèv yo, chak nan manm ki gen se yon estrikti elèv yo. Apre sa, mwen vle twa nan moun ki nan etalaj la. Epi, koulye a, ki sa ki rès la nan pwogram sa a fè? Mwen te bezwen yon bagay yon ti kras abitrè. Se konsa, soti nan sou entènèt pati 24, Mwen répétèr ki ant 0 a 3. Mwen Lè sa a, mande itilizatè a pou Non elèv la. Lè sa a, mwen itilize GetString tankou anvan. Apre sa, mwen mande pou kay elèv la, ak pou mwen sèvi ak GetString tankou anvan. Men, avi - yon ti kras nouvo moso nan sentaks - Mwen kapab toujou endèks elèv la m-th, men ki jan mwen jwenn nan done yo espesifik andedan jaden an struct a? Oke, sa ki nan aparamman a nouvo moso nan sentaks? Se jis nan operatè a dot. Nou pa te reyèlman wè sa a anvan. Ou te wè l 'nan pset senk si ou te plonje nan deja ak dosye bitmap. Men, dot a jis vle di andedan sa a struct oswa jaden miltip, bay dot Non, oswa, ban m 'dot kay la. Sa vle di ale andedan nan struct la epi pou yo jwenn sa yo jaden an patikilye. Ki sa ki rès la nan pwogram sa a fè? Li pa tout sa ki sexy. Remake mwen répétèr ki ant 0 a 3 ankò, ak mwen tou senpleman kreye yon angle fraz tankou sa, epi sa se nan sa yo ak tankou yon kay, pase nan non dot soti nan elèv la m-th ak yo kay kòm byen. Lè sa a, alafen, kounye a nou ap kòmanse jwenn twou dèyè sou sa a, kounye a ke nou ap abitye ak sa ki malok ak lòt fonksyon yo te fè tout tan sa a. Poukisa mwen gen yo gratis tou de Non ak kay, menm si mwen pa t 'rele malok? GetString te fè sa. Men, sa ki te sal sekrè a ti kras pou plizyè semèn, men GetString gen te koule memwa tout lòt peyi sou la mete tout semès konsa byen lwen. Men, valgrand pral finalman revele sa a yo ban nou. Men, li la pa yon kontra gwo, paske mwen konnen ke mwen ka tou senpleman libere non an ak kay la, menm si teknikman, nan gen super, super san danje, mwen ta dwe fè kèk erè tcheke isit la. Ki sa yo ensten ou di ou? Kisa mwen ta dwe dwe tcheke pou mwen anvan m 'libere sa ki se yon fisèl, aka ki yon * Char? Mwen ta dwe vrèman dwe tcheke si elèv bracket mwen dot Non pa fè sa egal nil. Lè sa a, li pral OK ale pi devan epi gratis ki konsèy, ak menm oswa lòt la yon sèl kòm byen. Si elèv yo bracket mwen dot kay se pa egal a nil, sa a kounye a ap pwoteje kont ka a kwen nan ki GetString retounen yon bagay tankou nil. Men, nou te wè yon ti moman de sa, printf pral pwoteje nou moute isit la pa jis di nil, ki se pral gade etranj. Men, nan omwen li pa pral segfault, kòm nou te wè. Oke, kite m 'fè yon lòt bagay isit la. strukt-0 se kalite yon pwogram estipid paske mwen antre nan tout done sa yo, ak Lè sa a, li a pèdi yon fwa pwogram lan fini. Men, kite m 'ale pi devan epi fè sa. Kite m 'fè tèminal nan fenèt yon ti jan pi gran. Kite m 'fè strukt-1, ki se yon nouvo vèsyon an sa a. Mwen pral rale nan yon ti kras. Epi, koulye a kite m 'kouri dot koupe strukt-1 an. Non Elèv la - David Mather, se pou yo fè Rob Kirkland, kite a fè Lauren LEVERETT. Ki sa ki nan enteresan kounye a se avi - ak mwen sèlman konnen sa paske Mwen te ekri pwogram nan - gen yon dosye kounye a sou mwen ye kounye a anyè rele students.csv. Gen kèk nan ou ta ka gen pou wè sa yo nan mond lan reyèl. Ki sa ki nan yon dosye CSV? Vigil-separe valè. Li nan sòt de tankou yon an pòv moun vèsyon an yon dosye Excel. Li se yon tab nan ranje ak kolòn ki ou ka ouvè nan yon pwogram tankou Excel, oswa Numbers sou yon Mac. Men, si mwen louvri sa a ranpli isit la sou jdi, avi - ak nimewo yo pa jwenn yo. Se jis jdi di m 'nimewo liy. Avi sou liy lan premye nan sa a dosye a se David ak Mather. Liy nan pwochen se Rob vigil Kirkland. Men, liy la twazyèm se Lauren vigil LEVERETT. Se konsa, sa m 'te kreye? Mwen te kounye a ekri nan Liv la yon pwogram C ki efektivman ka jenere tableur ki ka louvri nan yon pwogram tankou Excel. Pa tout sa ki impérieux yon gwoup done ki, men si ou gen pi gwo fragman nan done ke ou aktyèlman vle manipile, epi fè graf yo nan ak renmen, sa a se petèt youn fason yo kreye ki done. Anplis, CSVs yo aktyèlman super komen jis pou estoke done senp - Yahoo Finans, pou egzanp, si ou jwenn stock quotes atravè rele sa yo yo API, sèvis la gratis ki pèmèt ou jwenn kounye a monte-a-dat-a stock quotes pou konpayi yo, yo bay done yo tounen nan la super senp CSV fòma. Se konsa, kouman nou te fè sa? Oke remake, pi fò nan sa a nan pwogram prèske menm bagay la. Men, remake desann isit la, olye ke ekri an lèt detache elèv yo soti, sou liy 35 pati, mwen reklamasyon ke mwen ekonomize nan elèv yo ki gen kapasite, se konsa ekonomize yon dosye. Se konsa, remake mwen deklare yon dosye * - kounye a, sa a se kalite yon anomali nan C. Pou kèlkeswa rezon an, DOSYE se tout kaskèt, ki se pa tankou pifò kalite lòt done nan C. Men, sa a se yon bati-an done ki kalite, * DOSYE. Ak mwen se deklare yon konsèy nan yon dosye, ki jan pou ou ka panse a sa. fopen vle di dosye louvri. Ki sa ki dosye ou vle ouvri? Mwen vle louvri yon dosye ke mwen pral abitrèman rele students.csv. Mwen te kapab rele ki anyen mwen vle. Lè sa a, pran yon devine. Ki sa agiman nan dezyèm fopen pwobableman vle di? Dwa, w pou ekri, te kapab dwe r pou li. Genyen yon pou ajoutra si ou vle ajoute ranje epi yo pa recouvrir tout bagay la. Men, mwen jis vle kreye sa a ranpli yon fwa, se konsa mwen pral sèvi ak quote unquote w. Apre sa, mwen konnen ke se sèlman soti nan li te gen li dokiman an, oswa paj an moun. Si dosye se pa nil - nan lòt mo, si pa gen anyen ale mal gen - kite m 'répétèr sou la elèv yo ki ant 0 a 3. Epi, koulye a remake gen nan yon bagay tout tan tout tan se konsa yon ti kras diferan sou liy 41 isit la. Li pa printf. Li nan fprintf pou dosye printf. Se konsa, li pral yo pou yo ekri pote. Ki dosye? Yon sèl nan ki gen konsèy ou presize kòm agiman an premye. Lè sa a, nou presize yon kòd fòma. Lè sa a, nou presize ki fisèl nou vle ploge nan pou yo a pousan an premye, ak Lè sa a, yon lòt varyab oswa s la pousan dezyèm fwa. Lè sa a, nou fèmen dosye a ak fkloz. Pase mwen libere memwa a tankou anvan, menm si Mwen ta dwe ale tounen nan epi ajoute kèk chèk pou nil. Epi sa a, li. fopen, fprintf, fkloz bay la m ' kapasite yo kreye fichye tèks. Koulye a, ou pral wè nan seri pwoblèm senk, ki gen ladan imaj, ou pral lè l sèvi avèk binè dosye pito. Men, fondamantalman, lide a se menm bagay la tou, menm si fonksyon yo ou pral wè se yon ti jan diferan. Se konsa, gwo toubouyon vwayaj, men ou pral jwenn tout twò abitye ak dosye I/O-- D 'ak pwodiksyon - ki gen pset senk. Men, nenpòt kesyon sou la Basics premye isit la? Yeah? E si ou eseye libere yon valè nil? Mwen kwè ke, sof si gratis te vinn yon ti kras pi plis user-zanmitay, ou ka potansyèlman segfault. Pase li nil se move paske mwen pa fè sa kwè gratis nwi yo tcheke pou ou, paske li ta kapab gen yon dechè nan tan pou li fè tèt li pou tout moun nan mond lan. Bon kesyon, menm si. Tout dwa, se konsa sa a kalite vin nou nan yon sijè enteresan. Tèm nan an seri pwoblèm senk se forensics. Omwen sa a, se yon pòsyon nan mete a pwoblèm. Medsin legal jeneralman refere a nan gerizon nan enfòmasyon ki kapab oswa pa gen dwa yo te efase fè espre. Se konsa, mwen te panse mwen ta ba ou yon rapid gou nan sa ki reyèlman ale sou tout tan sa a anba a kapo nan òdinatè ou. Pou egzanp, si ou gen andedan nan ou laptop oswa òdinatè Desktop ou yon kondwi difisil, li nan swa yon mekanik aparèy ki aktyèlman vire - gen nan bagay sa yo sikilè rele gwo bòl ki gade byen renmen sa mwen jis te gen moute sou ekran an isit la, menm si sa a se lekòl de pli zan pli fin vye granmoun. Sa a se yon twa-ak-yon-demi pous difisil kondwi. , Twa ak yon mwatye pous refere nan ak nan bagay la lè ou enstale li nan yon òdinatè. Anpil nan nou mesye nan laptops ou an kounye a gen kondui semi-conducteurs, oswa SSDs, ki pa gen okenn deplase pati. Yo ap pi plis tankou RAM ak mwens tankou aparèy sa yo mekanik. Men, lide yo se toujou menm bagay la, sètènman jan yo gen rapò nan pwoblèm mete senk. Men, si ou panse osijè de kounye a yon kondwi difisil reprezante yo te yon sèk, ki Mwen pral pran tankou sa a isit la. Lè ou kreye yon dosye sou òdinatè ou, si li nan yon SSD, oswa nan ka sa a, yon lekòl ki pi gran kondwi difisil, ki dosye konprann Bits miltip. Se pou nou di ke li nan sa a 0 ak 1, yon pakèt tout 0s ak 1S. Se konsa, sa a se tout mwen kondwi difisil. Sa a se aparamman yon dosye trè gwo. Epi li se lè l sèvi avèk moute 0s la ak 1S nan ki pòsyon nan plat la fizik. Oke, sa se ke pòsyon fizik? Oke, li vire soti ki sou yon kondwi difisil, omwen nan kalite sa a, gen nan sa yo ti ti kras patikil mayetik. Apre sa, yo esansyèlman gen nò ak poto nan sid yo, se konsa ke si ou vire youn nan moun ki patikil mayetik fason sa a, ou ta ka di ke li nan reprezante yon 1. Men, si li nan tèt anba sid nan nò, ou ta ka di ke li nan reprezante yon 0. Se konsa, nan mond reyèl la fizik, sa a, se ki jan ou ka reprezante yon bagay nan eta binè nan 0 a ak yon 1. Se konsa, ki nan tout yon dosye se. Genyen yon pakèt antye nan mayetik patikil ki fason sa a yo oswa fason sa a, kreye modèl nan 0s ak 1S. Men, li vire soti lè ou sove yon dosye li an, se kèk enfòmasyon sove separeman. Se konsa, sa a se yon tab ti kras, yon anyè, se konsa pale. Apre sa, mwen pral rele non sa a kolòn, ak Mwen pral rele sa a kote kolòn. Men, mwen pral di, ann sipoze sa a se rezime m 'yo. Se resume.doc mwen ki estoke nan kote, se pou yo di 123. Mwen toujou ale pou ladan nimewo. Men, sufi li vle di ke jis tankou nan RAM, ou ka pran yon kondwi difisil ki nan yon jigokte jigokte oswa 200 oswa yon teraokte, epi ou ka nimewo tout bytes yo. Ou ka Nimewo tout fragman nan 8 miyèt moso. Se konsa, nou pral di ke sa a se 123 kote. Se konsa, anyè sa a andedan nan opere mwen sistèm sonje ke mwen kourikouloum-vite se nan kote 123. Men, li vin enteresan lè ou efase yon dosye. Se konsa, pou egzanp - ak Erezman, pi fò nan mond lan gen kenbe sou sa a - sa ki pase lè ou trennen yon dosye nan fatra Mac ou eksplwatasyon oswa fenèt ou resikle bin? Ki sa ki nan bi pou yo fè sa? Li nan evidamman debarase m de dosye a, men sa ki fè zak la nan trenen ak jete nan fatra ou oswa ou Resikle Bin fè sou yon òdinatè? Absoliman pa gen anyen, vrèman. Li nan jis tankou yon katab. Li se yon katab espesyal, yo dwe asire. Men, li aktyèlman efase dosye a? Oke, pa gen okenn, paske gen kèk nan pwobableman ou yo te tankou, o modi, ou pa t ' vle di fè sa. Se konsa, ou doub klike sou la Fatra oswa Bin Resikle. Ou te poked ozalantou yo ak ou te refè dosye a jis nan antrenman li soti nan la. Se konsa, byen klè, li pa nesesèman efase li. OK, w ap pi entelijan pase sa. Ou konnen jis trenen l 'nan la Fatra oswa resikle bin pa vle di w ap vide fatra a. Se konsa, ou moute nan meni an, epi ou di Vide fatra oswa Vide Bin Resikle. Lè sa a, sa k ap pase? Yeah, kidonk li se efase plis konsa. Men, tout sa ki ap pase sa a. Òdinatè a bliye kote resume.doc te ye a. Men, sa ki pa te chanje aparamman nan foto a? Bits yo, 0s la ak 1S ke mwen fè reklamasyon yo se sou sit nan kèk aspè fizik pyès ki nan konpitè a. Yo ap toujou la. Se jis nan òdinatè a gen bliye sa yo ye. Se konsa, li la esansyèlman libere dosye a nan Bits sa yo ke yo itilize yo ankò. Men, pa jiskaske ou kreye plis dosye, ak plis ankò dosye, ak plis ankò dosye yo pral probabilistically, sa yo ki 0s ak 1, sa yo patikil mayetik, jwenn reyitilize, tèt oswa dwa bò moute, pou dosye lòt, 0s ak 1S. Se konsa, ou gen fenèt sa a nan tan. Epi li pa nan previzib longè, vrèman. Sa depann de gwosè a nan di ou yo kondwi ak konbyen dosye ou gen ak kouman vit ou fè bann nouvo. Men, gen nan fenèt sa a nan tan pandan ki ki dosye se toujou parfe recouvre. Se konsa, si ou te janm sèvi ak pwogram tankou McAfee oswa Norton pou yo eseye refè done yo, tout yo ap fè ap eseye refè anyè sa a sa yo rele konnen ki kote dosye ou te ye a. Epi pafwa Norton epi yo pral di, dosye a se 93% recouvre. Oke, sa sa vle di? Sa jis vle di ke gen kèk dosye lòt azar te fini lè l sèvi avèk, di, sa yo Bits soti nan orijinal la dosye ou. Se konsa, sa ki aktyèlman ki patisipe nan rekipere done? Oke, si ou pa gen yon bagay tankou Norton pre-enstale sou òdinatè w lan, pi bon an ou ka pafwa fè se gade nan tout kondwi a difisil kap chèche modèl nan miyèt moso. Ak youn nan tèm yo nan seri pwoblèm senk se ke ou ap fè rechèch la ekivalan nan yon kondwi difisil, yon mediko-legal imaj de yon kat flash kontra enfòmèl ant ki sòti nan yon kamera dijital, pou chèche 0s la ak 1S ki tipikman, ak segondè pwobabilite, reprezante nan kòmanse nan yon imaj JPEG. Epi ou nèg ka refè sa yo imaj pa asepte, si mwen wè modèl sa a nan Bits sou imaj la mediko-legal, ak segondè pwobabilite, ki make kòmanse nan yon JPEG. Men, si mwen wè modèl la menm ankò, ki pwobableman make kòmansman an nan yon lòt JPEG, ak yon lòt JPEG, ak yon lòt JPEG. Lè sa a se tipikman ki jan done rekiperasyon pral travay. Ki sa ki nan bèl sou JPEGs se menm si fòma a dosye tèt li se yon ti jan konplèks, nan konmansman an nan chak tankou dosye se aktyèlman san patipri ki pèmèt idantifye ak senp, menm jan ou pral wè, Si ou te pa deja. Se konsa, kite a pran yon gade pi pre anba kapo a kòm ekzakteman ki sa a te ale sou, e ki sa sa yo 0s ak 1S yo, ba w yon ti jan pi plis nan yon kontèks pou sa a defi patikilye. [Lèktur videyo] -Ki kote PC ou magazen ki pi nan done pèmanan li yo. Pou fè sa, done a vwayaje soti nan RAM ansanm ak siyal lojisyèl ki di kondwi a difisil ki jan nan magazen ki done. Sikui yo kondwi difisil tradui sa yo siyal nan vòltaj fluctuations. Sa yo, nan vire, pou kontwole, difisil kondwi a nan k ap deplase pati, kèk nan kèk nan k ap deplase pati kite yo nan la modèn òdinatè. Gen kèk nan siyal yo kontwole yon motè ki vire gwo bòl metal-kouvwi. Done ou a ap aktyèlman estoke sou sa yo bòl. Siyal Lòt deplase li nan / ekri tèt li oswa ekri done sou gwo bòl yo. Sa a machin pou egzak ke yon moun tout cheve nan tèt pa t 'kapab menm pase ant la tèt ak gwo bòl k ap vire. Men, li tout travay nan vitès formidable. [Lèktur videyo END] DAVID Malan: Zoom nan yon ti kras pi fon kounye a nan sa ki nan aktyèlman sou moun gwo bòl. [Lèktur videyo] -Se pou yo gade nan ki sa nou jis te wè nan mouvman dousman. Lè yon batman kè kout nan elektrisite se voye nan tèt la li / ekri, si viraj sou yon elektwomayetik ti pou yon fraksyon nan yon dezyèm fwa. Leman nan kreye yon jaden, ki chanjman polarite a nan yon ti ti, pòsyon nan patikil yo metal ki rad chak sifas plato. Yon modèl seri de sa yo ti, chaje-up zòn sou ki gen kapasite a reprezante yon ti jan yon sèl nan done nan kantite binè sistèm itilize pa òdinatè. Koulye a, si se aktyèl la voye yon fason nan li, la / ekri tèt, zòn nan se polarize nan yon direksyon. Si se aktyèl la voye nan la opoze direksyon, nan polarization se ranvèse. Ki jan ou fè jwenn done sou ki gen kapasite a difisil? Jis ranvèse pwosesis la. Se konsa, li patikil yo sou ki gen kapasite a ki jwenn aktyèl la nan la li / ekri tèt deplase. Mete ansanm dè milyon de sa yo sèmante segments, ak ou te gen yon dosye. Koulye a, moso yo nan yon dosye sèl kapab pral gaye nan bwa tout lòt peyi sou yon nan kondwi bòl, kalite tankou dezòd la nan papye sou biwo ou. Se konsa, yon dosye espesyal siplemantè kenbe yon dosye nan kote tout bagay se. Pa fè sa ou vle ou te gen yon bagay tankou sa? [Lèktur videyo END] DAVID Malan: OK, pwobableman pa. Se konsa, kouman anpil nan nou mesye te grandi ak sa yo? OK, se konsa li mwens ak mwens men chak ane. Men, mwen kontan w ap omwen abitye avèk yo, paske sa a ak pwòp nou Demo liv, Malerezman, yo ap mouri yon trè ralanti lanmò isit la nan abitye. Men, sa a se sa m ', nan omwen, li tounen nan lekòl segondè, yo itilize itilize pou sovgad. Epi li te etonan, paske ou te kapab sere 1.4 megabit sou sa a ki gen kapasite patikilye. Lè sa a te vèsyon an dansite segondè, jan sa endike nan HD a, ki te gen sa vle di anvan HD videyo a jodi a. Creole dansite te 800 kilookte. Men, anvan sa, te gen 400-kilobit disk. Men, anvan sa, te gen 5 ak 1/4 disk pous, ki te se vre wi: lage lage, ak yon ti kras pi laj ak pi wo pase tout bagay sa yo isit la. Men, ou ka aktyèlman wè sa yo rele an lage lage aspè nan sa yo disk. Men, fonksyonèl, yo ap aktyèlman trè menm jan ak kondui difisil nan nan pi piti sa a ki kalite. Yon fwa ankò, SSDs nan nouvo òdinatè travay yon ti kras diferan. Men, si ou deplase ki tab metal ti kras, ou ka aktyèlman wè yon bonbon ti kras, oswa plato. Li pa metal tankou sa a yon sèl. Sa a yon sèl la aktyèlman kèk pi bon mache plastik materyèl. Epi ou ka kalite ajite li. Men, ou te trully jis siye koupe kèk kantite Bits oswa patikil mayetik sa a soti nan ki gen kapasite. Se konsa, Erezman, pa gen anyen sou li. Si ke bagay la nan wout la - epi kouvri je ou yo ak sa yo ki nan frè parèy ou - ou ka jis kalite rale sa a tout djenn koupe tankou sa. Men, gen yon sezon prentan ti kras, se konsa dwe okouran de sa ak je ou. Se konsa, kounye a ou gen vrèman yon ki gen kapasite lage lage. Ak sa ki nan remakab sou sa a se ke nan kòm anpil jan sa a se yon ti-echèl reprezantasyon nan yon pi gwo difisil kondwi, bagay sa yo super, super senp. Si ou zongle anba a nan li, kounye a ke ke bagay metal nan koupe, epi kale yo louvri yo, tout gen se de moso nan te santi ak ki gen kapasite a lage lage sa yo rele ak yon moso metal sou andedan an. Apre sa, ale mwatye nan sa ki gen kapasite m 'lan. Gen ale yon lòt mwatye nan yo. Men, sa a tout sa ki te k ap vire andedan nan òdinatè w lan nan pase. Li di ankò: yo mete sa a nan pèspektiv, Kòman gwo se pi fò nan ou difisil kondui jou sa yo? 500 jigokte, yon teraokte, petèt nan yon Desktop òdinatè, 2 teraokte, 3 teraokte, 4 teraokte, dwa? Sa a se youn megaokte, bay oswa pran, ki pa menm ka anfòm yon MP3 tipik ankò jou sa yo, oswa kèk menm jan an mizik dosye-a. Se konsa, yon souvni ti kras pou ou jodi a, e tou ede kontèkstualize sa ki nou pral pran pou yo akòde kounye a nan pwoblèm mete senk. Se konsa, sa yo se pou ou kenbe. Se konsa, kite m 'tranzisyon nan kote yo pral depans pset nan pwochen tou. Se konsa, nou te kounye a mete paj sa a pou - oh, yon koup nan anons byen vit. Sa a Vandredi, si ou ta renmen rantre nan CS50 pou manje midi, ale nan plas la nòmal, cs50.net/rsvp. Men, final pwojè - se konsa pou chak progranm a, nou te afiche nan final pwojè spesifikasyon deja. Reyalize ke sa pa vle di li nan akòz patikilyèman byento. Li nan afiche, reyèlman, jis jwenn ou nèg panse sou li. Ak tout bon, yon super enpòtan pousantaj nan ou pral abòde pwojè final sou materyèl ke nou pa gen menm vinn nan klas la, men yo pral kòm byen bonè nan semèn kap vini. Avi, menm si, ki espèk a mande pou yon kèk eleman diferan nan la final pwojè. Premye a, nan yon kèk semèn, se yon pre-pwopozisyon, yon imel trè aksidantèl TF ou a di l 'oswa sa w ap panse sou pou pwojè ou a, ak Angajman Pa gen. Pwopozisyon yo pral patikilye ou angajman, li di, isit la, sa a se sa Mwen ta renmen pou fè pou pwojè mwen. Ki sa ou panse? Twò gwo? Twò piti? Èske li ka jere? Men, ou wè espèk a pou plis detay. Koup la semèn aprè sa, se estati rapò, ki se yon Menm jan an tou aksidantèl imèl bay TF ou a di jis ki jan byen lwen dèyè ou se nan final ou a egzekisyon pwojè a, ki te swiv pa Hackathon nan CS50 kote tout moun se envite, ki pral yon evènman soti nan 8:00 PM sou yon sèl aswè jouk 7:00 AM nan denmen maten. Pitza, menm jan mwen te ka mansyone nan semèn zewo, Wil ap sèvi a 9:00 PM, Chinwa manje nan 1:00 AM. Men, si w ap toujou reveye a 5:00 AM, nou pral pran ou nan IHOP pou manje maten. Se konsa, Hackathon a se youn nan pi plis nan eksperyans memorab nan klas la. Lè sa a, aplikasyon an se akòz, ak Lè sa a, climactic CS50 san Patipri la. Plis detay sou tout moun sa yo nan semèn k'ap vini yo. Men, kite a tounen nan yon bagay fin vye granmoun lekòl la - ankò, yon etalaj. Se konsa, yon etalaj te bèl, paske li rezoud pwoblèm tankou nou te wè jis yon moman sa de sa ak estrikti elèv ap resevwa yon ti kras nan kontwòl si nou vle gen yon sèl elèv la, elèv de, elèv twa, elèv dot dot dot, kèk nimewo abitrè elèv yo. Se konsa, ranje, yon kèk semèn de sa, swooped nan ak rezoud tout pwoblèm nou an pa konnen davans ki jan anpil bagay sa yo nan kèk kalite nou ta ka vle. Epi nou te wè ki strukt ka ede nou plis òganize Kòd nou yo ak kenbe concept menm jan varyab, tankou yon Non ak kay yon, ansanm, pou nou ka trete yo tankou yon moun antite, andedan nan yo ki gen ti mòso pi piti. Men, ranje gen kèk dezavantaj yo. Ki sa ki yo se kèk nan dezavantaj yo nou te rankontre ak ranje konsa byen lwen? Ki sa ki nan sa? Fiks gwosè - Se konsa, menm si ou ka kapab asiyen memwa pou yon etalaj, yon fwa ou konnen ki jan anpil elèv ou gen, konbyen karaktè ou gen soti nan itilizatè a, yon fwa ou te resevwa lajan etalaj la, ou te kalite pentire tèt ou nan yon kwen. Paske ou pa ka insert eleman nouvo nan mitan an nan yon etalaj. Ou pa ka mete plis eleman nan fen yon etalaj. Vrèman, ou gen resort kreye yon tout etalaj nouvo, kòm nou te diskite, kopye fin vye granmoun lan nan nouvo an. Li di ankò, se sa ki maltèt la ki GetString kontra avèk pou ou. Men, ankò, ou pa menm ka insert yon bagay nan mitan an nan etalaj la si pousantaj la pa antyèman plen. Pou egzanp, si sa a etalaj isit la nan gwosè sis sèlman gen senk bagay sa yo nan li, byen, ou ta ka jis fofile yon bagay sou fen an. Men, sa ki si ou vle insert yon bagay nan mitan an nan la etalaj, menm si li ka gen senk ou sis bagay sa yo nan li? Oke, nou sa nou te fè lè nou te gen tout volontè moun nou Sur nan semèn sot pase yo? Si nou te vle mete yon moun isit la, swa moun sa yo ki jan pou avanse pou pi sa a fason sa a, oswa moun sa yo ki jan pou avanse pou pi sa a fason sa a, ak ki te vin chè. Déplacement nan moun nan pèp andedan nan yon etalaj te fini ajoute leve, li Des nou tan, kon sa anpil nan n okib nou kouri fwa tankou sòt ensèsyon, pou egzanp, nan ka ki pi mal la. Se konsa, ranje yo se gwo, men ou gen konnen davans ki jan gwo ou vle yo. Se konsa, OK, isit la nan yon solisyon. Si m 'pa konnen davans ki jan anpil elèv yo, mwen ta ka gen, mwen konnen yon fwa Mwen deside, menm si, mwen kole ak ki anpil elèv, poukisa pa fè sa mwen jis toujou asiyen espas de fwa lavalè jan mwen ta ka panse mwen bezwen? Eske se sa ke pa yon solisyon rezonab? Pli reyèlman, mwen pa panse ke nou ap pral bezwen plis pase 50 fant nan yon etalaj pou yon klas mwayen ki gwosè, se konsa kite yo jis wonn moute. Mwen pral fè 100 fant nan etalaj m 'yo, jis pou nou kapab definitivman jwenn nan kantite elèv mwen espere gen nan kèk klas mwayen-gwosè. Se konsa, poukisa pa jis wonn moute ak asiyen plis memwa, anjeneral, pou yon etalaj pase ou panse ou ta ka menm bezwen? Ki sa ki nan sa a pushback senp ak sa yo ki lide? Ou jis ap gaspiye memwa. Literalman chak pwogram ou ekri Lè sa a, se petèt lè l sèvi avèk memwa de fwa lavalè tou ou aktyèlman bezwen. Epi ki jis pa santi tankou yon patikilyèman elegant solisyon an. Anplis, li jis diminye la pwobabilite nan yon pwoblèm. Si ou rive gen yon kou popilè yon semès epi ou gen 101 elèv yo, pwogram ou an se toujou fondamantalman fè fas a pwoblèm nan menm. Se konsa, Erezman, gen nan yon solisyon a anons sa a oubyen tout pwoblèm nou yo nan fòm lan nan estrikti done ki pi konplèks pase sa yo nou te wè konsa byen lwen. Sa a, mwen reklame, se yon lis lye. Sa a se yon lis nimewo - 9, 17, 22, 26, ak 34 - ki te lye ansanm pa fason nan sa ki mwen te trase kòm kèk flèch. Nan lòt mo, si mwen te vle reprezante yon etalaj, mwen ta ka fè yon bagay tankou sa. Apre sa, mwen pral mete sa a sou anlè tèt yo nan jis moman sa a. Mwen te kapab fè - hello, tout dwa. Kanpe pa. New òdinatè isit la, klè - tout dwa. Se konsa, si mwen gen nimewo sa yo nan etalaj - 9, 17, 22, 26, 24 - pa nesesèman selon echèl la. Tout dwa, se konsa isit la se etalaj mwen - oh Bondye mwen an. Tout dwa, se konsa isit la se etalaj mwen. Oh Bondye mwen an. [Ri] DAVID Malan: imitasyon. Li nan efò twòp ale tounen ak ranje sa, Se konsa, gen - 26. Se konsa, nou gen sa a etalaj de 9, 17, 22, 26, ak 34. Pou moun nan ou ka wè nan anbarasan erè mwen jis te fè, gen li se. Se konsa, mwen reklamasyon ke sa a se yon trè efikas solisyon an. Mwen te resevwa lajan kòm antye anpil kòm Mwen bezwen - yon sèl, de, twa, kat, senk, oswa sis - epi mwen te Lè sa a, ki estoke chif yo andedan nan sa a etalaj. Men, si, lè sa a, mwen vle insert yon valè tankou nimewo a 8? Oke, kote li ale? Sipoze mwen vle insert yon kantite tankou 20. Oke, kote li ale? Yon kote gen nan mitan an, oswa nimewo a 35 gen yo ale yon kote nan fen an. Men, mwen tout soti nan espas. Se konsa, sa a se yon defi fondamantal nan ranje ki solisyon an. Mwen te reklame yon ti moman de sa, GetString rezoud pwoblèm sa a. Si ou vle insert yon nimewo sizyèm nan sa a etalaj, ki sa ki omwen yon solisyon ou ka tonbe sou do yo pou asire w, jis tankou nou fè ak GetString? Ki sa ki nan sa? Oke, fè li pi gwo se pi fasil te di pase fè. Nou pa ka nesesèman fè etalaj la pi gwo, men sa ki nou ka fè? Fè yon etalaj nouvo sa a, se pi gwo, ki gen yon gwosè , 6, oswa petèt gwosè 10, si nou vle jwenn devan yo nan bagay sa yo, ak Lè sa a kopye etalaj la fin vye granmoun nan nouvo a, ak Lè sa a, libere etalaj la fin vye granmoun. Men, sa ki lè nan kouri kounye a nan pwosesis sa a? Li nan gwo O n, paske kopye la ki pral koute ou kèk inite nan tan, se konsa pa konsa pou sa ideyal si nou gen asiyen yon etalaj nouvo, ki pral te konsome de fwa lavalè memwa tanporèman. Kopi fin vye granmoun nan nouvo - Mwen vle di, li nan jis yon tèt fè mal, ki se, ankò, pou rezon sa a te ekri GetString pou ou. Se konsa, sa ki ka nou fè olye? Oke, sa ki si estrikti done nou an aktyèlman gen twou vid ki genyen nan li? Sipoze ke mwen detann objektif mwen pou yo gen fragman ki toupre yo nan memwa, kote 9yèm ane se dwa pwochen nan 17, ki se dwa akote 22, ak sou sa. Men, sipoze ke 9yèm ane kapab sou isit la nan RAM, ak 17 ka sou isit la nan RAM, ak 22 ka sou isit la nan RAM. Nan lòt mo, mwen pa bezwen yo menm tounen nan do ankò. Mwen jis gen yon jan kanmenm fil yon zegwi nan chak nan nimewo sa yo, oswa chak nan sa yo nœuds, menm jan nou ap rele nan rektang kòm mwen te trase yo, yo sonje ki jan pou li ale nan dènye a sa yo ne soti nan premye a. Se konsa, sa a se pwogram lan konstwi nou te wè byen dènyèman ak ki mwen ka aplike ki fil, oswa trase isit la, ak ki mwen kapab aplike sa yo flèch? Endikasyon Se konsa,, dwa? Si m 'asiyen pa sèlman yon Int, men ne yon - ak pa ne, mwen jis vle di veso. Ak vizyèlman, mwen vle di yon rektang. Se konsa, yon ne aparamman bezwen a ki genyen de valè - Int nan tèt li, ak lè sa a, kòm enplisit pa mwatye nan pati anba nan rektang lan, ase espas pou yon Int. Se konsa, jis panse devan yo isit la, Kòman gwo se sa a ne, sa a veso nan kesyon? Konbyen bytes pou Int a? Assume 4, si li nan menm bagay la tou kòm dabitid. Lè sa a, ki jan anpil bytes pou konsèy la? 4. Se konsa, sa a veso, oswa ne sa a, se yo pral yon estrikti ki 8-multiple. Oh, ak sa a, se yon konyensidans kontan ke nou jis prezante sa a nosyon nan yon struct, oswa yon estrikti C. Se konsa, mwen reklamasyon ke mwen vle pran yon etap nan direksyon sa a sofistike plis egzekisyon pou yon lis nimewo, yon lye lis nimewo, mwen bezwen fè yon ti kras pi plis panse moute devan ak deklare pa sèlman yon Int, men struct yon ke mwen ap rele, konvansyonèl isit la, ne. Nou te kapab rele li anyen nou vle, men ne a pwal tematik nan yon anpil nan bagay sa yo nou kòmanse kap nan kounye a. Anndan nan ki ne se yon n Int. Lè sa a, sa a sentaks, yon ti kras etranj nan premye gade - struct ne * kap vini an. Oke pictorially an, sa sa? Sa se mwatye nan pati anba nan rektang lan ke nou wè jis yon ti moman de sa. Men, poukisa mwen di struct ne * kòm opoze a jis * ne? Paske si ke konsèy ap montre nan yon lòt ne, li jis nan adrès nan yon ne. Sa a ki konsistan avèk ki sa nou te gen diskite sou endikasyon konsa byen lwen. Men, poukisa, si mwen fè reklamasyon estrikti sa a se rele ne, Mwen te di struct ne andedan isit la? Egzakteman. Li nan sòt de yon reyalite estipid nan C. Tipedèf a, se konsa pale, pa gen anyen an rive fèt ankò. C se super literal. Li li tèt Kòd ou a anba a, gòch a dwat. Men, jouk li frape ki virgules sou la liy anba a, devine kisa ki pa egziste kòm yon kalite done? Ne, quote unquote ne. Men, paske se nan sil a pi plis deklarasyon mwen te fè sou liy nan premye - tipedèf struct ne - paske ki te vin an premye, anvan an aparèy òtopedik Curly, ki nan sòt de tankou pre-edike sonnen sa, ou konnen ki sa, ban m 'yon struct rele ne struct. Franchman, mwen pa renmen rele bagay sa yo struct ne, struct ne tout nan tout Kòd mwen. Men, mwen pral sèlman sèvi ak li yon fwa, jis andedan, pou m 'ka efektivman kreye yon sòt de referans sikilè, pa yon konsèy tèt mwen se pou chak, men yon konsèy nan yon lòt nan yon kalite ki idantik. Se konsa, li sanble ke sou yon estrikti done tankou sa a, gen yon kèk operasyon ke sa ta kapab nan enterè nou. Nou ta ka vle insert nan yon lis tankou sa a. Nou ta ka vle efase nan yon lis tankou sa a. Nou ta ka vle rechèch lis la pou yon valè, oswa plis jeneralman, Traverse. Lè Traverse se jis yon fason anpenpan nan li di kòmanse sou bò gòch la yo epi li deplase tout wout la sou bò dwat la. Ak Avi, menm avèk sa a plis yon ti kras sofistike done estrikti, se pou m 'pwopoze ke nou kapab prete kèk nan ide yo nan de semèn ki sot pase yo ak aplike yon fonksyon rele rechèch tankou sa a. Li nan ale nan retounen vre oubyen fo, ki endike, repons lan se wi oswa pa gen okenn, n se nan lis la. Agiman dezyèm li se yon konsèy nan lis nan tèt li, se konsa yon konsèy nan yon ne. Tout mwen pral Lè sa a, fè se deklare yon varyab pou yon ti tan. Nou pral rele li ptr pa konvansyon, pou konsèy. Apre sa, mwen bay li egal a la kòmanse nan lis la. Epi, koulye a remake bouk la pandan y ap. Se konsa, lontan ke konsèy se pa egal nil, mwen pral tcheke. Èske flèch konsèy n egal a n nan ki te pase nan? Epi rete tann yon minit - nouvo moso nan sentaks. Ki sa ki se flèch tout nan yon toudenkou? Yeah? Egzakteman. Se konsa, Lè nou konsidere ke yon kèk minit de sa, nou itilize dot notasyon a gen aksè a yon bagay andedan nan yon struct a, si varyab la ou te se pa struct la tèt li, men yon konsèy nan yon struct, Erezman, yon moso nan sentaks ki finalman fè sans entwisyon. Flèch la vle di yo swiv konsèy la, tankou flèch nou yo tipikman vle di pictorially, epi ale nan done anndan jaden. Se konsa, flèch se menm bagay la kòm dot, men ou sèvi ak li lè ou gen yon konsèy. Se konsa, jis Rekapitilasyon lè sa a, si n jaden an andedan nan struct a rele konsèy egal egal n, retounen vre. Sinon, liy sa a isit la - konsèy egal konsèy kap vini an. Se konsa, sa sa a ap fè, avi, se si mwen k lonje dwèt nan struct la ki gen 9, ak 9 se pa nimewo a M 'ap chache - ta kwè m' ap chache pou n egal 50 - Mwen pral mete ajou konsèy pou yon ti tan mwen pa nan pwen sa a nan ne ankò, men konsèy flèch kap vini yo, ki ki pral mete m 'moute isit la. Koulye a, mwen reyalize se yon gwo toubouyon entwodiksyon. Nan Mèkredi, nou pral aktyèlman fè sa a ak kèk moun ak ak kèk plis Kòd nan yon plus apante. Men, reyalize, nou kounye a fè done nou an estrikti pi konplèks pou ke nou algoritm ka jwenn plis efikas, ki a pwal voulu pou sis pset, lè nou chaje nan, ankò, sa yo 150,000 se mo, men yo bezwen yo fè sa avèk efikasite, ak depreferans, kreye yon pwogram ki kouri pou itilizatè nou yo pa nan lineyè, pa nan N okib, men nan konstan tan, nan ideyal la. Nou pwal wè ou nan Mèkredi. Oratè: Nan CS50 kap vini an, David bliye ka baz l 'yo. DAVID Malan: Epi sa a, ki jan ou voye mesaj tèks ak C. Kisa - a [Divès kalite mesaj tèks NOTIFIKASYON son]