SPEAKER 1: Oletame, kirjutada programm, mis saab string kasutaja ilma kasutades CS50 Raamatukogu toimida getString. Et seda teha, siis me minna ja kasutada scanf funktsioon, et getString funktsioon tegelikult kasutab all kapuuts. Aga ma teen seda tahtlikult aastal lollakas viisil. Ma teen nii, et ma arvan, et oleks õige, kuid selgub, et minu oletus läheb üsna, üsna puudulik. Ja tõepoolest, üsna ohtlik. Sest vigu nagu ma olen umbes teha saab ära kasutada vastaste nii, et teie masin või oma programmi võib võtta kui potentsiaalset. Alustame järgnevalt. Esiteks olgem tunnistada meie string, muidu tuntud nüüd char star, ja nimetavad seda s. Lets järgmine kiire kasutaja jaoks string, Nagu "string palun." Ja olgem nüüd saan stringi kasutaja kasutades scanf, tsitaat lõppeb, "% s." Sisse Teisisõnu, olgem teatama scanf et me ei tegelikult oodata, et saada string kasutaja. Aga nüüd peame ütlema scanf üks asi - kuhu panna stringi kasutaja näeb. Noh, ma lähen lihtsalt alustada komadega s, täpsustades, et ma tahaks scanf panna string seal. Ma järgmine läheb välja trükkida midagi nagu printf "thanks for% s kurakriips n koma. "Ja nagu alati, ma olen läheb edasi stringi, s. Nüüd salvestada, kompileerida ja käivitada programmi, ja vaata, kui me ei saa esile kutsuda probleem ma ennustasin. Tee scanf-1. ./scanf-1. String palun. Anname midagi, "tere". "Aitäh null." Hmm, see ei ole mida ma ootasin. Mis siis siin toimub? Noh, tuli välja, sest me kuulutasime s kui char star kuid me ei tegelikult salvestatud s aadress tegelik tüki mälu, scanf ei on kuhugi panna string et kasutaja sisestatud sisse Tõepoolest, kui kasutaja oli nüüd kirjuta palju pikem string kui "tere" näiteks mitu rida teksti või mitu lõiku teksti, see on üsna Võimalik, et me võiksime kutsuda esile nn killustatust süü. Kuna scanf ei kavatse teame, et Ma ei ole tegelikult panna aadress sees s. Pigem see läheb, et näha mõned raha s, mõned muster bitti, mis võivad väga hästi olla prügi väärtus, seal lihtsalt juhus. Ja scanf ikka üritan kirjutada kasutaja string sellele aadressile, isegi kui see on prügi väärtus, mis võib tõepoolest esile kutsuda crash. Niisiis, kuidas me saame seda parandada?