1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> Ræðumaður 1: Við skulum skrifa forrit sem fær streng frá notanda án 3 00:00:02,920 --> 00:00:05,700 nota CS50 safnsins virka GetString. 4 00:00:05,700 --> 00:00:08,720 Til að gera þetta, munum við fara á undan og nota scanf, sem virka sem GetString 5 00:00:08,720 --> 00:00:10,950 virka í raun notar undir hetta. 6 00:00:10,950 --> 00:00:13,780 En ég ætla að gera þetta vísvitandi í buggy hátt. 7 00:00:13,780 --> 00:00:17,230 Ég ætla að gera á þann hátt að ég held væri rétt, en það kemur í ljós að 8 00:00:17,230 --> 00:00:19,380 forsenda mín er að fara að vera alveg, alveg gölluð. 9 00:00:19,380 --> 00:00:20,800 Og í raun, mjög hættulegt. 10 00:00:20,800 --> 00:00:24,750 Vegna galla eins og það sem ég ætla að fara að gera má nýta með andstæðinga 11 00:00:24,750 --> 00:00:28,870 þannig að vélin þín eða forrit má taka yfir hugsanlega. 12 00:00:28,870 --> 00:00:30,200 >> Skulum byrja sem hér segir. 13 00:00:30,200 --> 00:00:33,540 Fyrst skulum lýsa band okkar, annars þekkt nú sem bleikju stjarna, 14 00:00:33,540 --> 00:00:34,750 og kalla það er. 15 00:00:34,750 --> 00:00:39,400 Lets næst hvetja notandann á streng, Eins og með "band takk." Og 16 00:00:39,400 --> 00:00:44,250 við skulum nú fá band frá notanda nota scanf, vitna unquote, "% s." Í 17 00:00:44,250 --> 00:00:47,760 Með öðrum orðum, við skulum láta scanf að við ekki í raun búist við að fá a band 18 00:00:47,760 --> 00:00:48,630 frá notandanum. 19 00:00:48,630 --> 00:00:50,810 >> En nú þurfum við að segja scanf einn annar hlutur - 20 00:00:50,810 --> 00:00:53,350 hvar á að setja streng notandinn gefur. 21 00:00:53,350 --> 00:00:57,840 Jæja, ég ætla að einfaldlega að byrja með kommu s, tilgreina sem mig langar 22 00:00:57,840 --> 00:00:59,320 scanf að setja band þar. 23 00:00:59,320 --> 00:01:04,818 Ég ætla næst að fara að prenta út eitthvað eins printf "takk fyrir% s 24 00:01:04,818 --> 00:01:10,670 sviga n kommu. "Og eins og alltaf, ég er að fara að fara í band, s. 25 00:01:10,670 --> 00:01:14,920 Nú skulum spara, safna saman og keyra þetta program, og sjá hvort við getum ekki valdið 26 00:01:14,920 --> 00:01:16,590 Vandamálið sem ég spáði. 27 00:01:16,590 --> 00:01:18,650 >> Gerðu Scanf-1. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 Band takk. 30 00:01:21,830 --> 00:01:25,540 Skulum veita eitthvað eins og: "Halló." "Takk fyrir null." Hmm, það er ekki 31 00:01:25,540 --> 00:01:26,750 það sem ég átti von á. 32 00:01:26,750 --> 00:01:28,240 Svo hvað er að gerast hér? 33 00:01:28,240 --> 00:01:32,040 >> Jæja, það kemur í ljós vegna þess að við lýst s sem bleikju stjarna en við gerðum ekki 34 00:01:32,040 --> 00:01:36,120 í raun geymdar í s veffang Raunveruleg klumpur af minni, scanf gerði ekki 35 00:01:36,120 --> 00:01:38,940 hafa einhvers staðar að setja band að notandinn slegið inn 36 00:01:38,940 --> 00:01:42,510 Reyndar, ef notandi var að nú gerð í mun lengri streng en "halló," 37 00:01:42,510 --> 00:01:46,780 til dæmis nokkrar línur af texta eða nokkrir málsgreinar í texta, það er alveg 38 00:01:46,780 --> 00:01:50,280 mögulegt að við gætum vekja svokallaða skiptingu kenna. 39 00:01:50,280 --> 00:01:53,570 >> Vegna scanf er ekki að fara að vita að Ég hef reyndar ekki sett inn heimilisfang 40 00:01:53,570 --> 00:01:54,610 inni s. 41 00:01:54,610 --> 00:01:58,000 Frekar, það er að fara að sjá nokkrar gildi í s, sumir mynstri bitar sem geta 42 00:01:58,000 --> 00:02:00,910 mjög vel að vera sorp gildi, það bara við tækifæri. 43 00:02:00,910 --> 00:02:04,600 Og scanf er enn að fara að reyna að skrifa notandi band á þetta netfang, 44 00:02:04,600 --> 00:02:08,789 jafnvel ef það er sorp gildi, sem gæti örugglega valdið hrun. 45 00:02:08,789 --> 00:02:10,130 >> Svo hvernig eigum við að fara að laga þetta? 46 00:02:10,130 --> 00:02:12,523