SPEAKER 1: Írjunk egy programot, amely kap egy karakterláncot a felhasználó anélkül, hogy a CS50 Könyvtár funkció getString. Ehhez, akkor megy előre, és használja scanf, a funkció, hogy a getString funkció ténylegesen használja a motorháztető alatt. De én ezt tudatosan egy hibás módon. Fogok tenni oly módon, hogy azt hiszem, lenne helyes, de kiderül, hogy a Feltételezésem fog elég, elég hibás. És valóban, elég veszélyes. Mivel a hibák, mint az egyik én vagyok arról, hogy hogy kihasználva ellenfelek úgy, hogy a gép, vagy a programban átvehető lehetséges. Kezdjük az alábbiak szerint. Először nézzük kinyilvánítjuk húr, más néven most, mint egy char csillag, és hívja meg s. Lehetővé teszi, hogy a következő kéri a felhasználótól egy string, mint a "karakterlánc kérem." És nézzük most, hogy a húr a felhasználó a scanf, idézet idézet vége, "% s". -Ben Más szóval, most tájékoztatni scanf, hogy mi rendelkezései valóban számíthat arra, hogy a szöveg a felhasználó elől. De most meg kell mondani scanf egy másik dolog - hová tegye a húr, hogy a felhasználó megadja. Nos, én fogok egész egyszerűen elkezd vesszővel s, meghatározva, hogy szeretnék scanf, hogy a húr is. Én vagyok a következő lesz, hogy nyomtassa ki valamit mint a printf "köszönet a% s backslash n vessző. "És mint mindig, én vagyok majd át a húr, s. Most menteni, fordítsd, és futtassa ezt programot, hátha nem indukál A probléma, amit előre. Legyen scanf-1. ./scanf-1. Karakterlánc kérem. Nézzük hogy valami ilyesmit: "helló". "Köszönöm a null." Hmm, ez nem amit vártam. Szóval, mi folyik itt? Nos, kiderült, hogy azért, mert kijelentette, s mint a char csillag, de mi nem ténylegesen tárolt s címét egy tényleges darab memória, scanf nem sehol, hogy a húr hogy a felhasználó be beírt Valóban, ha a felhasználó volt, hogy már írja be sokkal hosszabb sor, mint a "Hello" például több sornyi szöveget vagy több bekezdésnyi szöveget, elég Lehetséges, hogy talán rábírja a úgynevezett szegmentációs hiba. Mivel a scanf nem fogja tudni, hogy Én valójában nem tesz címet belsejében s. Inkább ez fog látni bizonyos értéket A s néhány minta a bitek, amelyek nagyon jól lehet a szemetet értéket, ott csak véletlenül. És scanf még megpróbálom írni a felhasználó karakterlánc arra a címre, akkor is, ha ez egy szemét értéket, amely ami valóban indukál egy baleset. Szóval, hogyan fogjuk megoldani ezt?