SPEAKER 1: Kirjoitetaan ohjelma, joka saa merkkijonon käyttäjä ilman käyttäen CS50 kirjaston toimiakseen getString. Voit tehdä tämän, me menemme eteenpäin ja käyttää scanf, toiminto, joka getString toiminto itse asiassa käyttää alla huppu. Mutta aion tehdä tämän tarkoituksella in buginen tavalla. Aion tehdä tavalla, joka mielestäni olisi oikea, mutta käy ilmi, että oletan tulee olla varsin, varsin puutteellinen. Ja itse asiassa aika vaarallista. Koska vikoja jollainen olen aikeissa Merkki voidaan hyödyntää vastustajien siten, että koneesi tai ohjelmaan voidaan hyväksyä mahdollisesti. Aloitetaan seuraavasti. Katsotaanpa ensin julistamme merkkijono, joka tunnetaan nyt char tähti, ja kutsua sitä s. Lets vieressä pyytää käyttäjältä merkkijonon, kuten "merkkijono kiitos." Ja Katsotaanpa nyt saada merkkijonon käyttäjä käyttäen scanf, lainaus lainaus, "% s." Sisään Toisin sanoen, nyt ilmoittaa scanf että me eivät itse asiassa odottaa saavansa merkkijono käyttäjältä. Mutta nyt meidän täytyy kertoa scanf yksi muu asia - mihin merkkijono, joka käyttäjä antaa. No, aion yksinkertaisesti aloittaa pilkulla s, täsmennetään, että haluaisin scanf laittaa merkkijonon siellä. Olen vieressä menossa tulostaa jotain kuten printf "kiitos% s kenoviiva n pilkku. "Ja kuten aina, olen menossa ohi merkkijonon, s. Nyt tallentaa, kääntää ja ajaa tämän ohjelma, ja katso jos emme voi aiheuttaa ongelma minulla ennusti. Tee scanf-1. ./scanf-1. String kiitos. Katsotaanpa tarjota jotain, "Hei." "Kiitos null." Hmm, se ei ole mitä odotin. Joten mitä täällä tapahtuu? No, se kääntyy pois, koska me julisti s char tähden mutta emme tosiasiallisesti varastoitu s osoite todellinen kimpale muisti, scanf ei ole paikkaa laittaa merkkijonon että käyttäjän kirjoitetaan sisään Itse asiassa, jos käyttäjä oli nyt kirjoittaa paljon pidempi merkkijono kuin "hei" esimerkiksi useita rivejä tekstiä tai useita kappaleita tekstiä, se on melko mahdollista, että voisimme aiheuttaa ns segmentointi vika. Koska scanf ei tule tietää, että En ole itse laittaa osoitteen sisällä s. Pikemminkin se tulee nähdä jotain arvoa s, jotkut malli bittien voi hyvinkin olla roskat arvo, siellä vain sattumalta. Ja scanf on vielä menossa yrittää kirjoittaa Käyttäjä merkkijono kyseiseen osoitteeseen, vaikka se on roskaa arvo, joka voisi todellakin aiheuttaa kaatumisen. Joten miten aiomme korjata tämän?