1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> Выступоўца 1: Давайце напішам праграму, якая атрымлівае радок ад карыстальніка без 3 00:00:02,920 --> 00:00:05,700 выкарыстоўваючы CS50 бібліятэкі функцыянаваць GetString. 4 00:00:05,700 --> 00:00:08,720 Каб зрабіць гэта, мы будзем ісці наперад і выкарыстоўваць зсапЕ, функцыя, што GetString 5 00:00:08,720 --> 00:00:10,950 Функцыя фактычна выкарыстоўвае пад капотам. 6 00:00:10,950 --> 00:00:13,780 Але я збіраюся зрабіць гэта наўмысна у багі чынам. 7 00:00:13,780 --> 00:00:17,230 Я збіраюся зрабіць такім чынам, што я думаю, было б правільна, але аказваецца, што 8 00:00:17,230 --> 00:00:19,380 мая здагадка збіраецца быць зусім, зусім памылковым. 9 00:00:19,380 --> 00:00:20,800 І на самай справе, даволі небяспечна. 10 00:00:20,800 --> 00:00:24,750 Таму што памылкі, падобныя на тую, я збіраюся зрабіць можа быць выкарыстана супернікамі 11 00:00:24,750 --> 00:00:28,870 такім чынам, каб ваша машына ці ваша праграма могуць быць узятыя на патэнцыйна. 12 00:00:28,870 --> 00:00:30,200 >> Давайце пачнем ў наступным. 13 00:00:30,200 --> 00:00:33,540 Перш за ўсё, давайце абвясціць нашу радок, інакш вядомы зараз як сЬаг зоркі, 14 00:00:33,540 --> 00:00:34,750 і выклікаць яго з. 15 00:00:34,750 --> 00:00:39,400 Давайце наступны запытваць у карыстальніка радок, як з "радкі калі ласка." І 16 00:00:39,400 --> 00:00:44,250 давайце зараз атрымаць радок ад карыстальніка выкарыстоўваючы зсапЕ, цытую канец цытаты, "% ы". У 17 00:00:44,250 --> 00:00:47,760 Іншымі словамі, давайце інфармаваць зсапЕ гэтага мы у на самай справе чакаць, каб атрымаць радок 18 00:00:47,760 --> 00:00:48,630 ад карыстальніка. 19 00:00:48,630 --> 00:00:50,810 >> Але цяпер мы павінны сказаць зсапЕ яшчэ адна рэч - 20 00:00:50,810 --> 00:00:53,350 дзе паставіць радок, карыстач падае. 21 00:00:53,350 --> 00:00:57,840 Ну, я збіраюся проста-проста пачаць з коскі с, удакладніўшы, што я хацеў бы 22 00:00:57,840 --> 00:00:59,320 зсапЕ змесціце радок там. 23 00:00:59,320 --> 00:01:04,818 Я побач збіраюся раздрукаваць нешта як Е "дзякуй за% з 24 00:01:04,818 --> 00:01:10,670 касая рыса п коска. "І, як заўсёды, я збіраецца прайсці ў радку, с. 25 00:01:10,670 --> 00:01:14,920 Зараз давайце захаваць, скампіляваць і запусціць гэты Праграма, і паглядзець, калі мы не можам выклікаць 26 00:01:14,920 --> 00:01:16,590 праблема, якую я прадказаў. 27 00:01:16,590 --> 00:01:18,650 >> Зрабіць SCANF-1. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 Радок калі ласка. 30 00:01:21,830 --> 00:01:25,540 Давайце даць нешта накшталт, "прывітанне". "Дзякуй за нуль". Хм, гэта не 31 00:01:25,540 --> 00:01:26,750 што я чакаў. 32 00:01:26,750 --> 00:01:28,240 Дык што ж тут адбываецца? 33 00:01:28,240 --> 00:01:32,040 >> Ну, аказваецца, таму, што мы абвясцілі з як сЬаг зоркі, але мы не зрабілі 34 00:01:32,040 --> 00:01:36,120 на самай справе захоўваецца ў ы адрас фактычная частка памяці, зсапЕ не зрабіў 35 00:01:36,120 --> 00:01:38,940 няма дзе паставіць радок што карыстач увёў цалі 36 00:01:38,940 --> 00:01:42,510 Сапраўды, калі карыстач у цяперашні час увесці значна даўжэй, чым радок "прывітанне", 37 00:01:42,510 --> 00:01:46,780 напрыклад некалькі радкоў тэксту або некалькі абзацаў тэксту, гэта даволі 38 00:01:46,780 --> 00:01:50,280 Магчыма, што мы маглі б выклікаць так званая сегментацыя віна. 39 00:01:50,280 --> 00:01:53,570 >> Таму зсапЕ не будзе ведаць, што Я фактычна не пакласці адрас 40 00:01:53,570 --> 00:01:54,610 ўнутры з. 41 00:01:54,610 --> 00:01:58,000 Хутчэй, гэта будзе ўбачыць некаторы значэнне у з, некаторыя карціны з бітаў, якія могуць 42 00:01:58,000 --> 00:02:00,910 вельмі добра мець значэнне смецця, там проста выпадкова. 43 00:02:00,910 --> 00:02:04,600 І зсапЕ па-ранейшаму будзе спрабаваць пісаць карыстальнік радок па гэтым адрасе, 44 00:02:04,600 --> 00:02:08,789 нават калі гэта значэнне смецце, які сапраўды можа выклікаць аварыю. 45 00:02:08,789 --> 00:02:10,130 >> Так як мы збіраемся гэта выправіць? 46 00:02:10,130 --> 00:02:12,523