SPEAKER 1: Ni skribi programon kiu gets ĉenon de la uzanto sen uzante la CS50 Biblioteko funkcii GetString. Por fari tion, ni iru antaŭen kaj uzi scanf, la funkcio kiun la GetString funkcio fakte uzas sub la kapuĉo. Sed mi tuj faru tion intence en kalesxo vojo. Mi tuj faros en maniero, kiun mi opinias estus bone, sed tio rezultas ke mia supozo tuj estu tute, tute misa. Kaj fakte, sufiĉe danĝera. Ĉar cimoj ŝatas la unu mi al fari povas esti ekspluatata de kontrauxuloj tia, ke via maŝino aŭ via programo povas esti transprenita potenciale. Ni komencu jene. Unue ni deklaras nian kordo, alie konata nun kiel char stelo, kaj voku gxin s. Lets sekvanta instigas la uzanton por kordoj, kiel kun "kordo, bonvolu." Kaj ni nun ek la kordoj de la uzanto uzante scanf, citaĵo unquote, "% s." En Alivorte, ni informos scanf ke ni cxu fakte atendas ricevi kordo de la uzanto. Sed nun ni bezonas diri scanf unu alia afero - kie meti la ŝnuron ke la uzanto provizas. Nu, mi tuj tute simple starti kun komo s, specifante, ke mi ŝatus scanf meti la kordo tie. Mi sekvanta tuj presi ion kiel printf "dankon por la% s backslash n komo. "Kaj kiel ĉiam, mi estas preterpasonta en la kordo, s. Nun ni savu, kompili, kaj kuri ĉi programon, por kontroli ĉu ni ne povas indukti la problemo mi antaŭdiris. Faru scanf-1. ./scanf-1. String bonvole. Ni provizi iun kiel "saluton". "Dankon pro la nula." Hmm, tio ne kion mi ekspektis. Do kio okazas ĉi tie? Nu, tio rezultas ĉar ni deklaras s kiel char stelo sed ni ne reale stokitaj en s la adreso de reala eron de memoro, scanf ne havi ie meti la kordo ke la uzanto tajpas in Ja, se la uzanto devis nun tajpas en multe pli longa kordo ol "saluton!" ekzemple plurajn liniojn de teksto aŭ plurajn alineojn de teksto, ĝi estas tute ebla, ke ni povus indukti tn segmentación kulpo. Ĉar scanf ne tuj scii, ke Mi fakte ne metis adreson ene de s. Pli ĝuste, ĝi tuj vidi ian valoron en s, iuj similajxon de bitoj kiuj povas tre bone esti rubo valoro, tie nur hazardo. Kaj scanf ankoraŭ provos skribi la uzanto kordo al tiu adreso, eĉ se ĝi estas rubo valoro, kiun povus ja indukti kraŝo. Do kiel ni ripari tion?