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 Да го направите ова, ние ќе одиме напред и да го користите scanf, функцијата што 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 ајде сега да добијат низа од корисникот користење scanf, цитат unquote "% s." Во 17 00:00:44,250 --> 00:00:47,760 Со други зборови, да го извести scanf дека ние се всушност очекувате да добиете низа 18 00:00:47,760 --> 00:00:48,630 од корисникот. 19 00:00:48,630 --> 00:00:50,810 >> Но сега ние треба да се каже scanf една друга работа - 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 scanf да се стави на низа таму. 23 00:00:59,320 --> 00:01:04,818 Јас сум следната случува да се печати од нешто како printf "Ви благодариме за% s 24 00:01:04,818 --> 00:01:10,670 обратна коса црта n запирка. "И како и секогаш, јас сум ќе помине во низа, с. 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 >> Па, излегува, бидејќи ние прогласи s како знак ѕвезда, но ние не сме 34 00:01:32,040 --> 00:01:36,120 всушност се чуваат во ОК адресата на некоја вистински парче на меморија, scanf не го 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 >> Бидејќи scanf нема да знаете дека Не сум всушност се стави адреса 40 00:01:53,570 --> 00:01:54,610 внатрешноста на s. 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 И scanf се уште се случува да се обидат да се напише корисникот низа на таа адреса, 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