Выступоўца 1: Давайце напішам праграму, якая атрымлівае радок ад карыстальніка без выкарыстоўваючы CS50 бібліятэкі функцыянаваць GetString. Каб зрабіць гэта, мы будзем ісці наперад і выкарыстоўваць зсапЕ, функцыя, што GetString Функцыя фактычна выкарыстоўвае пад капотам. Але я збіраюся зрабіць гэта наўмысна у багі чынам. Я збіраюся зрабіць такім чынам, што я думаю, было б правільна, але аказваецца, што мая здагадка збіраецца быць зусім, зусім памылковым. І на самай справе, даволі небяспечна. Таму што памылкі, падобныя на тую, я збіраюся зрабіць можа быць выкарыстана супернікамі такім чынам, каб ваша машына ці ваша праграма могуць быць узятыя на патэнцыйна. Давайце пачнем ў наступным. Перш за ўсё, давайце абвясціць нашу радок, інакш вядомы зараз як сЬаг зоркі, і выклікаць яго з. Давайце наступны запытваць у карыстальніка радок, як з "радкі калі ласка." І давайце зараз атрымаць радок ад карыстальніка выкарыстоўваючы зсапЕ, цытую канец цытаты, "% ы". У Іншымі словамі, давайце інфармаваць зсапЕ гэтага мы у на самай справе чакаць, каб атрымаць радок ад карыстальніка. Але цяпер мы павінны сказаць зсапЕ яшчэ адна рэч - дзе паставіць радок, карыстач падае. Ну, я збіраюся проста-проста пачаць з коскі с, удакладніўшы, што я хацеў бы зсапЕ змесціце радок там. Я побач збіраюся раздрукаваць нешта як Е "дзякуй за% з касая рыса п коска. "І, як заўсёды, я збіраецца прайсці ў радку, с. Зараз давайце захаваць, скампіляваць і запусціць гэты Праграма, і паглядзець, калі мы не можам выклікаць праблема, якую я прадказаў. Зрабіць SCANF-1. ./scanf-1. Радок калі ласка. Давайце даць нешта накшталт, "прывітанне". "Дзякуй за нуль". Хм, гэта не што я чакаў. Дык што ж тут адбываецца? Ну, аказваецца, таму, што мы абвясцілі з як сЬаг зоркі, але мы не зрабілі на самай справе захоўваецца ў ы адрас фактычная частка памяці, зсапЕ не зрабіў няма дзе паставіць радок што карыстач увёў цалі Сапраўды, калі карыстач у цяперашні час увесці значна даўжэй, чым радок "прывітанне", напрыклад некалькі радкоў тэксту або некалькі абзацаў тэксту, гэта даволі Магчыма, што мы маглі б выклікаць так званая сегментацыя віна. Таму зсапЕ не будзе ведаць, што Я фактычна не пакласці адрас ўнутры з. Хутчэй, гэта будзе ўбачыць некаторы значэнне у з, некаторыя карціны з бітаў, якія могуць вельмі добра мець значэнне смецця, там проста выпадкова. І зсапЕ па-ранейшаму будзе спрабаваць пісаць карыстальнік радок па гэтым адрасе, нават калі гэта значэнне смецце, які сапраўды можа выклікаць аварыю. Так як мы збіраемся гэта выправіць?