SIARADWR 1: Dewch i ysgrifennu rhaglen sy'n cael llinyn gan y defnyddiwr heb ddefnyddio'r Llyfrgell CS50 yn weithredu'n GetString. I wneud hyn, byddwn yn mynd yn ei flaen ac yn defnyddio scanf, y swyddogaeth y mae'r GetString swyddogaeth yn defnyddio mewn gwirionedd o dan y cwfl. Ond dw i'n mynd i wneud hyn yn fwriadol mewn ffordd bygi. Dw i'n mynd i wneud mewn ffordd yr wyf yn meddwl Byddai fod yn iawn, ond mae'n troi allan bod fy rhagdybiaeth yn mynd i fod yn eithaf, yn eithaf ddiffygiol. Ac yn wir, yn eithaf peryglus. Oherwydd bod bugs fel yr un rwy'n ar fin sicrhau y gall gael eu hecsbloetio gan gwrthwynebwyr fel bod eich peiriant neu eich rhaglen gellir eu cymryd drosodd o bosibl. Gadewch i ni ddechrau fel a ganlyn. Yn gyntaf gadewch i ni ddatgan ein llinyn, a elwir fel arall bellach yn seren torgoch, a galw mae'n s. Dewch i nesaf annog y defnyddiwr ar gyfer llinyn, fel gyda "llinyn gwelwch yn dda." A gadewch i ni yn awr yn cael y llinyn gan y defnyddiwr ddefnyddio scanf, dyfynnwch unquote, "% s." Yn geiriau eraill, gadewch i ni roi gwybod scanf ein bod yn mewn gwirionedd yn disgwyl i gael llinyn gan y defnyddiwr. Ond yn awr mae angen i ni ddweud wrth scanf un peth arall - ble i roi'r llinyn y y defnyddiwr yn eu darparu. Wel, dw i'n mynd i yn syml iawn yn dechrau gyda choma s, gan nodi y byddwn i'n hoffi scanf i roi'r llinyn yno. Rydw i'n nesaf yn mynd i argraffu rhywbeth fel printf "diolch am y% s slaes n coma. "Ac fel bob amser, rwy'n mynd i basio yn y llinyn, s. Nawr, gadewch i ni arbed, crynhoi, ac yn rhedeg y rhaglen, a gweld os na allwn achosi y broblem roeddwn yn rhagweld. Gwneud scanf-1. ./scanf-1. Llinynnol gwelwch yn dda. Gadewch i ni roi rhywbeth fel, "helo." "Diolch am y null." Hmm, nid yw hynny'n yr hyn yr wyf yn ei ddisgwyl. Felly, beth sy'n digwydd yma? Wel, mae'n troi allan oherwydd ein bod yn datgan s fel seren torgoch, ond ni wnaethom storio mewn gwirionedd yn y cyfeiriad o darn gwirioneddol y cof, nid oedd scanf rhaid i unrhyw le i roi'r llinyn bod y defnyddiwr deipio i mewn Yn wir, os bydd y defnyddiwr yn teipio yn awr llinyn llawer hirach na "helo," er enghraifft nifer o linellau o destun neu sawl paragraff o destun, mae'n eithaf bosibl y gallem gymell hyn a elwir yn wall. Gan nad scanf yn mynd i wybod bod Nid wyf mewn gwirionedd wedi rhoi cyfeiriad tu mewn s. Yn hytrach, mae'n mynd i weld rhywfaint o werth mewn s, mae rhai batrwm o ddarnau a all yn dda iawn fod yn werth garbage, yno yn unig ar hap. Ac scanf yn dal yn mynd i geisio ysgrifennu y llinyn defnyddiwr i'r cyfeiriad hwnnw, hyd yn oed os yw'n werth garbage, a oedd yn Gallai yn wir achosi damwain. Felly, sut yr ydym yn mynd i atgyweiria hon?