1 00:00:00,000 --> 00:00:00,180 2 00:00:00,180 --> 00:00:02,920 >> HOPARLÖR 1: bir proqram yazmaq edək ki, olmadan istifadəçi bir string alır 3 00:00:02,920 --> 00:00:05,700 CS50 Kitabxana istifadə edərək GetString fəaliyyət göstərir. 4 00:00:05,700 --> 00:00:08,720 Bunu etmək üçün, biz irəliyə getmək və istifadə edəcəyik scanf, funksiyası ki GetString 5 00:00:08,720 --> 00:00:10,950 funksiyası həqiqətən istifadə edir başlıq altında. 6 00:00:10,950 --> 00:00:13,780 Amma qəsdən bunu gedirəm bir arabası şəkildə. 7 00:00:13,780 --> 00:00:17,230 Mən hesab edirəm ki, bir şəkildə etmək üçün gedirəm doğru ola bilər, lakin bu çıxır ki, 8 00:00:17,230 --> 00:00:19,380 mənim fərziyyə olacaq olduqca, olduqca qüsurlu olması. 9 00:00:19,380 --> 00:00:20,800 Və əslində, olduqca təhlükəli. 10 00:00:20,800 --> 00:00:24,750 Çünki haqqında Ben biri kimi bugs düşmənləri tərəfindən istismar edilə bilər etmək 11 00:00:24,750 --> 00:00:28,870 belə ki, sizin maşın və ya proqram potensial qəbul edilə bilər. 12 00:00:28,870 --> 00:00:30,200 >> Aşağıdakı kimi başlasın. 13 00:00:30,200 --> 00:00:33,540 Birinci bizim simli bəyan edək, başqa, bir char ulduz kimi indi məlum 14 00:00:33,540 --> 00:00:34,750 və s zəng. 15 00:00:34,750 --> 00:00:39,400 Növbəti bir simli üçün istifadəçi təklif imkan verir, "edin simli." ilə Və 16 00:00:39,400 --> 00:00:44,250 İndi istifadəçi simli almaq imkan dırnağı bağlamaq quote, "% s." scanf istifadə Ilə 17 00:00:44,250 --> 00:00:47,760 başqa sözlə, ki biz scanf məlumat imkan əslində bir string almaq üçün gözləmək yoxdur 18 00:00:47,760 --> 00:00:48,630 istifadəçi. 19 00:00:48,630 --> 00:00:50,810 >> Amma indi biz scanf demək lazımdır bir başqa şey - 20 00:00:50,810 --> 00:00:53,350 simli qoymaq harada ki, istifadəçi təmin edir. 21 00:00:53,350 --> 00:00:57,840 Bəli, mən sadəcə başlamaq üçün gedirəm vergül s, mən istərdim ki, ifadə ilə 22 00:00:57,840 --> 00:00:59,320 scanf orada string qoymaq üçün. 23 00:00:59,320 --> 00:01:04,818 Mən növbəti bir şey çap gedirəm Bu% s üçün printf "sayəsində kimi 24 00:01:04,818 --> 00:01:10,670 backslash n vergül. "Və həmişə olduğu kimi, mən simli, s keçmək gedir. 25 00:01:10,670 --> 00:01:14,920 İndi xilas edək tərtib və bu run biz edə bilməz, əgər proqram və görmək 26 00:01:14,920 --> 00:01:16,590 Bu problem I proqnozlaşdırılır. 27 00:01:16,590 --> 00:01:18,650 >> Scanf-1 olun. 28 00:01:18,650 --> 00:01:20,960 ./scanf-1. 29 00:01:20,960 --> 00:01:21,830 String edin. 30 00:01:21,830 --> 00:01:25,540 Nin kimi bir şey təmin edək "salam". "Null üçün təşəkkür edirik." Hmm, ki, deyil 31 00:01:25,540 --> 00:01:26,750 Mən gözləyirdim nə. 32 00:01:26,750 --> 00:01:28,240 Bəs burada olub? 33 00:01:28,240 --> 00:01:32,040 >> Biz bəyan çünki Bəli, bu çıxır s bir char ulduz kimi ancaq etmədik 34 00:01:32,040 --> 00:01:36,120 həqiqətən ünvanı s saxlanılır yaddaş faktiki yığın, scanf etmədi 35 00:01:36,120 --> 00:01:38,940 simli qoymaq yerdə var ki, daxil tipli istifadəçi 36 00:01:38,940 --> 00:01:42,510 Həqiqətən, istifadəçi olsaydı indi yazın "salam" dən daha uzun string 37 00:01:42,510 --> 00:01:46,780 Məsələn, bir neçə mətn xətləri və ya mətn bir neçə maddələr, kifayət qədər var 38 00:01:46,780 --> 00:01:50,280 biz vadar edə bilər ki, mümkün bir seqmentasiya günah deyilən. 39 00:01:50,280 --> 00:01:53,570 >> Scanf bilmək niyyətində deyil, çünki Mən, həqiqətən, bir ünvan qoymaq deyil 40 00:01:53,570 --> 00:01:54,610 s daxilində. 41 00:01:54,610 --> 00:01:58,000 Əksinə, bəzi dəyəri görmək olacaq s, bəzi model bit ki, may 42 00:01:58,000 --> 00:02:00,910 çox yaxşı bir zibil dəyəri, orada yalnız təsadüfən. 43 00:02:00,910 --> 00:02:04,600 Və scanf hələ də yazmaq cəhd edir ki, ünvan üçün istifadəçi string, 44 00:02:04,600 --> 00:02:08,789 bir zibil dəyəri, hətta əgər həqiqətən bir qəza vadar edə bilər. 45 00:02:08,789 --> 00:02:10,130 >> Belə ki, necə biz bu düzeltmek üçün gedir? 46 00:02:10,130 --> 00:02:12,523