>> Ræðumaður 1: Við skulum skrifa forrit sem fær streng frá notanda án
nota CS50 safnsins virka GetString.
Til að gera þetta, munum við fara á undan og nota scanf, sem virka sem GetString
virka í raun notar undir hetta.
En ég ætla að gera þetta vísvitandi í buggy hátt.
Ég ætla að gera á þann hátt að ég held væri rétt, en það kemur í ljós að
forsenda mín er að fara að vera alveg, alveg gölluð.
Og í raun, mjög hættulegt.
Vegna galla eins og það sem ég ætla að fara að gera má nýta með andstæðinga
þannig að vélin þín eða forrit má taka yfir hugsanlega.
>> Skulum byrja sem hér segir.
Fyrst skulum lýsa band okkar, annars þekkt nú sem bleikju stjarna,
og kalla það er.
Lets næst hvetja notandann á streng, Eins og með "band takk." Og
við skulum nú fá band frá notanda nota scanf, vitna unquote, "% s." Í
Með öðrum orðum, við skulum láta scanf að við ekki í raun búist við að fá a band
frá notandanum.
>> En nú þurfum við að segja scanf einn annar hlutur -
hvar á að setja streng notandinn gefur.
Jæja, ég ætla að einfaldlega að byrja með kommu s, tilgreina sem mig langar
scanf að setja band þar.
Ég ætla næst að fara að prenta út eitthvað eins printf "takk fyrir% s
sviga n kommu. "Og eins og alltaf, ég er að fara að fara í band, s.
Nú skulum spara, safna saman og keyra þetta program, og sjá hvort við getum ekki valdið
Vandamálið sem ég spáði.
>> Gerðu Scanf-1.
./scanf-1.
Band takk.
Skulum veita eitthvað eins og: "Halló." "Takk fyrir null." Hmm, það er ekki
það sem ég átti von á.
Svo hvað er að gerast hér?
>> Jæja, það kemur í ljós vegna þess að við lýst s sem bleikju stjarna en við gerðum ekki
í raun geymdar í s veffang Raunveruleg klumpur af minni, scanf gerði ekki
hafa einhvers staðar að setja band að notandinn slegið inn
Reyndar, ef notandi var að nú gerð í mun lengri streng en "halló,"
til dæmis nokkrar línur af texta eða nokkrir málsgreinar í texta, það er alveg
mögulegt að við gætum vekja svokallaða skiptingu kenna.
>> Vegna scanf er ekki að fara að vita að Ég hef reyndar ekki sett inn heimilisfang
inni s.
Frekar, það er að fara að sjá nokkrar gildi í s, sumir mynstri bitar sem geta
mjög vel að vera sorp gildi, það bara við tækifæri.
Og scanf er enn að fara að reyna að skrifa notandi band á þetta netfang,
jafnvel ef það er sorp gildi, sem gæti örugglega valdið hrun.
>> Svo hvernig eigum við að fara að laga þetta?