1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> SPIKA 1: Hebu kuandika mpango huo anapata kamba kutoka kwa mtumiaji bila 3 00:00:02,920 --> 00:00:05,700 kutumia CS50 Library kazi GetString. 4 00:00:05,700 --> 00:00:08,720 Kwa kufanya hivyo, tutaweza kwenda mbele na kutumia scanf, kazi ambayo GetString 5 00:00:08,720 --> 00:00:10,950 kazi kweli anatumia chini ya kofia. 6 00:00:10,950 --> 00:00:13,780 Lakini mimi nina kwenda kufanya hili kwa makusudi katika buggy njia. 7 00:00:13,780 --> 00:00:17,230 Mimi nina kwenda kufanya katika njia ambayo nadhani itakuwa haki, lakini zinageuka kuwa 8 00:00:17,230 --> 00:00:19,380 dhana yangu kwenda kabisa, kabisa kiujanja. 9 00:00:19,380 --> 00:00:20,800 Na kwa kweli, hatari kabisa. 10 00:00:20,800 --> 00:00:24,750 Kwa sababu mende kama moja mimi nina kuhusu kufanya inaweza kutumiwa na wapinzani 11 00:00:24,750 --> 00:00:28,870 kama kwamba mashine yako au mpango wako inaweza kuchukuliwa juu ya uwezekano. 12 00:00:28,870 --> 00:00:30,200 >> Hebu tuanze kama ifuatavyo. 13 00:00:30,200 --> 00:00:33,540 Kwanza hebu kutangaza kamba yetu, inayojulikana sasa kama nyota char, 14 00:00:33,540 --> 00:00:34,750 na kuiita s. 15 00:00:34,750 --> 00:00:39,400 Hebu ijayo haraka user kwa kamba, kama na "kamba tafadhali." Na 16 00:00:39,400 --> 00:00:44,250 hebu sasa kupata kamba kutoka kwa mtumiaji kutumia scanf, unquote quote, "% s." Katika 17 00:00:44,250 --> 00:00:47,760 maneno mengine, hebu kuwajulisha scanf kwamba sisi wala kwa kweli kutarajia kupata string 18 00:00:47,760 --> 00:00:48,630 kutoka kwa mtumiaji. 19 00:00:48,630 --> 00:00:50,810 >> Lakini sasa tunahitaji kuwaambia scanf nyingine jambo moja - 20 00:00:50,810 --> 00:00:53,350 mahali pa kuweka kamba kwamba user hutoa. 21 00:00:53,350 --> 00:00:57,840 Naam, mimi nina kwenda kabisa tu kuanza na comma s, inayobainisha kwamba Ningependa 22 00:00:57,840 --> 00:00:59,320 scanf kuweka kamba huko. 23 00:00:59,320 --> 00:01:04,818 Mimi nina ijayo kwenda magazeti nje kitu kama printf "shukrani kwa% s 24 00:01:04,818 --> 00:01:10,670 backslash n comma. "Na kama siku zote, mimi nina kwenda kupita katika kamba, s. 25 00:01:10,670 --> 00:01:14,920 Sasa hebu kuokoa, kukusanya, na kukimbia hii mpango, na kuona kama tunaweza si kutumika 26 00:01:14,920 --> 00:01:16,590 tatizo mimi alikadiria. 27 00:01:16,590 --> 00:01:18,650 >> Kufanya scanf-1. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 Kamba tafadhali. 30 00:01:21,830 --> 00:01:25,540 Hebu kutoa kitu kama, "hello." "Asante kwa null." Hmm, si kwamba 31 00:01:25,540 --> 00:01:26,750 nini nilikuwa kutarajia. 32 00:01:26,750 --> 00:01:28,240 Hivyo nini kinaendelea hapa? 33 00:01:28,240 --> 00:01:32,040 >> Naam, ni zamu nje kwa sababu sisi alitangaza s kama nyota char lakini hatukuwa 34 00:01:32,040 --> 00:01:36,120 kweli kuhifadhiwa s katika barua pepe ya chunk halisi ya kumbukumbu, scanf hakuwa 35 00:01:36,120 --> 00:01:38,940 mahali popote kuweka kamba kwamba mtumiaji typed in 36 00:01:38,940 --> 00:01:42,510 Hakika, kama user walikuwa sasa aina katika kamba muda mrefu zaidi kuliko "hello," 37 00:01:42,510 --> 00:01:46,780 kwa mfano mistari kadhaa ya maandishi au aya kadhaa ya maandishi, ni kabisa 38 00:01:46,780 --> 00:01:50,280 iwezekanavyo ili tupate kutumika kinachojulikana segmentation kosa. 39 00:01:50,280 --> 00:01:53,570 >> Kwa sababu scanf si kwenda kujua kwamba Mimi si kweli kuweka anwani 40 00:01:53,570 --> 00:01:54,610 ndani ya s. 41 00:01:54,610 --> 00:01:58,000 Badala yake, kwenda kuona baadhi ya thamani katika s, mfano baadhi ya bits ambayo inaweza 42 00:01:58,000 --> 00:02:00,910 vizuri sana kuwa na thamani ya takataka, pale tu kwa bahati. 43 00:02:00,910 --> 00:02:04,600 Na scanf bado ni kwenda kujaribu kuandika kamba user kwa anwani hiyo, 44 00:02:04,600 --> 00:02:08,789 hata kama ni takataka thamani, ambayo inaweza kweli kutumika ajali. 45 00:02:08,789 --> 00:02:10,130 >> Hivyo ni jinsi sisi ni kwenda kutatua tatizo hili? 46 00:02:10,130 --> 00:02:12,523