ZVUČNIK 1: Idemo napisati program koji dobiva niz od korisnika bez korištenjem CS50 knjižnice funkcionirati GetString. Da biste to učinili, mi ćemo ići naprijed i koristiti scanf, funkcija koja GetString funkcija zapravo koristi ispod poklopca motora. Ali ja ću to učiniti namjerno u buggy način. Ja ću učiniti na način da mislim će biti u pravu, ali ispada da je moja pretpostavka je da će biti vrlo, vrlo manjkav. A u stvari, vrlo opasni. Zbog greške poput onog što sam o to da može biti iskorišten od strane protivnika kao da je vaš stroj ili vaš program može se preuzeti potencijalno. Počnimo na sljedeći način. Prvo ćemo proglasiti našu niz, inače sada poznat kao char zvijezda, i pozvati ga je. Omogućuje pored brz korisnik za niz, što je s "nizom molim." I idemo sada dobiti niz od korisnika pomoću scanf, citat završiti citat, "% s." U Drugim riječima, neka je obavijestiti scanf tome što mi to je u stvari očekivati ​​da će dobiti niz od korisnika. Ali sada moramo reći scanf jedna druga stvar - gdje staviti niz koji Korisnik pruža. Pa, ja ću jednostavno početi s zarez a, navodeći da bih scanf staviti string postoji. Ja sam sljedeći će se ispisati nešto kao printf "hvala za% s backslash n zarez. "I kao i uvijek, ja sam će proći u nizu, S. Sada ćemo uštedjeti, sastaviti i pokrenuti ovaj Program, i vidjeti ako mi ne može izazvati Problem sam predvidio. Provjerite scanf-1. ./scanf-1. String molimo. Idemo dati nešto poput "Zdravo." "Hvala na nulu." Hmm, to nije ono što sam očekivao. Dakle, ono što se ovdje događa? Pa, ispada jer smo proglasili e kao char zvijezda, ali nismo zapravo pohranjeni u e adresu Stvarni komad memorije, scanf nije imala gdje staviti uzicu da korisnik unese Doista, ako je korisnik bila bi sad upisati mnogo dulje nego string "Hello" za primjer nekoliko redaka teksta ili nekoliko paragrafa teksta, to je sasvim moguće da smo mogli izazvati Takozvani segmentacije kriv. Zbog scanf neće znati da je Nisam zapravo staviti adresu unutar s.. Umjesto toga, to će se vidjeti neke vrijednosti u S, neki uzorak bitova koji mogu vrlo dobro se vrijednost smeća, postoji samo slučajno. I scanf dalje će pokušati napisati Korisnik string na tu adresu, čak i ako je vrijednost smeće, koje doista mogao izazvati sudar. Pa kako ćemo to popraviti?