1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> SIARADWR 1: Dewch i ysgrifennu rhaglen sy'n cael llinyn gan y defnyddiwr heb 3 00:00:02,920 --> 00:00:05,700 ddefnyddio'r Llyfrgell CS50 yn weithredu'n GetString. 4 00:00:05,700 --> 00:00:08,720 I wneud hyn, byddwn yn mynd yn ei flaen ac yn defnyddio scanf, y swyddogaeth y mae'r GetString 5 00:00:08,720 --> 00:00:10,950 swyddogaeth yn defnyddio mewn gwirionedd o dan y cwfl. 6 00:00:10,950 --> 00:00:13,780 Ond dw i'n mynd i wneud hyn yn fwriadol mewn ffordd bygi. 7 00:00:13,780 --> 00:00:17,230 Dw i'n mynd i wneud mewn ffordd yr wyf yn meddwl Byddai fod yn iawn, ond mae'n troi allan bod 8 00:00:17,230 --> 00:00:19,380 fy rhagdybiaeth yn mynd i fod yn eithaf, yn eithaf ddiffygiol. 9 00:00:19,380 --> 00:00:20,800 Ac yn wir, yn eithaf peryglus. 10 00:00:20,800 --> 00:00:24,750 Oherwydd bod bugs fel yr un rwy'n ar fin sicrhau y gall gael eu hecsbloetio gan gwrthwynebwyr 11 00:00:24,750 --> 00:00:28,870 fel bod eich peiriant neu eich rhaglen gellir eu cymryd drosodd o bosibl. 12 00:00:28,870 --> 00:00:30,200 >> Gadewch i ni ddechrau fel a ganlyn. 13 00:00:30,200 --> 00:00:33,540 Yn gyntaf gadewch i ni ddatgan ein llinyn, a elwir fel arall bellach yn seren torgoch, 14 00:00:33,540 --> 00:00:34,750 a galw mae'n s. 15 00:00:34,750 --> 00:00:39,400 Dewch i nesaf annog y defnyddiwr ar gyfer llinyn, fel gyda "llinyn gwelwch yn dda." A 16 00:00:39,400 --> 00:00:44,250 gadewch i ni yn awr yn cael y llinyn gan y defnyddiwr ddefnyddio scanf, dyfynnwch unquote, "% s." Yn 17 00:00:44,250 --> 00:00:47,760 geiriau eraill, gadewch i ni roi gwybod scanf ein bod yn mewn gwirionedd yn disgwyl i gael llinyn 18 00:00:47,760 --> 00:00:48,630 gan y defnyddiwr. 19 00:00:48,630 --> 00:00:50,810 >> Ond yn awr mae angen i ni ddweud wrth scanf un peth arall - 20 00:00:50,810 --> 00:00:53,350 ble i roi'r llinyn y y defnyddiwr yn eu darparu. 21 00:00:53,350 --> 00:00:57,840 Wel, dw i'n mynd i yn syml iawn yn dechrau gyda choma s, gan nodi y byddwn i'n hoffi 22 00:00:57,840 --> 00:00:59,320 scanf i roi'r llinyn yno. 23 00:00:59,320 --> 00:01:04,818 Rydw i'n nesaf yn mynd i argraffu rhywbeth fel printf "diolch am y% s 24 00:01:04,818 --> 00:01:10,670 slaes n coma. "Ac fel bob amser, rwy'n mynd i basio yn y llinyn, s. 25 00:01:10,670 --> 00:01:14,920 Nawr, gadewch i ni arbed, crynhoi, ac yn rhedeg y rhaglen, a gweld os na allwn achosi 26 00:01:14,920 --> 00:01:16,590 y broblem roeddwn yn rhagweld. 27 00:01:16,590 --> 00:01:18,650 >> Gwneud scanf-1. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 Llinynnol gwelwch yn dda. 30 00:01:21,830 --> 00:01:25,540 Gadewch i ni roi rhywbeth fel, "helo." "Diolch am y null." Hmm, nid yw hynny'n 31 00:01:25,540 --> 00:01:26,750 yr hyn yr wyf yn ei ddisgwyl. 32 00:01:26,750 --> 00:01:28,240 Felly, beth sy'n digwydd yma? 33 00:01:28,240 --> 00:01:32,040 >> Wel, mae'n troi allan oherwydd ein bod yn datgan s fel seren torgoch, ond ni wnaethom 34 00:01:32,040 --> 00:01:36,120 storio mewn gwirionedd yn y cyfeiriad o darn gwirioneddol y cof, nid oedd scanf 35 00:01:36,120 --> 00:01:38,940 rhaid i unrhyw le i roi'r llinyn bod y defnyddiwr deipio i mewn 36 00:01:38,940 --> 00:01:42,510 Yn wir, os bydd y defnyddiwr yn teipio yn awr llinyn llawer hirach na "helo," 37 00:01:42,510 --> 00:01:46,780 er enghraifft nifer o linellau o destun neu sawl paragraff o destun, mae'n eithaf 38 00:01:46,780 --> 00:01:50,280 bosibl y gallem gymell hyn a elwir yn wall. 39 00:01:50,280 --> 00:01:53,570 >> Gan nad scanf yn mynd i wybod bod Nid wyf mewn gwirionedd wedi rhoi cyfeiriad 40 00:01:53,570 --> 00:01:54,610 tu mewn s. 41 00:01:54,610 --> 00:01:58,000 Yn hytrach, mae'n mynd i weld rhywfaint o werth mewn s, mae rhai batrwm o ddarnau a all 42 00:01:58,000 --> 00:02:00,910 yn dda iawn fod yn werth garbage, yno yn unig ar hap. 43 00:02:00,910 --> 00:02:04,600 Ac scanf yn dal yn mynd i geisio ysgrifennu y llinyn defnyddiwr i'r cyfeiriad hwnnw, 44 00:02:04,600 --> 00:02:08,789 hyd yn oed os yw'n werth garbage, a oedd yn Gallai yn wir achosi damwain. 45 00:02:08,789 --> 00:02:10,130 >> Felly, sut yr ydym yn mynd i atgyweiria hon? 46 00:02:10,130 --> 00:02:12,523