1 00:00:00,000 --> 00:00:02,500 [Powered by Google Translate] [Bölmə 5 - Daha Rahat] 2 00:00:02,500 --> 00:00:04,690 [Rob Bowden - Harvard Universiteti] 3 00:00:04,690 --> 00:00:07,250 [Bu CS50 edir. - CS50.TV] 4 00:00:08,990 --> 00:00:14,250 >> Mən e bildirib kimi istifadə edə bilərsiniz çox şey var 5 00:00:14,250 --> 00:00:17,060 əslində problem dəstləri etmək ləvazımatlı başqa. 6 00:00:17,060 --> 00:00:19,910 Sonra daha asan sizə kömək edə bilər yalnız siz cihaz bunu tövsiyə 7 00:00:19,910 --> 00:00:22,070 və biz hər şey iş gedir necə. 8 00:00:22,070 --> 00:00:26,950 Ancaq deyirlər ki, əgər şeylər edə bilərsiniz bir misal kimi, imkanı yoxdur 9 00:00:26,950 --> 00:00:31,570 bir avadanlığına və ya Elm Mərkəzinin zirzəmisində işləmək istəyirəm - 10 00:00:31,570 --> 00:00:33,090 hansı faktiki olaraq onlar çox cihaz var - 11 00:00:33,090 --> 00:00:35,150 istədiyiniz yerdə işləmək istəyirsinizsə. 12 00:00:35,150 --> 00:00:42,370 Məsələn, siz görüldü / SSH ilə eşitdim olunur? 13 00:00:44,380 --> 00:00:47,780 SSH yalnız bir şey qoşulmaq kimi əsasən. 14 00:00:47,780 --> 00:00:51,340 Əslində, indi mən cihaz daxil SSHed alıram. 15 00:00:51,340 --> 00:00:54,290 Mən cihaz birbaşa işləmək, heç vaxt. 16 00:00:55,930 --> 00:01:01,060 Burada cihaz və burada aşağı baxmaq Əgər bu IP ünvanı bax. 17 00:01:01,060 --> 00:01:03,650 Mən cihaz özü işə heç; 18 00:01:03,650 --> 00:01:08,840 Mən həmişə bir iTerm2 pəncərə / terminal pəncərə üzərində gəlir. 19 00:01:08,840 --> 00:01:15,910 Siz IP ünvanı, ssh jharvard@192.168.129.128 üçün SSH bilərsiniz. 20 00:01:15,910 --> 00:01:20,390 Belə bir gözəl model, çünki mən çox asanlıqla ki sayı xatırlayıram. 21 00:01:20,390 --> 00:01:24,920 Lakin şifrəmi mənə soruşacaq və indi cihaz oldum. 22 00:01:24,920 --> 00:01:33,060 Əsasən, bu nöqtədə əgər siz cihaz özü daxilində terminal açıldı 23 00:01:33,060 --> 00:01:36,350 Bu interfeys, lakin siz onu istifadə ki, məhz eyni 24 00:01:36,350 --> 00:01:40,010 interfeys kimi mən burada istifadə edirəm amma indi SSHed edirik. 25 00:01:42,240 --> 00:01:44,920 Siz cihaz üçün SSH yoxdur. 26 00:01:44,920 --> 00:01:52,360 Siz ola bilər SSH başqa bir yerdə bir nümunə Sizə ismarıcları var olduqca əminəm edir - 27 00:01:52,360 --> 00:01:55,020 Oh. Böyük. 28 00:01:55,020 --> 00:02:01,130 Siz bütün FAS server default FAS hesabları ilə olmalıdır. 29 00:02:01,130 --> 00:02:06,840 Mən SSH rbowden@nice.fas.harvard.edu bilər. 30 00:02:06,840 --> 00:02:11,610 Bu ilk dəfədir ki, xahiş olacaq, və bəli deyirəm. 31 00:02:11,610 --> 00:02:15,840 Mənim parol yalnız mənim FAS parol olacaq. 32 00:02:15,840 --> 00:02:22,650 Və indi, mən gözəl server SSHed edirəm və mən burada istədiyiniz bir şey edə bilərsiniz. 33 00:02:22,650 --> 00:02:28,560 Siz 124 kimi bilər dərsləri bir çox, siz burada məhsulları yüklemek üçün gedir 34 00:02:28,560 --> 00:02:30,950 həqiqətən, sizin problem dəsti təqdim. 35 00:02:30,950 --> 00:02:34,100 Amma sizin cihaz çıxışı yoxdur deyirlər. 36 00:02:34,100 --> 00:02:37,910 Sonra, hər şeyi edə bilərsiniz burada kimi demək olacaq - 37 00:02:37,910 --> 00:02:42,160 Bu suallara bizim bölüm. 38 00:02:42,160 --> 00:02:45,070 Bu cihaz bunu xahiş edəcək. 39 00:02:45,070 --> 00:02:47,790 Əvəzində mən yalnız server onu edəcəyik. 40 00:02:47,790 --> 00:02:50,560 Hesab edirəm ki, açın gedirəm. 41 00:02:50,560 --> 00:02:55,670 Bu problem gedit kimi bir şey istifadə etmək üçün istifadə etdiyiniz olacaq 42 00:02:55,670 --> 00:02:58,160 Aracın və ya hər hansı daxili. 43 00:02:58,160 --> 00:03:01,830 Siz FAS server ki üçün fikrində deyilik. 44 00:03:01,830 --> 00:03:04,110 Bu, bütün bu mətn interfeys olacaq. 45 00:03:04,110 --> 00:03:09,180 Belə ki, onlar var ki, bir mətn redaktoru öyrənmək və ya bir cəhd edə bilər. 46 00:03:09,180 --> 00:03:12,130 Onlar Nano var. 47 00:03:12,130 --> 00:03:14,990 Nano adətən istifadə etmək olduqca asandır. 48 00:03:14,990 --> 00:03:19,470 Siz okları istifadə və normal edəbilərsiniz. 49 00:03:19,470 --> 00:03:21,250 Belə ki, çətin deyil. 50 00:03:21,250 --> 00:03:24,720 Həqiqətən fantezi almaq istəyirsinizsə, Emacs istifadə edə bilərsiniz 51 00:03:24,720 --> 00:03:29,850 Mən hətta Emacs yaxın necə bilmirəm, çünki hansı yəqin açılmışdır deyil. 52 00:03:29,850 --> 00:03:32,760 Nəzarət X, Control C? Bəli. 53 00:03:32,760 --> 00:03:35,310 Yoxsa mən istifadə nə olan Vim istifadə edə bilərsiniz. 54 00:03:35,310 --> 00:03:37,800 Və bu seçim var. 55 00:03:37,800 --> 00:03:43,830 Siz bunu istəmirsinizsə, siz də, sizə baxsaq manual.cs50.net - 56 00:03:43,830 --> 00:03:45,410 Oh. 57 00:03:45,410 --> 00:03:49,920 Bir PC, siz SSH, mastika istifadə edə bilərsiniz 58 00:03:49,920 --> 00:03:51,940 ayrıca download malik olacaq olan. 59 00:03:51,940 --> 00:03:55,460 Mac, siz yalnız default istifadə Terminalı və ya, iTerm2 download edə bilərsiniz 60 00:03:55,460 --> 00:03:58,490 bir gözəl, xülya Terminal kimi. 61 00:03:58,490 --> 00:04:03,780 Siz manual.cs50.net getmək Əgər Notepad bir keçid görəcəksiniz + +, 62 00:04:03,780 --> 00:04:07,120 hansı bir PC istifadə edə bilərsiniz edir. 63 00:04:07,120 --> 00:04:13,340 Bu Notepad sizə SFTP imkan verir + +, hansı əsasən SSH edir. 64 00:04:13,340 --> 00:04:17,750 Bu nə edək, yerli faylları redaktə edir 65 00:04:17,750 --> 00:04:20,670 və sonra onları xilas etmək istədiyiniz zaman, o, nice.fas saxlamaq edəcək 66 00:04:20,670 --> 00:04:23,670 Əgər onlara çalıştırabilirsiniz yerləşir. 67 00:04:23,670 --> 00:04:26,880 Və Mac ekvivalent TextWrangler olacaq. 68 00:04:26,880 --> 00:04:28,760 Belə ki, eyni şey imkan verir. 69 00:04:28,760 --> 00:04:32,800 Bu, siz yerli faylları redaktə və nice.fas saxlamaq imkan verir 70 00:04:32,800 --> 00:04:35,730 Əgər onlara çalıştırabilirsiniz yerləşir. 71 00:04:35,730 --> 00:04:40,400 Heç bir cihaz olmadan vurulmuş olduğunuz Belə ki, bu variantları 72 00:04:40,400 --> 00:04:44,230 Sizin problem dəstləri etmək hələ də. 73 00:04:44,230 --> 00:04:48,250 Bir problem siz CS50 kitabxana üçün fikrində deyilik ki, olacaq 74 00:04:48,250 --> 00:04:51,580 nice.fas default ki, yoxdur, çünki. 75 00:04:51,580 --> 00:04:55,970 Siz ya CS50 kitabxana download - 76 00:04:55,970 --> 00:04:58,470 Mən bu nöqtədə lazımdır düşünmürəm. 77 00:04:58,470 --> 00:05:03,270 Ya da CS50 kitabxana download və nice.fas üçün artıq köçürə bilərsiniz 78 00:05:03,270 --> 00:05:07,450 və ya bu nöqtədə biz hər halda artıq istifadə etməyin edirəm. 79 00:05:07,450 --> 00:05:12,720 Biz əgər Və ya, müddət ilə əvəz olunur bilər 80 00:05:12,720 --> 00:05:18,480 bu halda CS50 kitabxana funksiyalarının həyata. 81 00:05:18,480 --> 00:05:21,370 Belə ki, bir məhdudlaşdırılması çox olmamalıdır. 82 00:05:21,370 --> 00:05:23,710 Və ki, var. 83 00:05:26,460 --> 00:05:29,820 >> İndi cihaz geri lazımdır, biz cihaz hər şeyi edəcəyik. 84 00:05:29,820 --> 00:05:37,510 Mən e bildirib kimi, başında suallar bizim bölməsində Axtarıram, 85 00:05:37,510 --> 00:05:43,620 biz siz baxmaq idi qısa bir danışmaq lazımdır. 86 00:05:43,620 --> 00:05:51,980 Biz yönlendirme ve Borular və bu üç sual var. 87 00:05:51,980 --> 00:05:56,070 >> Olan sel kimi funksiyaları printf ismarıcları yazmaq edirsiniz? 88 00:05:56,070 --> 00:05:59,130 Axın edir. Bir axın nədir? 89 00:06:06,520 --> 00:06:15,100 Yalnız bir var kimi bir axın əsasən - 90 00:06:15,100 --> 00:06:21,450 Hətta 1s və 0s mənbəyi deyil. 91 00:06:21,450 --> 00:06:24,920 Burada tələb edir axın standart deyil. 92 00:06:24,920 --> 00:06:27,250 Və standart həyata ki, bir axın edir, siz onu yazmaq zaman 93 00:06:27,250 --> 00:06:30,940 bu ekranda görünür. 94 00:06:30,940 --> 00:06:36,860 Standard həyata, axın, bu yalnız, 1s və bu 0s yazmaq deməkdir 95 00:06:36,860 --> 00:06:40,220 və standart həyata digər sonuna yalnız sel olan deyilir. 96 00:06:40,220 --> 00:06:43,540 Bu yalnız 1s və 0s bir simli var. 97 00:06:43,540 --> 00:06:45,570 Siz axını yaza bilərsiniz və ya siz axınları olan oxuya bilərsiniz 98 00:06:45,570 --> 00:06:47,950 axın əslində nə asılı olaraq. 99 00:06:47,950 --> 00:06:52,800 Digər iki default axınları və standart səhv standart var. 100 00:06:52,800 --> 00:06:57,540 Siz GetString nə zaman Standard, bu sizin üçün giriş məhsulları gözləyir edir. 101 00:06:57,540 --> 00:07:01,570 Belə ki, nə gözləyir, bu, faktiki olaraq, standart gözləyir oldu 102 00:07:01,570 --> 00:07:04,880 siz klaviatura ilə yazın zaman almaq nə həqiqətən. 103 00:07:04,880 --> 00:07:07,530 Siz daxil standart daxil yazaraq edirik 104 00:07:07,530 --> 00:07:10,050 Standard səhv, standart həyata üçün əsasən ekvivalent 105 00:07:10,050 --> 00:07:13,280 siz standart səhv çap lakin o ki, ixtisaslaşdırılmış var 106 00:07:13,280 --> 00:07:16,770 yalnız bu səhv messages çap ehtimal edirik 107 00:07:16,770 --> 00:07:20,200 belə ki, ekran çap müntəzəm mesajlar arasında fərq ola bilər 108 00:07:20,200 --> 00:07:24,560 onlar standart həyata və ya standart səhv getdi asılı olaraq səhv messages qarşı. 109 00:07:24,560 --> 00:07:28,660 Çox faylları. 110 00:07:28,660 --> 00:07:32,440 Standard həyata, standart və standart səhv, yalnız xüsusi axınları var 111 00:07:32,440 --> 00:07:36,810 lakin həqiqətən hər hansı bir fayl, bir fayl açmaq o, bayt bir sel olur 112 00:07:36,810 --> 00:07:40,740 burada yalnız stream dən oxuya bilərsiniz. 113 00:07:40,740 --> 00:07:47,770 Siz çox hissəsi üçün, yalnız bytes bir sel kimi bir fayl hesab edə bilər. 114 00:07:47,770 --> 00:07:51,190 Belə ki, nə axınları onlar ismarıcları yazmaq edirsiniz? Standard həyata. 115 00:07:51,190 --> 00:07:56,980 >> > Və >> arasındakı fərq nədir? 116 00:07:58,140 --> 00:08:03,710 Hər kəs əvvəlcədən video izləmək mi? Okay. 117 00:08:03,710 --> 00:08:10,960 > Faylları daxil yönlendirme necə olacaq 118 00:08:10,960 --> 00:08:15,240 və >> həmçinin faylları çıxış yönlendirme gedir 119 00:08:15,240 --> 00:08:17,820 lakin bu əvəzinə fayl əlavə olacaq. 120 00:08:17,820 --> 00:08:23,430 Məsələn, edək, mən burada dict üçün nə demək 121 00:08:23,430 --> 00:08:27,020 və dict daxilində yalnız stuff pişik, pişik, it, balıq, it. 122 00:08:27,020 --> 00:08:31,530 Siz command line malik bir komanda, pişik deyil 123 00:08:31,530 --> 00:08:34,539 olan yalnız bir fayl nə çap edir. 124 00:08:34,539 --> 00:08:40,679 Mən pişik dict deyəndə, bu, pişik, pişik, it, balıq, it çap olacaq. Yəni bütün pişik yox edir. 125 00:08:40,679 --> 00:08:46,280 Bu pişik, pişik, it, balıq, it out standart çap deməkdir. 126 00:08:46,280 --> 00:08:53,240 Mən əvəzinə fayl ki yönlendirme istəyirsinizsə, mən istifadə> və fayl nə üçün yönlendirebilirsiniz. 127 00:08:53,240 --> 00:08:56,460 Mən fayl fayl zəng edəcəyik. 128 00:08:56,460 --> 00:09:00,320 Mən ls Belə ki, indi mən fayl adlı yeni fayl görəcəksiniz. 129 00:09:00,320 --> 00:09:05,700 Mən bunu açmaq əgər, bu cat skript xətti qoymaq dəqiq nə olacaq. 130 00:09:05,700 --> 00:09:11,040 Mən ki, əgər İndi, o, fayla çıxış yönlendirme olacaq 131 00:09:11,040 --> 00:09:13,930 Mən eyni dəqiq şey üçün gedirəm. 132 00:09:13,930 --> 00:09:17,910 Belə ki, texniki, tamamilə biz nə overrode. 133 00:09:17,910 --> 00:09:22,970 Mən dict dəyişdirmək əgər biz görəcəksiniz, mən it çıxardı. 134 00:09:22,970 --> 00:09:29,980 İndi yenidən fayla biz pişik dict, biz it çıxarılır yeni versiyası olacaq. 135 00:09:29,980 --> 00:09:32,400 Belə ki, tamamilə yalnış düçar edər. 136 00:09:32,400 --> 00:09:36,640 Biz >> istifadə əgər Əksinə, bu fayl əlavə olacaq. 137 00:09:36,640 --> 00:09:40,860 İndi, faylı açılması, biz iki dəfə çap yalnız eyni şey görmək 138 00:09:40,860 --> 00:09:44,920 bu dəfə orada idi, sonra orijinal əlavə. 139 00:09:44,920 --> 00:09:48,130 Belə ki, nə> və >> edin. 140 00:09:48,130 --> 00:09:50,580 Növbəti bir sual yoxdur - Bu barədə soruşmaq deyil. 141 00:09:50,580 --> 00:09:59,050 >> Biz ki, başqa bir standart həyata yönləndirən <əgər> edir 142 00:09:59,050 --> 00:10:01,970 00:10:12,050 Biz bir misal varsa Bakalým. 144 00:10:14,750 --> 00:10:16,930 Mən bir real sürətli yaza bilərsiniz. 145 00:10:17,870 --> 00:10:25,700 In hər hansı bir fayl, hello.c edək. 146 00:10:56,060 --> 00:10:59,070 Nisbətən sadə faylı. 147 00:10:59,070 --> 00:11:03,570 Mən yalnız mən yalnız daxil simli idi nə "Hello" çap sonra bir string almaq və alıram. 148 00:11:03,570 --> 00:11:07,990 Belə hello hello və sonra etmək. /. 149 00:11:07,990 --> 00:11:10,720 İndi, bir şey daxil məni isteyen var 150 00:11:10,720 --> 00:11:15,070 bu da standart daxil şeylər gözləyir deməkdir 151 00:11:15,070 --> 00:11:20,450 Biz yalnız Rob Salam, demək olacaq da mən standart daxil istədiyiniz hər hansı daxil olun! 152 00:11:20,450 --> 00:11:23,310 Sonra Salam, həyata standart Rob çap edir! 153 00:11:23,310 --> 00:11:28,860 Mən. / Salam, sonra yönlendirme, əgər 154 00:11:30,740 --> 00:11:34,310 İndi yalnız bir faylı yönlendirebilirsiniz. 155 00:11:34,310 --> 00:11:41,720 Mən bəzi fayl txt qoymaq və mən, Rob qoymaq əgər 156 00:11:41,720 --> 00:11:52,300 Mən salam run və sonra daxil fayl txt yönlendirme əgər. / hello, bu Rob Salam, demək olacaq! dərhal. 157 00:11:52,300 --> 00:11:57,160 Ilk GetString olur və bu, standart gözləyir zamanı 158 00:11:57,160 --> 00:12:01,730 standart daxil olmaq data üçün klaviatura gözləyir artıq. 159 00:12:01,730 --> 00:12:05,980 Əksinə, biz fayl txt dən oxumaq üçün standart yönlendirileceksiniz var. 160 00:12:05,980 --> 00:12:10,290 Və bu, yalnız xətt Rob olan fayl txt, oxu olacaq 161 00:12:10,290 --> 00:12:13,380 və sonra Salam, Rob çap olacaq! 162 00:12:13,380 --> 00:12:18,180 Mən istəyirdim, mən də edə bilər. / Salam 00:12:21,500 və sonra standart ki Xoşgəldiniz olan bu çap, Rob! 164 00:12:21,500 --> 00:12:24,700 Mən öz fayla ki yönlendirebilirsiniz. 165 00:12:24,700 --> 00:12:29,790 Mən salam fayl zəng olacaq - heç, mən ki, yürütülebilir çünki - txt2. 166 00:12:29,790 --> 00:12:40,150 İndi txt2 Xoşgəldiniz olacaq olan. / Salam 00:12:43,520 >> Suallar? 168 00:12:45,900 --> 00:12:49,090 >> Okay. Beləliklə burada biz boru kəməri var. 169 00:12:49,090 --> 00:12:53,510 Borular redirection, son birləşmədir. 170 00:12:53,510 --> 00:12:58,750 >> Oh. Mən redirection daha bir vahid əgər əvəzinə olduğunu təxmin> 2 do> 171 00:12:58,750 --> 00:13:01,070 standart səhv yönlendirme edir. 172 00:13:01,070 --> 00:13:06,280 Bir standart səhv getdi Beləliklə, bu txt2 daxil almaq deyil. 173 00:13:06,280 --> 00:13:12,480 Amma 2> əgər hiss, o, hələ Rob Salam, çap edir! skript xətti 174 00:13:12,480 --> 00:13:18,600 Mən yalnız standart səhv yönlendirme edirəm, çünki mən standart həyata yönlendirme deyiləm. 175 00:13:18,600 --> 00:13:22,210 Standard səhv və standart həyata fərqlidir. 176 00:13:24,210 --> 00:13:27,080 Həqiqətən standart səhv yazmaq istəyirdim, əgər 177 00:13:27,080 --> 00:13:35,080 sonra stderr üçün fprintf üçün bu dəyişə bilər. 178 00:13:35,080 --> 00:13:37,850 Belə printf, ismarıcları, standart həyata üçün görüntüler. 179 00:13:37,850 --> 00:13:41,720 Mən əl standart səhv çap etmək istəyirsinizsə, onda mən fprintf istifadə etmək 180 00:13:41,720 --> 00:13:45,010 və mən çap etmək istəyirəm nə daxil. 181 00:13:45,010 --> 00:13:49,720 Əvəzinə mən fprintf stdout etdi, onda ki, printf üçün əsasən ekvivalent deyil. 182 00:13:49,720 --> 00:13:55,530 Amma fprintf standart səhv. 183 00:13:57,790 --> 00:14:03,650 Beləliklə, mən txt2 bu yönlendirme, əgər Salam, Rob! hələ command line çap edir 184 00:14:03,650 --> 00:14:08,270 standart səhv çap əldə edir və mən yalnız standart həyata yönlendirme alıram-ci ildən. 185 00:14:08,270 --> 00:14:16,420 İndi standart səhv yönlendirme, indi çap almaq vermədi və txt2 Salam, Rob olacaq! 186 00:14:16,420 --> 00:14:21,910 Belə ki, indi siz standart səhv üçün faktiki səhvləri çap edə bilərsiniz 187 00:14:21,910 --> 00:14:24,720 və standart həyata üçün müntəzəm messages çap. 188 00:14:24,720 --> 00:14:31,420 Və sizin proqram run belə olduqda, siz 2-salam bu növü kimi çalıştırın. / Bilər> 189 00:14:31,420 --> 00:14:33,800 proqram, normal çalışmağa davam edir, belə ki, 190 00:14:33,800 --> 00:14:38,400 lakin siz almaq hər hansı bir səhv mesajları, sizin səhv daxil sonra kontrol edə bilərsiniz 191 00:14:38,400 --> 00:14:44,500 səhvlər, belə ki, və sonra baxmaq və səhvlər fayl baş verən hər hansı bir səhv olacaq. 192 00:14:45,200 --> 00:14:47,540 >> Suallar? 193 00:14:47,540 --> 00:14:58,070 >> Sonuncu bir skript standart həyata alaraq kimi hesab edə bilər ki, boru deyil 194 00:14:58,070 --> 00:15:01,210 və gələn komanda standart edir. 195 00:15:01,210 --> 00:15:05,570 Məsələn burada echo bir command line şey deyil 196 00:15:05,570 --> 00:15:11,840 yalnız mən onun arqument kimi qoymaq nə səda gedir. Mən quotes qoymaq deyil. 197 00:15:11,840 --> 00:15:16,150 Echo blah, blah, blah blah yalnız, blah, blah çap edir. 198 00:15:16,150 --> 00:15:20,600 Əvvəl, dedim mən bir txt fayl Rob qoymaq idi 199 00:15:20,600 --> 00:15:28,830 Mən yalnız txt faylları yönlendirme əvəzinə bilər, çünki I / Rob echo əgər 200 00:15:28,830 --> 00:15:35,520 və sonra boru onu. / hello, həmçinin şey eyni tipli edəcəyik. 201 00:15:35,520 --> 00:15:39,160 Bu komanda çıxdı, echo Rob edir 202 00:15:39,160 --> 00:15:43,610 və giriş kimi istifadə. / salam. 203 00:15:44,790 --> 00:15:49,560 Siz ilk bir fayla echo Rob yönlendirme düşünün bilər 204 00:15:49,560 --> 00:15:54,160 və sonra. / salam ki, fayla daxil yalnız outputted edilib. 205 00:15:54,160 --> 00:15:57,850 Lakin şəkil müvəqqəti fayl edir. 206 00:16:01,890 --> 00:16:04,460 >> Ki Suallar? 207 00:16:04,460 --> 00:16:07,150 >> Növbəti sual bu cəlb edir. 208 00:16:07,150 --> 00:16:15,310 Nə boru siz names.txt adlı bir fayl unikal adları sayı tapmaq üçün istifadə edə bilər? 209 00:16:15,310 --> 00:16:24,160 Burada istifadə etmək istədiyiniz olacaq əmrləri unikal belə uniq, sonra wc var. 210 00:16:24,160 --> 00:16:28,840 Siz, həqiqətən ki, nə baxmaq insan uniq edə bilərsiniz 211 00:16:28,840 --> 00:16:34,840 və yalnız daxil olan qonşu uyğun xətləri filter olacaq. 212 00:16:34,840 --> 00:16:40,690 Və insan wc olan newline, söz, və hər bir fayl üçün byte sayar çap edir. 213 00:16:40,690 --> 00:16:43,760 Və biz istifadə etmək istədiyiniz olacaq son bir, sort edir 214 00:16:43,760 --> 00:16:47,410 olan yalnız txt fayl xətləri sort edir. 215 00:16:47,410 --> 00:16:58,080 Mən bəzi txt fayl, names.txt etmək və Rob, Tommy, Yusif, Tommy, Yusif, RJ, Rob, varsa 216 00:16:58,080 --> 00:17:03,910 nə mən burada etmək istəyirəm bu fayl unikal adları sayı tapmaq edir. 217 00:17:03,910 --> 00:17:08,750 Belə ki, cavab nə olmalıdır? >> [Tələbə] 4. >> Bəli. 218 00:17:08,750 --> 00:17:13,780 Bu Rob, Tommy Cozef ildən 4 olmalıdır, RJ bu fayl yalnız unikal adları var. 219 00:17:13,780 --> 00:17:20,180 Ilk addım, yalnız names.txt barədə söz count əgər, 220 00:17:20,180 --> 00:17:24,290 Bu, həqiqətən, mənə hər şeyi izah edir. 221 00:17:24,290 --> 00:17:32,560 Bu, həqiqətən, çap edir - newlines, sözlər, və byte sayı - kişi wc, bax edək. 222 00:17:32,560 --> 00:17:38,270 Mən yalnız xətləri qayğı, onda mən yalnız wc-l names.txt edə bilərsiniz. 223 00:17:41,730 --> 00:17:44,300 Belə ki, 1 adım var. 224 00:17:44,300 --> 00:17:50,510 Names.txt yalnız bütün adları var, çünki Amma, wc-l names.txt istəmirəm 225 00:17:50,510 --> 00:17:54,170 və hər hansı bir qeyri-unikal olanları filter istəyirəm. 226 00:17:54,170 --> 00:18:01,200 Mən uniq names.txt əgər Belə ki, çox istəyirəm nə mənə vermir 227 00:18:01,200 --> 00:18:03,760 də təqlid adları hələ, çünki. 228 00:18:03,760 --> 00:18:07,690 Niyə ki? Niyə uniq istəyirəm nə deyil? 229 00:18:07,690 --> 00:18:10,500 [Tələbə] Bu cüt deyil [işitilemez] >> Bəli. 230 00:18:10,500 --> 00:18:16,370 Uniq üçün adam səhifə saxla filter bitişik uyğunluğu xətləri deyir. 231 00:18:16,370 --> 00:18:19,680 Onlar qonşu deyilik, buna görə onlara filter deyil. 232 00:18:19,680 --> 00:18:31,100 Mən onlara ilk çeşidləmək varsa, sort names.txt birlikdə bütün cüt xətləri qoymaq niyyətindədir. 233 00:18:31,100 --> 00:18:34,450 İndi sırala names.txt edir. 234 00:18:34,450 --> 00:18:40,550 Uniq | I olan uniq üçün giriş kimi istifadə etmək istədiyiniz gedirəm. 235 00:18:40,550 --> 00:18:43,390 Mənə Joseph, RJ, Rob, Tommy verir 236 00:18:43,390 --> 00:18:49,260 və mən, wc-l üçün giriş kimi istifadə etmək istədiyiniz 237 00:18:49,260 --> 00:18:52,740 mənə 4 verməyə hazırlaşır. 238 00:18:52,740 --> 00:18:56,930 Burada deyir kimi, nə kəməri istifadə edə bilər? 239 00:18:56,930 --> 00:19:01,390 Siz əmrləri bir sıra istifadə kimi çox şey edə bilər 240 00:19:01,390 --> 00:19:05,130 Siz növbəti komanda üçün giriş kimi bir skript çıxış istifadə edir. 241 00:19:05,130 --> 00:19:08,780 Siz çox şey, ağıllı çox şey edə bilərsiniz. 242 00:19:08,780 --> 00:19:11,440 >> Suallar? 243 00:19:12,910 --> 00:19:14,600 Okay. 244 00:19:14,600 --> 00:19:17,880 Borular və yönlendirme üçün var. 245 00:19:18,370 --> 00:19:24,090 >> İndi biz faktiki stuff ki, kodlaşdırma məhsulları getmək. 246 00:19:24,090 --> 00:19:29,100 Bu PDF Inside, siz bu komanda görəcəksiniz 247 00:19:29,100 --> 00:19:32,950 və sizin cihaz Bu funksiyanı çalıştırın lazımdır. 248 00:19:36,240 --> 00:19:42,250 wget, əsasən, yalnız İnternet bir şey almaq üçün əmr edir 249 00:19:42,250 --> 00:19:45,180 belə wget və bu URL. 250 00:19:45,180 --> 00:19:49,110 Brauzerinizin bu URL getdi, o fayl yükləyə bilər. 251 00:19:49,110 --> 00:19:52,510 Mən yalnız tıklayan, belə ki, bu, mənim üçün fayl yükləmək. 252 00:19:52,510 --> 00:19:55,650 Amma terminal daxilində olan şey wget yazı 253 00:19:55,650 --> 00:19:58,620 yalnız terminal onu download gedir. 254 00:19:58,620 --> 00:20:02,750 , Mən section5.zip var və siz section5.zip açın lazımdır 255 00:20:02,750 --> 00:20:06,520 ki, siz section5 adlı qovluq vermək niyyətindədir 256 00:20:06,520 --> 00:20:11,550 biz bunu daxilində bu gün istifadə olacaq bütün faylları üçün gedən edir. 257 00:20:33,380 --> 00:20:37,710 Bu proqramların fayl adları gəlir ki, onlar bir az arabası istəyirik, 258 00:20:37,710 --> 00:20:40,990 sizin missiya gdb istifadə niyə anlamaq üçün. 259 00:20:40,990 --> 00:20:44,560 Onlara hər kəs yükləyə / onlara nazil almaq üçün necə var 260 00:20:44,560 --> 00:20:47,480 onların cihaz daxil? Okay. 261 00:20:47,480 --> 00:20:56,400 >> ./buggy1 Running, o, Segmentasyon günah (əsas tullanır) deyəcəklər 262 00:20:56,400 --> 00:21:00,500 hansı bir segfault istənilən vaxt, o, pis bir şey deyil. 263 00:21:00,500 --> 00:21:03,810 Nə halda bir segfault alıram? 264 00:21:03,810 --> 00:21:08,210 [Tələbə] bir null göstərici Dereferencing. >> Bəli. Belə ki, bir nümunəsidir. 265 00:21:08,210 --> 00:21:11,580 Bir segfault almaq olacaq bir null göstərici Dereferencing. 266 00:21:11,580 --> 00:21:16,720 Yaddaş toxunan ne vasitəsi segfault sizə aid edilə bilməz. 267 00:21:16,720 --> 00:21:21,350 Belə bir null göstərici dereferencing, ünvan 0 aid edilir 268 00:21:21,350 --> 00:21:28,060 və əsasən, bütün kompüter gün ünvan 0 sizə aid edilməməlidir yaddaş olduğunu deyirlər. 269 00:21:28,060 --> 00:21:31,920 Bir segfault bir null göstərici nəticələri dereferencing niyə Belə ki var. 270 00:21:31,920 --> 00:21:37,210 Bir göstərici başlamaq deyil nə zaman, o, bir zibil dəyəri 271 00:21:37,210 --> 00:21:41,520 və siz dereference cəhd zaman, bütün ehtimalı siz yaddaş toxunan edirik 272 00:21:41,520 --> 00:21:43,540 ki, heç bir yerdə ortasında var. 273 00:21:43,540 --> 00:21:45,650 Siz xoşbəxt və zibil dəyər almaq üçün baş Əgər 274 00:21:45,650 --> 00:21:48,440 yığını və ya bir şey yerdə qeyd etmək oldu, 275 00:21:48,440 --> 00:21:50,820 sonra zaman göstərici başlatılmış deyil ki, siz dereference, 276 00:21:50,820 --> 00:21:52,730 heç bir şey yanlış gedəcək. 277 00:21:52,730 --> 00:21:55,480 Bu işarə əgər Lakin, haradasa yığın və yığın arasında, demək 278 00:21:55,480 --> 00:21:59,850 və ya yalnız bir yerdə, hələ proqram istifadə edilməyib ki işarə edir 279 00:21:59,850 --> 00:22:02,240 sonra sizə aid edilməməlidir yaddaş toxunan edirik və segfault. 280 00:22:02,240 --> 00:22:06,370 Bir recursive funksiyası yazmaq və çox çox dəfə recurses zaman 281 00:22:06,370 --> 00:22:08,720 və yığını şeyi dilinə çox böyük və yığını collides artır 282 00:22:08,720 --> 00:22:12,270 siz toxunan edilməməlidir ilə colliding lazım deyil ki, yaddaş toxunan edirik, 283 00:22:12,270 --> 00:22:14,810 belə segfault. 284 00:22:14,810 --> 00:22:17,010 Bu nə segfault edir. 285 00:22:17,010 --> 00:22:21,810 >> Bu da eyni səbəbdən ki, sizin kimi bir string varsa - 286 00:22:21,810 --> 00:22:23,930 nin əvvəlki proqram geri imkan verir. 287 00:22:23,930 --> 00:22:28,530 Ildə hello.c-Ben yalnız başqa bir şey etmək niyyətindədir. 288 00:22:28,530 --> 00:22:33,770 char * s = "Salam dünya!"; 289 00:22:33,770 --> 00:22:42,310 Mən istifadə edin * s = bir şey və ya s [0] = 'X'; 290 00:22:42,310 --> 00:22:47,290 belə salam olun. / hello, niyə ki segfault idi? 291 00:22:48,410 --> 00:22:51,250 Niyə bu segfault idi? 292 00:22:55,660 --> 00:22:57,890 Siz nə gözləmək olar? 293 00:22:57,890 --> 00:23:06,640 Mən printf əgər ("% s \ n", s); nə çap gözləmək olardı? 294 00:23:06,640 --> 00:23:09,930 [Tələbə] X salam. >> Bəli. 295 00:23:09,930 --> 00:23:15,140 Problem, bu kimi bir string zaman bəyan ki, 296 00:23:15,140 --> 00:23:18,190 s, yığını getmək olacaq bir göstəricisidir 297 00:23:18,190 --> 00:23:25,880 və nə s işarə edir read-only memory olan bu simli edir. 298 00:23:25,880 --> 00:23:30,560 Yalnız adı, read-only memory ilə Belə ki, siz bir fikir almaq lazımdır 299 00:23:30,560 --> 00:23:33,010 ki, read-yalnız yaddaş nə dəyişdirmək üçün çalışırıq, əgər 300 00:23:33,010 --> 00:23:36,670 Əgər yaddaş ilə məşğul olmamalıdır bir şey yapýyorsun və segfault. 301 00:23:36,670 --> 00:23:45,360 Bu, həqiqətən, char * s və s char [] arasında böyük fərq var. 302 00:23:45,360 --> 00:23:48,790 Belə ki, char s [], bu simli yığını qoymaq olacaq, 303 00:23:48,790 --> 00:23:53,960 və yığını bu mükəmməl gözəl işləməlidir o deməkdir ki, oxumaq yalnız deyil. 304 00:23:55,500 --> 00:23:57,370 Və bunu edir. 305 00:23:57,370 --> 00:24:06,250 Xatırla ki, char nə zaman * s = "Salam dünya!" S özü yığını deyil 306 00:24:06,250 --> 00:24:10,390 ancaq başqa bir yerdə xal və başqa bir yerdə oxumaq yalnız olur. 307 00:24:10,390 --> 00:24:15,640 Amma char s [] yalnız yığını bir şey deyil. 308 00:24:17,560 --> 00:24:21,760 Belə ki, bir segfault baş başqa bir misal var. 309 00:24:21,760 --> 00:24:27,820 >> Biz ./buggy1 bir segfault səbəb olduğunu gördüm. 310 00:24:27,820 --> 00:24:31,810 Nəzəriyyəsi, siz dərhal buggy1.c baxmaq lazımdır. 311 00:24:31,810 --> 00:24:35,170 Əksinə, biz gdb vasitəsilə baxmaq lazımdır. 312 00:24:35,170 --> 00:24:37,750 Siz Segmentasyon günah (əsas tullanır) zaman edək ki, 313 00:24:37,750 --> 00:24:40,850 Burada deyilən əsas üzərində bu fayl almaq. 314 00:24:40,850 --> 00:24:45,200 Biz ls-l, biz ki, əsas adətən olduqca böyük bir fayl görəcəksiniz. 315 00:24:45,200 --> 00:24:51,580 Bu fayl bytes sayı, belə ki, 250-bir şey kilobayttan var kimi görünür. 316 00:24:51,580 --> 00:24:56,120 Bunun səbəbi core dump həqiqətən nə olduğunu 317 00:24:56,120 --> 00:25:01,410 zaman proqram qəzaları, proqram yaddaş dövlət 318 00:25:01,410 --> 00:25:05,230 yalnız sitemizi və bu fayla yapışdırılır olur. 319 00:25:05,230 --> 00:25:07,270 Bu faylı taþý olur. 320 00:25:07,270 --> 00:25:13,060 Bu proqram, bu, çalışan isə, 250 ətrafında kilobayttan bir yaddaş istifadə üçün baş 321 00:25:13,060 --> 00:25:17,040 və belə ki, bu fayla taþý olmuşlar budur. 322 00:25:17,040 --> 00:25:23,630 Biz gdb buggy1 əsas əgər İndi ki, fayl baxmaq olar. 323 00:25:23,630 --> 00:25:30,130 Biz yalnız gdb buggy1 edə bilər və yalnız müntəzəm gdb qədər başlayacaq 324 00:25:30,130 --> 00:25:33,800 , giriş fayl kimi buggy1 istifadə edərək. 325 00:25:33,800 --> 00:25:38,260 Siz gdb buggy1 əsas əgər Lakin, o, xüsusi gdb başlamaq olacaq 326 00:25:38,260 --> 00:25:40,330 ki, əsas fayl baxaraq. 327 00:25:40,330 --> 00:25:45,560 Və buggy1 vasitəsilə gdb söyləyən əsas fayl buggy1 proqram gəlir ki, bilir. 328 00:25:45,560 --> 00:25:49,580 Belə ki, gdb buggy1 əsas dərhal bizə edir 329 00:25:49,580 --> 00:25:52,060 proqramı ləğv oldu harada. 330 00:25:57,720 --> 00:26:02,340 Biz proqramı siqnal 11, Segmentasyon günah ilə xitam burada baxın. 331 00:26:02,340 --> 00:26:10,110 Biz yəqin ki, çox faydalı olmayan montaj xətti görmək üçün baş verir. 332 00:26:10,110 --> 00:26:15,360 Siz bt ya backtrace yazın Amma əgər ki, funksiya olacaq 333 00:26:15,360 --> 00:26:19,430 ki, bizim cari yığını çərçivəsində siyahısını verir. 334 00:26:19,430 --> 00:26:23,150 Belə backtrace. Biz yalnız iki yığını çərçivəsində var kimi görünür. 335 00:26:23,150 --> 00:26:26,310 Ilk, bizim əsas yığını çərçivəsində deyil 336 00:26:26,310 --> 00:26:29,810 və ikinci, biz olmaq nə ki, bu funksiya üçün yığını çərçivəsində deyil 337 00:26:29,810 --> 00:26:34,440 biz yalnız akt kodu kimi hansı görünür. 338 00:26:34,440 --> 00:26:38,050 Belə ki, bizim əsas funksiyası geri gedək, 339 00:26:38,050 --> 00:26:42,300 və biz çərçivəsində 1 edə bilərsiniz bunu edirəm və biz də aşağı edə bilərsiniz düşünmək, 340 00:26:42,300 --> 00:26:45,160 və ya - amma demək olar ki, aşağı heç vaxt. Bəli. 341 00:26:45,160 --> 00:26:50,710 Yuxarı və aşağı. Up siz bir yığın çərçivəsində aşağı gətirir aşağı bir yığın çərçivəsində gündəmə gətirir. 342 00:26:50,710 --> 00:26:53,240 Hesab edirəm ki, istifadə heç edirlər. 343 00:26:53,240 --> 00:26:59,120 Mən xüsusilə 1 etiketli çərçivəsində getmək olan çərçivəsində 1, deyirlər. 344 00:26:59,120 --> 00:27:01,750 Çərçivə 1, əsas yığını çərçivəsində bizi gətirmək niyyətindədir 345 00:27:01,750 --> 00:27:05,570 və burada biz olmaq nə kodu xətti deyir. 346 00:27:05,570 --> 00:27:07,950 Biz kodu bir neçə daha çox xətləri istəyirdi, biz siyahı demək olar 347 00:27:07,950 --> 00:27:11,280 və bizə ətrafında bütün kodu xətləri vermək olacaq. 348 00:27:11,280 --> 00:27:13,360 Biz segfaulted xətti 6 idi: 349 00:27:13,360 --> 00:27:17,360 if (strcmp ("CS50 süxurları", argv [1]) == 0). 350 00:27:17,360 --> 00:27:24,130 Hələ aydın deyil, siz yalnız segfaulted nə düşünür burada birbaşa əldə edə bilərsiniz. 351 00:27:24,130 --> 00:27:28,800 Amma biz bir addım daha onu və deyirlər ki, "Niyə argv [1] segfault bilər?" Bilərsiniz 352 00:27:28,800 --> 00:27:38,830 Edək çap argv [1], və bu null göstərici olan bu 0x0, kimi görünür. 353 00:27:38,830 --> 00:27:44,750 Biz segfault olacaq ki, CS50 qayalar və null strcmping və edirik. 354 00:27:44,750 --> 00:27:48,280 Və buna görə argv [1] null? 355 00:27:48,640 --> 00:27:51,280 [Tələbə] Biz heç bir komanda-line dəlilləri vermədi, çünki. 356 00:27:51,280 --> 00:27:53,390 Bəli. Biz heç bir komanda-line dəlilləri vermədi. 357 00:27:53,390 --> 00:27:58,460 Belə ./buggy1 yalnız argv [0] ./buggy1 olmaq üçün gedir. 358 00:27:58,460 --> 00:28:02,100 Bu argv [1] üçün gedən deyil, segfault olacaq ki. 359 00:28:02,100 --> 00:28:07,450 Əvəzinə, yalnız CS50 etmək, əgər Lakin, Siz D almaq demək olacaq 360 00:28:07,450 --> 00:28:09,950 ki, bunu ehtimal nə çünki. 361 00:28:09,950 --> 00:28:15,240 Buggy1.c baxanda çap etməli oldu "Siz D almaq" - 362 00:28:15,240 --> 00:28:20,820 Argv [1] "CS50 süxurları", başqa, "Siz D almaq" Əgər "Siz A qurtar!" 363 00:28:20,820 --> 00:28:25,660 Biz A istəyirəm əgər, biz doğru müqayisə üçün bu lazımdır 364 00:28:25,660 --> 00:28:28,710 bu 0 müqayisə deməkdir. 365 00:28:28,710 --> 00:28:31,100 Belə argv [1] "CS50 süxurlar" olmalıdır. 366 00:28:31,100 --> 00:28:35,660 Siz command line ki etmək istəyirsinizsə, yer qurtarmaq üçün \ istifadə etmək lazımdır. 367 00:28:35,660 --> 00:28:41,690 Belə ki, CS50 \ qayalar və Siz A qurtar! 368 00:28:41,690 --> 00:28:44,060 Siz backslash yoxdur, niyə bu işləmir? 369 00:28:44,060 --> 00:28:47,190 [Tələbə] Bu iki müxtəlif arqumentlər var. >> Bəli. 370 00:28:47,190 --> 00:28:52,540 Argv [1] CS50 olacaq və argv [2] süxurların olacaq. Okay. 371 00:28:52,540 --> 00:28:56,470 >> İndi ./buggy2 yenidən segfault gedir. 372 00:28:56,470 --> 00:29:01,880 Əvəzində əsas fayl ilə açılması, yalnız birbaşa buggy2 açmaq lazımdır 373 00:29:01,880 --> 00:29:05,000 gdb buggy2 belə. 374 00:29:05,000 --> 00:29:09,590 Biz yalnız bizim proqram run əgər İndi, o, Proqram siqnal SIGSEGV qəbul demək olacaq 375 00:29:09,590 --> 00:29:15,530 olan siqnal segfault və belə oldu bu deyil. 376 00:29:15,530 --> 00:29:21,250 Bizim backtrace baxanda biz funksiyası oh_no olduğunu görmək 377 00:29:21,250 --> 00:29:23,900 ki, funksiyası binky tərəfindən adlanan funksiya dinky tərəfindən çağırılıb 378 00:29:23,900 --> 00:29:26,460 Əsas ilə adlandırılmışdır. 379 00:29:26,460 --> 00:29:31,680 Biz də bu funksiyaları arqumentlər bilərsiniz. 380 00:29:31,680 --> 00:29:34,680 Dinky və binky üçün dəlil 1 idi. 381 00:29:34,680 --> 00:29:44,390 Biz funksiyası oh_no siyahısı, biz oh_no yalnız char ** s = NULL etdiyini görmək; 382 00:29:44,390 --> 00:29:47,410 * S = "BOOM"; 383 00:29:47,410 --> 00:29:50,330 Niyə uğursuz olacaq? 384 00:29:54,330 --> 00:29:58,380 [Tələbə] Siz dereference də null göstərici deyil? >> Bəli. 385 00:29:58,380 --> 00:30:06,090 Bir char ** olmaq olur, bu yalnız asılı olmayaraq, s NULL olduğunu deyib 386 00:30:06,090 --> 00:30:12,070 siz şərh necə asılı olaraq, simli bir göstərici bir göstərici ola bilər ki, 387 00:30:12,070 --> 00:30:15,550 və ya strings bir sıra. 388 00:30:15,550 --> 00:30:21,430 Bu s NULL edir, belə ki, * s, bir null pointer dereferencing olunur 389 00:30:21,430 --> 00:30:24,800 və bu qəza gedir. 390 00:30:24,800 --> 00:30:27,540 Bu bəlkə segfault bilər qısa yollarından biridir. 391 00:30:27,540 --> 00:30:31,300 Bu, sadəcə bir göstərici null elan və dərhal segfaulting edir. 392 00:30:31,300 --> 00:30:34,570 Bu oh_no nə var. 393 00:30:34,570 --> 00:30:43,400 Biz bir çərçivə qalxmaq, onda biz oh_no adlı funksiyası daxil olacaq. 394 00:30:43,400 --> 00:30:44,830 Mən aşağı bunu etmək lazımdır. 395 00:30:44,830 --> 00:30:48,610 Bir komanda daxil və yoxsa yalnız yenidən Enter 396 00:30:48,610 --> 00:30:52,350 yalnız siz qaçdı ki, əvvəlki komanda təkrar edəcək. 397 00:30:52,350 --> 00:30:56,610 Biz çərçivəsində 1 yerləşirsiniz. 398 00:30:56,610 --> 00:31:04,650 Bu çərçivədə siyahısı, biz burada bizim funksiyası görürük. 399 00:31:04,650 --> 00:31:08,520 Siz yenə siyahısı hit bilər, və ya siyahısı 20 edə bilərsiniz və daha siyahısını verir. 400 00:31:08,520 --> 00:31:13,640 Funksiyası dinky i 1 varsa,, sonra oh_no funksiyası getmək deyir 401 00:31:13,640 --> 00:31:15,960 başqa sinsi funksiyası gedin. 402 00:31:15,960 --> 00:31:18,700 Və biz burada görmək nə, çünki i 1 bilirik 403 00:31:18,700 --> 00:31:22,560 ki dinky arqumenti 1 ilə adlandırılmışdır. 404 00:31:22,560 --> 00:31:27,560 Yoxsa yalnız i çap edə və i 1 deyəcəklər. 405 00:31:27,560 --> 00:31:33,770 Biz dinky hazırda, biz digər çərçivəsində getmək əgər, biz binky qədər çıxacağıq bilirik. 406 00:31:33,770 --> 00:31:36,600 Up. İndi binky istəyirik. 407 00:31:36,600 --> 00:31:41,340 Yarısı mənə kəsmə əvvəl siyahısı - - bu funksiya siyahısı 408 00:31:41,340 --> 00:31:52,670 i 0 əgər kimi başladı, sonra biz onu oh_no zəng olacaq, başqa dinky çağırırıq. 409 00:31:52,670 --> 00:31:57,000 Biz i 1 idi, belə ki, dinky çağırıb. 410 00:31:57,000 --> 00:32:05,030 İndi biz əsas geri istəyirik, və əsas yalnız int i = Rand ()% 3 olacaq; 411 00:32:05,030 --> 00:32:08,790 Bu yalnız sizin və ya 0, 1, 2 və ya bir təsadüfi nömrə verə gedir. 412 00:32:08,790 --> 00:32:12,780 Ki sayı binky zəng olacaq, və 0 qayıdacaqlar. 413 00:32:12,780 --> 00:32:16,700 Bu baxaraq, 414 00:32:16,700 --> 00:32:19,880 yalnız dərhal çalışan olmadan əl proqramı vasitəsilə gəzinti 415 00:32:19,880 --> 00:32:25,400 Siz əsas bir fasilə nöqtəsini qurmaq olar, hansı ki, biz proqram çalıştırdığınızda o deməkdir ki, 416 00:32:25,400 --> 00:32:31,020 bir fasilə point xit qədər proqram çalışır. 417 00:32:31,020 --> 00:32:35,450 Proqram çalışan Belə ki, davam edəcək və o, əsas funksiyası edib və yayınlanması durdurulur. 418 00:32:35,450 --> 00:32:44,700 İndi biz əsas daxilində istəyirik, və addım və ya növbəti kodu növbəti line bizə gətirmək niyyətindədir. 419 00:32:44,700 --> 00:32:47,050 Siz addım və ya növbəti edə bilərsiniz. 420 00:32:47,050 --> 00:32:51,800 Sonrakı vuruş, indi i Rand ()% 3, biz i dəyəri çap edə bilərsiniz, müəyyən edilmişdir 421 00:32:51,800 --> 00:32:55,280 və i 1 deyəcəklər. 422 00:32:55,280 --> 00:32:58,110 İndi növbəti addım və ya istifadə olub məsələ yoxdur. 423 00:32:58,110 --> 00:33:01,000 Mən bunu əvvəlki bir mattered tahmin, ancaq sonrakı istifadə etmək istəyirəm. 424 00:33:01,000 --> 00:33:06,000 Biz addım kullanıyorsanız, funksiyası daxil addım olan faktiki şey baxmaq deməkdir 425 00:33:06,000 --> 00:33:07,940 ki binky daxilində baş. 426 00:33:07,940 --> 00:33:10,510 Biz növbəti istifadə, onda funksiyası üzərində getmək deməkdir 427 00:33:10,510 --> 00:33:14,070 və yalnız bizim əsas funksiyası kodu növbəti line gedin. 428 00:33:14,070 --> 00:33:17,900 Burada bu xətt üzrə, mən bunu Rand ()% 3 söylədi idi; 429 00:33:17,900 --> 00:33:21,320 Mən addım idi, bu Rand yerinə getmək olardı 430 00:33:21,320 --> 00:33:25,110 və nə baxmaq və mən Rand funksiyası vasitəsilə addım ola bilər. 431 00:33:25,110 --> 00:33:26,920 Amma Rand funksiyası barədə qayğı yoxdur. 432 00:33:26,920 --> 00:33:30,190 Mən yalnız əsas kodu növbəti line getmək istəyirəm, mən növbəti istifadə edin. 433 00:33:30,190 --> 00:33:35,800 Amma indi binky funksiyası barədə qayğı yoxdur, mən ki, daxil addım istəyirik. 434 00:33:35,800 --> 00:33:37,730 İndi binky oldum. 435 00:33:37,730 --> 00:33:42,040 Kodu ilk line (i == 0), mən bir addım əgər demək gedir, 436 00:33:42,040 --> 00:33:44,930 biz dinky qədər başa görürük. 437 00:33:44,930 --> 00:33:51,620 Biz siyahı şeyi, biz yoxlanılır ki görürsünüzsə i = 0 olur. 438 00:33:51,620 --> 00:33:55,470 , i 0 bərabər deyil, belə ki, başqa şərt getdi 439 00:33:55,470 --> 00:33:59,540 olan dinky (i) zəng etmək üçün gedir. 440 00:33:59,540 --> 00:34:04,030 Siz səhv almaq bilər. 441 00:34:04,030 --> 00:34:07,380 Yalnız birbaşa xətləri baxmaq Əgər düşünə bilər, (i == 0) əgər 442 00:34:07,380 --> 00:34:10,800 tamam, sonra bir addım atdı və indi dinky (i)-də deyiləm 443 00:34:10,800 --> 00:34:14,120 ki, i = 0 və ya bir şey demək olmalıdır bilər. 444 00:34:14,120 --> 00:34:18,980 Xeyr, yalnız bu xətt dinky (i) birbaşa qalmaq edə bilir deməkdir. 445 00:34:18,980 --> 00:34:23,300 I 0 deyil, növbəti addım daha da sona niyyətində deyil. 446 00:34:23,300 --> 00:34:26,239 Else ona dayandırmaq olacaq bir xətt deyil. 447 00:34:26,239 --> 00:34:31,570 Bu, yalnız faktiki olan (i) dinky ki, həyata keçirə bilər, növbəti line getmək olacaq. 448 00:34:31,570 --> 00:34:36,090 Dinky (i) gücləndirməklə, biz bax (i == 1) əgər. 449 00:34:36,090 --> 00:34:42,670 Biz biz addım zaman, biz oh_no ildə başa olacaq bilirik, i = 1 bilmirəm 450 00:34:42,670 --> 00:34:46,489 i = 1 daxil addım bilər funksiyası oh_no, çağırır, çünki 451 00:34:46,489 --> 00:34:52,969 müəyyən edir ki, char ** s = null və dərhal "BOOM" üçün. 452 00:34:54,270 --> 00:34:59,690 Və sonra həqiqətən, buggy2 həyata baxaraq 453 00:34:59,690 --> 00:35:04,590 0, 1 və ya 2 - - zəng binky, bu, i yalnız bir təsadüfi sayı artır 454 00:35:04,590 --> 00:35:10,610 i 0, onda oh_no tutan, başqa bu dinky çağırır burada gəlir. 455 00:35:10,610 --> 00:35:18,100 I, zəng oh_no 1 varsa, başqa, burada gəlir ki, sinsi zəng 456 00:35:18,100 --> 00:35:20,460 i 2 olduqda, oh_no çağırırıq. 457 00:35:20,460 --> 00:35:24,720 Mən hətta bir yol var düşünmürəm - 458 00:35:24,720 --> 00:35:30,030 Hər kəs bu segfault deyil ki, bir proqram edilməsi yolu görür? 459 00:35:30,030 --> 00:35:37,530 Mən bir şey itkin alıram əgər i 0 olduqda, siz dərhal segfault lazımdır, çünki 460 00:35:37,530 --> 00:35:41,250 başqa, siz i segfault 1 Əgər bir funksiyası getmək 461 00:35:41,250 --> 00:35:44,540 başqa siz i əgər 2 segfault bir funksiyası gedin. 462 00:35:44,540 --> 00:35:46,810 Heç nə fərqi Belə ki, segfault. 463 00:35:46,810 --> 00:35:52,380 >> Mən əvəzinə char ** s = NULL bunu olardı təyinat bir yol tapmaq 464 00:35:52,380 --> 00:35:55,610 ki, simli üçün yer malloc bilər. 465 00:35:55,610 --> 00:36:04,230 Sizeof nə - Biz malloc (sizeof) edə bilər? 466 00:36:09,910 --> 00:36:15,190 [Tələbə] (char) * 5? >> Bu hüququ görünür mu? 467 00:36:15,190 --> 00:36:21,060 Mən həqiqətən qaçdı, bu işləyəcək fərz edirəm, lakin mən arıyorum nə deyil. 468 00:36:24,400 --> 00:36:32,940 S növü baxın. Nin int * əlavə edək, belə ki, int * x. 469 00:36:32,940 --> 00:36:35,600 I (sizeof (int)) malloc etmək olardı. 470 00:36:35,600 --> 00:36:40,490 Və ya 5 bir sıra istəyirdi, mən (sizeof (int) * 5) edəcəyini; 471 00:36:40,490 --> 00:36:44,210 Mən bir int ** varsa? 472 00:36:46,260 --> 00:36:49,140 Mən malloc ki? 473 00:36:49,140 --> 00:36:53,510 İmleci və [tələbə] ölçüsü. >> Bəli. (Sizeof (int *)); 474 00:36:53,510 --> 00:36:56,960 Aşağı burada eyni şey. 475 00:36:56,960 --> 00:37:01,280 I (sizeof (char *)) istəyirlər; 476 00:37:06,170 --> 00:37:12,840 Bu, "BOOM" işarə edən göstərici üçün yerin ayrılması gedir. 477 00:37:12,840 --> 00:37:15,330 Mən "BOOM" özü üçün yerin ayrılması lazım deyil 478 00:37:15,330 --> 00:37:17,210 Bu əvvəl dediklərini əsasən ekvivalent çünki 479 00:37:17,210 --> 00:37:20,870 char * Bu x = "BOOM". 480 00:37:20,870 --> 00:37:27,950 "BOOM" zaten var. Bu yaddaş read-yalnız regionda mövcud olur. 481 00:37:27,950 --> 00:37:35,200 S char ** olsa artıq, kodu bu xətt o deməkdir ki, mövcud 482 00:37:35,200 --> 00:37:43,900 sonra * s bir char * və siz "BOOM" qeyd etmək bu char * müəyyən edirik. 483 00:37:43,900 --> 00:37:50,040 Mən s daxil "BOOM" kopya etmək istəyirdi, onda mən s üçün yerin ayrılması lazımdır. 484 00:37:55,170 --> 00:38:03,900 Mən edəcəyik * s = malloc (sizeof (char) * 5); 485 00:38:03,900 --> 00:38:06,210 Niyə 5? 486 00:38:06,210 --> 00:38:10,860 Niyə 4? "BOOM" 4 simvol kimi görünüyor. >> [Tələbə] The null character. 487 00:38:10,860 --> 00:38:14,580 Bəli. Sizin strings Bütün null xarakter lazımdır gedir. 488 00:38:14,580 --> 00:38:23,590 İndi strcat kimi bir şey edə bilərsiniz - bir string çıxarmaq üçün funksiyası nədir? 489 00:38:23,590 --> 00:38:28,520 [Tələbə] cpy? >> Strcpy. 490 00:38:28,520 --> 00:38:32,700 man strcpy. 491 00:38:36,120 --> 00:38:39,590 Belə strcpy ya strncpy. 492 00:38:39,590 --> 00:38:43,410 siz müəyyən edə bilərsiniz ildən strncpy bir az daha təhlükəsiz tam olaraq necə bir çox simvol, 493 00:38:43,410 --> 00:38:46,190 biz bilirik, çünki burada məsələ deyil. 494 00:38:46,190 --> 00:38:50,340 Belə strcpy və dəlilləri baxmaq. 495 00:38:50,340 --> 00:38:53,100 Ilk arqument bizim yerdir. 496 00:38:53,100 --> 00:38:56,770 İkinci arqument bizim mənbəyidir. 497 00:38:56,770 --> 00:39:10,310 Biz təyinat into * surəti olacaq göstəricisidir "BOOM" s. 498 00:39:10,310 --> 00:39:19,820 Niyə əvvəl əvəzinə biz idi yalnız hansı bir strcpy ilə bunu edə bilərsiniz 499 00:39:19,820 --> 00:39:22,800 * s = "BOOM"? 500 00:39:22,800 --> 00:39:28,630 Burada bunu edə bilərsiniz bir səbəb, lakin səbəbi nədir? 501 00:39:28,630 --> 00:39:31,940 [Tələbə] siz "BOOM" bir şey dəyişmək istəyirsinizsə. >> Bəli. 502 00:39:31,940 --> 00:39:37,950 İndi s kimi bir şey edə bilərsiniz [0] = 'X'; 503 00:39:37,950 --> 00:39:48,190 s xal yığın üzrə yığın və yer s işarə edir ki, 504 00:39:48,190 --> 00:39:52,320 "BOOM" saxlanılması olan yığın, daha çox yer bir göstəricisidir. 505 00:39:52,320 --> 00:39:55,150 Belə ki, "BOOM" Bu surəti yığın saxlanılır olunur. 506 00:39:55,150 --> 00:39:58,780 Bizim proqram "BOOM" iki nüsxədə texniki var. 507 00:39:58,780 --> 00:40:03,500 Yalnız bu "BOOM" string daimi verdiyi ki, ilk biri var 508 00:40:03,500 --> 00:40:09,250 və "BOOM" ikinci surəti strcpy "BOOM" surəti yaradılmışdır. 509 00:40:09,250 --> 00:40:13,100 Amma "BOOM" surəti yığın saxlanılır və yığın dəyişmək bilərsiniz olunur. 510 00:40:13,100 --> 00:40:17,250 Bu yığın oxumaq yalnız deyil ki, deməkdir ki, s [0] 511 00:40:17,250 --> 00:40:20,500 siz "BOOM" dəyəri dəyişdirmək imkan gedir. 512 00:40:20,500 --> 00:40:23,130 Bu o simvol dəyişdirmək imkan olacaq. 513 00:40:23,130 --> 00:40:26,640 >> Suallar? 514 00:40:27,740 --> 00:40:29,290 Okay. 515 00:40:29,290 --> 00:40:35,500 >> , Buggy3 üçün edək gdb buggy3 hərəkət. 516 00:40:35,500 --> 00:40:39,840 Biz yalnız run və biz segfault almaq baxın. 517 00:40:39,840 --> 00:40:46,550 Biz backtrace varsa, yalnız iki funksiyaları var. 518 00:40:46,550 --> 00:40:52,970 Biz əsas funksiyası qədər getmək varsa, biz bu xətti segfaulted görürük. 519 00:40:52,970 --> 00:41:00,180 Belə ki, yalnız üçün (bu xətt baxaraq int line = 0; fgets bu məhsulları bərabər NULL edir; 520 00:41:00,180 --> 00:41:03,770 line + +). 521 00:41:03,770 --> 00:41:08,010 Bizim əvvəlki çərçivəsində _IO_fgets adlanırdı. 522 00:41:08,010 --> 00:41:10,720 Siz daxili C funksiyaları ilə bir çox görəcəksiniz 523 00:41:10,720 --> 00:41:15,350 Siz segfault almaq zaman, həqiqətən sirli funksiyası adları olacaq 524 00:41:15,350 --> 00:41:18,090 bu _IO_fgets kimi. 525 00:41:18,090 --> 00:41:21,770 Lakin bu fgets zəng aid olacaq. 526 00:41:21,770 --> 00:41:25,850 Somewhere burada daxili, biz segfaulting olunur. 527 00:41:25,850 --> 00:41:30,340 Biz fgets üçün dəlillər baxsaq, biz tampon çap edə bilərsiniz. 528 00:41:30,340 --> 00:41:41,180 Nin çap edək kimi - no, Oh. 529 00:41:48,980 --> 00:41:51,900 Çap məhz mən istədiyiniz kimi işləmək niyyətində deyil. 530 00:41:55,460 --> 00:41:58,000 Nin faktiki proqram baxaq. 531 00:42:02,200 --> 00:42:09,640 Bufer bir xarakter array edir. Bu 128 simvol bir xarakter sıra var. 532 00:42:09,640 --> 00:42:14,980 Mən çap bufer deyəndə ki, bu 128 simvol çap olacaq 533 00:42:14,980 --> 00:42:18,300 I guess gözlənilir budur. 534 00:42:18,300 --> 00:42:21,390 Mən axtarır, bufer və ünvan Yazdır 535 00:42:21,390 --> 00:42:23,680 lakin həqiqətən mənə çox demək deyil. 536 00:42:23,680 --> 00:42:30,770 Mən burada x bufer qədər demək nə zaman, bu, mənə 0xbffff090 göstərir 537 00:42:30,770 --> 00:42:38,690 siz əvvəl və ya bir baxımdan xatırlayıram varsa, Oxbffff bir yığın-ish rayon olmağa çalışır ki,. 538 00:42:38,690 --> 00:42:46,020 Yığını yalnız 0xc000 altında haradasa başlamaq üçün çalışır. 539 00:42:46,020 --> 00:42:51,890 Məhz bu ünvan görərək, mən bufer yığını baş bilirik. 540 00:42:51,890 --> 00:43:04,500 Bufer, qədər, run, mənim proqram başlatmaqdan biz idi simvol bu ardıcıllıqla gördüm 541 00:43:04,500 --> 00:43:06,530 ki, olduqca çox mənasız edir. 542 00:43:06,530 --> 00:43:12,270 Sonra fayl çap, nə fayl kimi görünür? 543 00:43:15,120 --> 00:43:17,310 [Tələbə] Null. >> Bəli. 544 00:43:17,310 --> 00:43:22,610 , File type Resim * bir, belə bir göstəricisidir 545 00:43:22,610 --> 00:43:26,610 və pointer dəyəri null edir. 546 00:43:26,610 --> 00:43:33,240 Belə fgets, dolayı şəkildə pointer oxu cəhd edir 547 00:43:33,240 --> 00:43:37,320 lakin pointer daxil olmaq üçün, bu dereference bu var. 548 00:43:37,320 --> 00:43:40,550 Yoxsa, bu dereferences ki, işarə etmək lazımdır nə daxil olmaq üçün. 549 00:43:40,550 --> 00:43:43,810 Belə ki, bir null göstərici və segfaults dereferencing edir. 550 00:43:46,600 --> 00:43:48,730 Mən orada yenidən bilərdi. 551 00:43:48,730 --> 00:43:52,170 Biz əsas nöqtədə fasilə və çalıştırıyorsanız, 552 00:43:52,170 --> 00:43:57,320 kodu ilk line char * filename = "nonexistent.txt" dir; 553 00:43:57,320 --> 00:44:00,870 Yəni bu proqram uğursuz nə üçün olduqca böyük ipucu vermək lazımdır. 554 00:44:00,870 --> 00:44:06,080 Mən bu fayl açmaq yerləşir növbəti yazaraq, növbəti line mənə gətirir 555 00:44:06,080 --> 00:44:11,140 və sonra mən dərhal bir dəfə mən növbəti edib bizim xətti, daxil, bu segfault olacaq. 556 00:44:11,140 --> 00:44:16,880 Hər kəs biz segfaulting bilər nə səbəb həyata atmaq istəyir? 557 00:44:16,880 --> 00:44:19,130 [Tələbə] Faylın yoxdur. >> Bəli. 558 00:44:19,130 --> 00:44:22,250 Bu işarə olması ehtimal edilir 559 00:44:22,250 --> 00:44:29,570 bir fayl açılış etdiyiniz zaman fayl həqiqətən olduğunu yoxlamaq lazımdır. 560 00:44:29,570 --> 00:44:31,510 Belə ki, burada "nonexistent.txt"; 561 00:44:31,510 --> 00:44:34,700 Biz oxumaq üçün fopen fayl, biz sonra demək lazım 562 00:44:34,700 --> 00:44:45,870 əgər (fayl == NULL) və printf ("Fayl mövcud deyil!" demək 563 00:44:45,870 --> 00:44:56,340 və ya - hələ yaxşı - fayl); qaytarılması 1; 564 00:44:56,340 --> 00:45:00,300 Belə ki, indi biz bu NULL varsa kontrol 565 00:45:00,300 --> 00:45:03,930 əvvəl həqiqətən davam və faylı oxumaq üçün çalışırıq. 566 00:45:03,930 --> 00:45:08,800 Biz yalnız işləri görmək üçün yeniden yapmak bilər. 567 00:45:11,020 --> 00:45:14,970 Yeni xətt daxil etmək nəzərdə tutulub. 568 00:45:21,090 --> 00:45:25,290 Belə ki, indi nonexistent.txt yoxdur. 569 00:45:26,890 --> 00:45:30,040 Siz həmişə şey bu cür yoxlamaq lazımdır. 570 00:45:30,040 --> 00:45:33,870 Siz həmişə fopen NULL qaytarır görmek üçün yoxlamaq lazımdır. 571 00:45:33,870 --> 00:45:38,170 Siz həmişə malloc NULL qayıtmaq deyil əmin olun olmalıdır 572 00:45:38,170 --> 00:45:41,410 və ya başqa siz segfault. 573 00:45:42,200 --> 00:45:45,930 >> İndi buggy4.c. 574 00:45:49,190 --> 00:45:58,440 Running. Mən giriş və ya bəlkə sonsuz loop gözləyir bu təxmin edirəm. 575 00:45:58,440 --> 00:46:01,870 Bəli, bu sonsuz loop var. 576 00:46:01,870 --> 00:46:05,560 Buggy4 belə. Biz sonsuz loop etdiyiniz kimi görünür. 577 00:46:05,560 --> 00:46:12,590 Biz əsas da qıra bilər, proqram axır. 578 00:46:12,590 --> 00:46:20,180 Gdb olaraq, kimi uzun siz istifadə kısaltma birmənalı olaraq 579 00:46:20,180 --> 00:46:23,420 və ya onlar sizin üçün təmin edən xüsusi ixtisarlar, 580 00:46:23,420 --> 00:46:29,020 sonra yerinə gələn bütün yolu yazın olan sonrakı istifadə etmək n istifadə edə bilərsiniz. 581 00:46:29,020 --> 00:46:33,730 İndi mən bir dəfə təşkil n etdik ki, mən yalnız növbəti davam etmək üçün Enter hit bilər 582 00:46:33,730 --> 00:46:36,640 əvəzinə edib n daxil n daxil n daxil edin malik. 583 00:46:36,640 --> 00:46:44,630 I [i] 0 array yaradılması ki, loop üçün bir növ Ben kimi görünür. 584 00:46:44,630 --> 00:46:50,510 Mən loop üçün bu həyata qırılma heç deyiləm kimi görünür. 585 00:46:50,510 --> 00:46:54,780 Mən çap, belə ki, i 2, onda mən növbəti gedəcəyəm. 586 00:46:54,780 --> 00:46:59,250 Mən növbəti gedəcəyəm, sonra i 3, i çap edəcəyik. 587 00:46:59,250 --> 00:47:05,360 Mən çap bilərsiniz və i 3. Sonrakı, i çap, i 4. 588 00:47:05,360 --> 00:47:14,520 Əslində, çap sizeof (array), belə serialın ölçüsü 20-dir. 589 00:47:16,310 --> 00:47:32,870 Bəzi xüsusi gdb komanda bir şey baş qədər davam üçün var kimi Lakin görünür. 590 00:47:32,870 --> 00:47:37,620 Bu dəyişən dəyəri şərti yaradılması kimi. Amma nə xatırlamıram. 591 00:47:37,620 --> 00:47:44,100 - Biz davam əgər 592 00:47:44,100 --> 00:47:47,120 Nə deyirdilər? Nə qədər gətirmək idi? 593 00:47:47,120 --> 00:47:50,500 [Tələbə] göstərilmir i əlavə mu - >> Bəli. Belə i kömək edə bilər göstərir. 594 00:47:50,500 --> 00:47:54,530 Biz yalnız i Profilə varsa, i dəyəri nə burada qoyacaq 595 00:47:54,530 --> 00:47:56,470 Mən hər zaman çap etmək yoxdur. 596 00:47:56,470 --> 00:48:02,930 Biz yalnız növbəti davam etsək, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5, 0, 1, 2, 3, 4, 5 görürük. 597 00:48:02,930 --> 00:48:08,530 Something olduqca yanlış gedir və i 0 sıfırlamak olunur. 598 00:48:13,330 --> 00:48:22,220 Buggy4.c baxanda biz olur ki, bütün int array [5] görmək; 599 00:48:22,220 --> 00:48:26,200 (i <= sizeof (array) i + + i = 0) 600 00:48:26,200 --> 00:48:28,550 array [i] = 0; 601 00:48:28,550 --> 00:48:31,390 Biz burada yanlış nə görürsünüz? 602 00:48:31,390 --> 00:48:39,480 Bir işarə kimi, mən gdb buggy4 bunu zaman - əsas, run qırmaq edək - 603 00:48:39,480 --> 00:48:45,980 Mən çap sizeof (array) yalnız mən nəhayət çıxmaq lazımdır vəziyyəti nə görmək idi. 604 00:48:47,690 --> 00:48:51,100 Harada am? I run mı? 605 00:48:51,100 --> 00:48:54,280 Mən hələ elan etməyib. 606 00:48:54,280 --> 00:48:58,680 Belə ki, sizeof (array) çap və 20 var 607 00:48:58,680 --> 00:49:06,690 ki, mənim array ölçüsü 5 ildən gözlənilir və 5 integers var edir 608 00:49:06,690 --> 00:49:12,410 belə bütün şey sizeof (int) 4 olmağa çalışır yerləşir 5 * sizeof (int) bytes olmalıdır. 609 00:49:12,410 --> 00:49:14,780 Belə sizeof (array) 20 edir. 610 00:49:14,780 --> 00:49:17,420 Bu nə olmalıdır? 611 00:49:17,420 --> 00:49:21,720 [Tələbə] sizeof (int) bölünür. >> Bəli / sizeof (int). 612 00:49:21,720 --> 00:49:30,630 Bir problem burada hələ var kimi görünür. Mən bu yalnız olmalıdır < 613 00:49:30,630 --> 00:49:36,960 olduqca çox həmişə ildən 00:49:44,860 İndi bu həqiqətən sınıq nə düşünmək bildirin. 615 00:49:44,860 --> 00:49:53,370 Hər kəs niyə i loop hər iteration vasitəsilə 0 guesses sıfırlandığını varmı? 616 00:50:01,300 --> 00:50:09,350 Burada baş verən daxilində yalnız [i] 0 müəyyən edilir array edir. 617 00:50:09,350 --> 00:50:15,350 Belə ki, elə-belə, kod xətti i 0 qurmaq bizim int səbəb olur. 618 00:50:16,730 --> 00:50:23,130 O i bu hissəsi yaddaş əsas, çünki [tələbə] ola bilər 619 00:50:23,130 --> 00:50:27,970 bu serialın növbəti element var? düşünür zaman >> [Bowden] Bəli. 620 00:50:27,970 --> 00:50:33,880 Biz serialın sonunda kənara olduğunuzda, 621 00:50:33,880 --> 00:50:39,870 biz əsas olduğunuz elə ki, yer i dəyəri əsas olunur. 622 00:50:39,870 --> 00:50:48,030 Biz buggy4 baxmaq əgər belə, əsas, run qırmaq 623 00:50:48,030 --> 00:50:53,120 i üçün ünvan çap edək. 624 00:50:53,120 --> 00:50:57,280 Bu bffff124 var kimi görünür. 625 00:50:57,280 --> 00:51:03,930 İndi serialın ünvan çap bildirin [0]. 110. 626 00:51:03,930 --> 00:51:06,290 Nə [1] haqqında? 114. 627 00:51:06,290 --> 00:51:07,920 [2], 118. 628 00:51:07,920 --> 00:51:14,530 11C, 120. array [5] bfff124 edir. 629 00:51:14,530 --> 00:51:26,990 Array Beləliklə [5] i ki, array [5] i deməkdir ki, eyni ünvan var. 630 00:51:26,990 --> 00:51:30,720 Eyni ünvanınız varsa, onlar eyni şey var. 631 00:51:30,720 --> 00:51:38,410 Beləliklə, biz array [5] müəyyən zaman 0, biz 0 i müəyyən edilir. 632 00:51:38,410 --> 00:51:46,070 Və siz yığını baxımından bu barədə düşünüyorsanız, 633 00:51:46,070 --> 00:51:55,590 int i yığını bəzi yer alır deməkdir ki, ilk bəyan edilir. 634 00:51:55,590 --> 00:52:04,730 Sonra array [5] belə sonra 20 bytes yığını üzrə ayrılmış yerləşir. 635 00:52:04,730 --> 00:52:08,400 Belə ki, i sonra bu 20 bytes ayrılmış almaq, ilk ayrılmış olur. 636 00:52:08,400 --> 00:52:11,400 Belə ki, i, sağ array əvvəl baş 637 00:52:11,400 --> 00:52:19,230 və çünki yolu kimi mən, texniki yığını aşağı artır yerləşir, ötən həftə bildirib 638 00:52:19,230 --> 00:52:28,520 bir sıra daxil zaman indeksi, biz təmin edilir ki, array ildə 0th mövqe 639 00:52:28,520 --> 00:52:31,970 həmişə serialın ilk mövqe əvvəl olur. 640 00:52:31,970 --> 00:52:35,900 Bu ötən həftə çəkdi necə növüdür. 641 00:52:35,900 --> 00:52:42,210 Alt biz ünvan 0 və üst biz ünvan Max ki bildirək. 642 00:52:42,210 --> 00:52:44,880 Yığını həmişə aşağı artır. 643 00:52:48,100 --> 00:52:53,500 Gəlin biz i ayrılması demək. 644 00:52:53,500 --> 00:52:59,680 Biz tam ayrılması i edək yalnız burada tam i ayrılmış olur qədər demək deməkdir. 645 00:52:59,680 --> 00:53:06,420 Sonra biz altından o deməkdir ki, 5 integers bizim array, ayrılması 646 00:53:06,420 --> 00:53:11,230 yığını aşağı artır ildən bu 5 integers ayrılmış almaq. 647 00:53:11,230 --> 00:53:15,900 Amma seriallarda iş necə, çünki biz təmin edirik ki, serialın ilk mövqe 648 00:53:15,900 --> 00:53:22,260 həmişə serialın ikinci şey az bir ünvan var. 649 00:53:22,260 --> 00:53:28,270 Belə array mövqe 0 həmişə yaddaş ilk baş var 650 00:53:28,270 --> 00:53:30,700 array mövqe 1 sonra baş var, halbuki 651 00:53:30,700 --> 00:53:33,310 və array mövqeyi 2, ondan sonra baş var 652 00:53:33,310 --> 00:53:37,900 ki array mövqe 0, aşağı burada bir yerdə olur deməkdir 653 00:53:37,900 --> 00:53:40,690 array mövqe 1 ki, yuxarıda olur 654 00:53:40,690 --> 00:53:45,530 qədər hərəkət maksimum ünvan burada çünki ali URL deməkdir. çünki 655 00:53:45,530 --> 00:53:50,490 Aşağı burada array [0] Beləliklə, dizi [1] qədər burada, dizi [2] qədər burada array [3] qədər burada. 656 00:53:50,490 --> 00:53:55,620 Burada i bütün yolu, tam ayrılmış necə əvvəl bildirək 657 00:53:55,620 --> 00:54:01,040 biz array daha çox və daha hərəkət kimi, biz daha sıx və daha bizim tam i əldə edirlər. 658 00:54:01,040 --> 00:54:07,640 Bu, sadəcə, belə ki, bizim array kənarda bir mövqe ki, array [5] olur 659 00:54:07,640 --> 00:54:13,010 məhz i ayrılacaq baş verdiyi tam deyil. 660 00:54:13,010 --> 00:54:16,920 Belə ki, biz yığını üzərində yer vuruş üçün baş nöqtəyə var 661 00:54:16,920 --> 00:54:21,680 ki, tam i ayrılıb və biz 0 qəbulu edirik. 662 00:54:21,680 --> 00:54:26,160 >> Yəni çalışır. Suallar? Bəli. 663 00:54:26,160 --> 00:54:30,710 [Tələbə] ağla etməyin. Okay. 664 00:54:30,710 --> 00:54:33,090 [Tələbə] necə səhvlər bu cür qarşısını almaq edirsiniz? 665 00:54:33,090 --> 00:54:41,190 Səhvlər Bu cür? Sizin proqramlaşdırma dili C istifadə etməyin. 666 00:54:41,190 --> 00:54:45,840 Yoxlanılması array həddi var ki, bir dil istifadə edin. 667 00:54:45,840 --> 00:54:55,900 Kimi uzun siz ehtiyatlı etdiyiniz kimi, yalnız array hüdudlarından keçmiş gedən qarşısını almaq üçün lazımdır. 668 00:54:55,900 --> 00:54:58,300 [Tələbə] Belə ki, burada biz serialın həddi keçmiş getdi - 669 00:54:58,300 --> 00:55:01,840 [Bowden] şeyi yanlış gedir başlamaq harada. >> [Tələbə] Oh, tamam. 670 00:55:01,840 --> 00:55:05,730 Kimi uzun sizin array üçün ayrılmış yaddaş ərzində qalmaq kimi, gözəl istəyirik. 671 00:55:05,730 --> 00:55:12,400 Lakin C heç bir səhv yoxlanılması edir. Mən array Əgər [1000], onu sevə-sevə yalnız baş verir nə dəyişdirmək edəcək - 672 00:55:12,400 --> 00:55:16,500 Bu array əvvəlinə gedir, sonra sonra 1000 mövqelərini gedir və 0 qoyur. 673 00:55:16,500 --> 00:55:20,000 Bu oh, bu, həqiqətən, 1000 şey yoxdur ki, hər hansı yoxlama etmir. 674 00:55:20,000 --> 00:55:22,750 1000, yol mən dəyişdirilməsi lazım nə kənarda 675 00:55:22,750 --> 00:55:26,940 Java və ya bir şey siz həddi indeksi array çıxmaq lazımdır halbuki 676 00:55:26,940 --> 00:55:29,820 və ya həddi istisna indeksi həyata. 677 00:55:29,820 --> 00:55:33,950 Yüksək səviyyəli dil bir çox bu şeylər vardır ki, 678 00:55:33,950 --> 00:55:37,340 Siz array kənarda getmək əgər yerləşir, siz uğursuz 679 00:55:37,340 --> 00:55:40,070 siz altında olan şeyi dəyişə bilməz ki, 680 00:55:40,070 --> 00:55:42,590 və sonra hər şeyi yalnız bir istisna almaq daha pis getmək 681 00:55:42,590 --> 00:55:44,940 siz serialın sonunda çıxan etdi. 682 00:55:44,940 --> 00:55:50,970 [Tələbə] Və biz yalnız dəyişib lazımdır <= yalnız > [Bowden] Bəli. 683 00:55:50,970 --> 00:55:54,800 Bu 00:55:59,560 sizeof (array) 20, lakin biz yalnız 5 ildən istəyirəm. >> [Tələbə] Sağ. 685 00:55:59,560 --> 00:56:04,060 Ətraflı suallar? Okay. 686 00:56:04,060 --> 00:56:07,380 >> [Tələbə] Mən bir sual var. >> Bəli. 687 00:56:07,380 --> 00:56:16,440 [Tələbə] faktiki array dəyişən nədir? 688 00:56:16,440 --> 00:56:20,000 [Bowden] Bəyəndim array nədir? 689 00:56:20,000 --> 00:56:24,930 Array özü rəmzidir. 690 00:56:24,930 --> 00:56:31,490 Bu yalnız biz sened olan 20 bayt start ünvanı. 691 00:56:31,490 --> 00:56:38,070 Siz göstərici kimi hesab edə bilər, lakin sabit göstəricisidir. 692 00:56:38,070 --> 00:56:44,140 Kimi tezliklə şeyi tərtib almaq kimi, dəyişən sıra artıq mövcud deyil. 693 00:56:44,140 --> 00:56:48,210 [Tələbə] Belə ki, necə bu serialın ölçüsünü tapmaq deyil? 694 00:56:48,210 --> 00:56:54,130 Array ölçüsü ki, simvolu aiddir ki, blokun ölçüsü aiddir. 695 00:56:54,130 --> 00:57:01,240 Mən printf kimi bir şey ("% s \ n", dizi) nə zaman; 696 00:57:01,240 --> 00:57:05,140 nin run bildirin. 697 00:57:12,960 --> 00:57:15,530 Mən nə zülm idi? 698 00:57:15,530 --> 00:57:19,220 Array "array 'burada elan etdi. 699 00:57:20,820 --> 00:57:23,200 Oh, qədər burada. 700 00:57:23,200 --> 00:57:31,250 Zınqıltı ağıllı və mən 5 element kimi array elan fark olur 701 00:57:31,250 --> 00:57:34,540 amma mövqeyi 1000 daxil indeksasiyası alıram. 702 00:57:34,540 --> 00:57:38,450 Bu yalnız sabitləri, çünki ki, edə bilərsiniz. 703 00:57:38,450 --> 00:57:43,370 Bu, yalnız mən array kənarda gedirəm ki, hiss günə qədər davam edə bilər. 704 00:57:43,370 --> 00:57:46,880 Lakin, biz i yanlış zaman əvvəl qeyd 705 00:57:46,880 --> 00:57:51,040 o bəlkə, i almaq necə çox dəyərləri müəyyən edə bilməz 706 00:57:51,040 --> 00:57:55,540 belə ki, i serialın sonunda kənara ki, müəyyən edə bilməz. 707 00:57:55,540 --> 00:57:59,430 Bu yalnız ağıllı olan cingilti var. 708 00:57:59,430 --> 00:58:03,340 >> Amma indi buggy4 edir. Mən yanlış nə edirəm? 709 00:58:03,340 --> 00:58:05,970 Dolayısı kitabxana funksiyası "printf" elan. 710 00:58:05,970 --> 00:58:14,960 I # daxil etmək istəyirəm gedirəm. 711 00:58:14,960 --> 00:58:18,710 Okay. İndi buggy4 çalışır. 712 00:58:18,710 --> 00:58:24,840 Kimi serialın dəyəri çap mən bir göstərici kimi çap, burada etdi 713 00:58:24,840 --> 00:58:30,060 bu kimi görünür ki, baskı bir şey - bfb8805c - bəzi ünvan olan 714 00:58:30,060 --> 00:58:33,450 ki, yığın-ish rayon var. 715 00:58:33,450 --> 00:58:41,820 , Array özü bir göstərici kimi, ancaq faktiki göstərici deyil 716 00:58:41,820 --> 00:58:45,410 müntəzəm göstərici ildən biz dəyişə bilərsiniz. 717 00:58:45,410 --> 00:58:54,700 Array yalnız bir sabit deyil. Yaddaş 20 blokları ünvan 0xbfb8805c-da başlanır. 718 00:58:54,700 --> 00:59:09,020 Bu ünvan vasitəsi Belə bfb8805c +20--ya mən -20 tapmaq - 719 00:59:09,020 --> 00:59:17,400 Bu array üçün ayrılmış yaddaş bütün. 720 00:59:17,400 --> 00:59:20,350 Array, dəyişən özü yerdə saxlanılır deyil. 721 00:59:20,350 --> 00:59:27,660 Əgər tərtib etdiyiniz zaman, compiler - bu əl dalğa - 722 00:59:27,660 --> 00:59:33,060 bu sıra bilir yerləşir lakin compiler yalnız istifadə edəcək. 723 00:59:33,060 --> 00:59:36,090 Ki array başlayır ki, bilir 724 00:59:36,090 --> 00:59:40,910 və buna həmişə yalnız əvvəlindən offsets baxımından şeyi edə bilərsiniz. 725 00:59:40,910 --> 00:59:43,960 Bu array təmsil dəyişən özü lazım deyil. 726 00:59:43,960 --> 00:59:53,730 Amma int * p = array kimi bir şey olduqda; indi p ki, array işarə edən bir göstəricisidir 727 00:59:53,730 --> 00:59:57,830 və indi p əslində yığını mövcud deyil. 728 00:59:57,830 --> 01:00:01,950 Mən p dəyişdirmək üçün pulsuz deyiləm. Mən p = malloc edə bilərsiniz. 729 01:00:01,950 --> 01:00:06,500 Belə ki, ilk array qeyd; indi yığın bəzi kosmik göstərir. 730 01:00:06,500 --> 01:00:09,620 Mən array = malloc edə bilməz. 731 01:00:09,620 --> 01:00:13,710 Zınqıltı ağıllı, bu hüququ yarasa off mənə fəğan edəcək. 732 01:00:17,000 --> 01:00:21,430 Əslində, mən gcc də bu edəcəyini olduqca əminəm. 733 01:00:21,430 --> 01:00:25,010 Belə array növü 'int [5] təyin deyil. 734 01:00:25,010 --> 01:00:28,040 Siz bir sıra tipi bir şey atayamayacağı 735 01:00:28,040 --> 01:00:30,500 array yalnız sabit deyil. 736 01:00:30,500 --> 01:00:34,760 O istinadlar həmin 20 bytes rəmzidir. Mən bunu dəyişə bilməz. 737 01:00:34,760 --> 01:00:37,690 >> [Tələbə] Və serialın ölçüsü yerləşir saxlanılır? 738 01:00:37,690 --> 01:00:40,670 [Bowden] Bu yerdə saxlanılır deyil. Bu tərtib zamanı deyil. 739 01:00:40,670 --> 01:00:46,310 Belə ki, serialın ölçüsü yerləşir saxlanılır? 740 01:00:46,310 --> 01:00:51,870 Siz yalnız array özü bəyan edir ki, funksiyası daxilində sizeof (array) istifadə edə bilərsiniz. 741 01:00:51,870 --> 01:01:03,150 Mən bəzi funksiyası, foo, nə və nə əgər (int array []) 742 01:01:03,150 --> 01:01:10,450 printf ("% d \ n", sizeof (array)); 743 01:01:10,450 --> 01:01:21,330 və sonra aşağı burada foo (array) zəng; 744 01:01:21,330 --> 01:01:24,840 bu funksiya daxilində - nin run bildirin. 745 01:01:34,200 --> 01:01:36,840 Bu bir daha ağıllı olan cingilti edir. 746 01:01:36,840 --> 01:01:43,890 Mənə izah ki array funksiyası parametr üzrə sizeof 747 01:01:43,890 --> 01:01:46,690 "int * 'ölçüsü qayıdacaqlar. 748 01:01:46,690 --> 01:01:55,150 Mən nə istədiyini deyil, bu bir səhv olardı. 749 01:01:55,150 --> 01:01:58,960 Nin həqiqətən Werror söndürmək edək. 750 01:02:14,950 --> 01:02:17,590 Warning. Uyarılar cərimə edilir. 751 01:02:17,590 --> 01:02:19,960 Bir xəbərdarlıq var ki, hələ də uzun tərtib edəcək. 752 01:02:19,960 --> 01:02:22,910 . / A.out 4 çap edir. 753 01:02:22,910 --> 01:02:28,650 Istehsal edilmişdir ki, xəbərdarlıq yanlış getdi nə aydın göstəricisidir. 754 01:02:28,650 --> 01:02:34,120 Bu int dizi yalnız sizeof (int *) çap edir. 755 01:02:34,120 --> 01:02:39,790 Mən burada array [5] qoymaq belə, hələ də yalnız sizeof (int *) çap olacaq. 756 01:02:39,790 --> 01:02:47,440 Belə ki, tez bir funksiyası onu keçmək kimi seriallarda və göstəricilər arasında fərq 757 01:02:47,440 --> 01:02:49,670 mövcud deyil. 758 01:02:49,670 --> 01:02:52,640 Bu yığını elan edilmişdir ki, bir sıra olmaq olur 759 01:02:52,640 --> 01:02:58,300 lakin tezliklə biz ki, dəyəri keçmək kimi 0xbf blah, blah, bu funksiya daxil blah, 760 01:02:58,300 --> 01:03:03,350 sonra bu göstərici yığını ki array göstərir. 761 01:03:03,350 --> 01:03:08,310 Sizeof yalnız array elan edilib ki, funksiyası tətbiq deməkdir ki, 762 01:03:08,310 --> 01:03:11,230 deməkdir ki, bu funksiya tərtib zaman 763 01:03:11,230 --> 01:03:17,330 zınqıltı bu funksiya keçir zaman, array ölçüsü 5 bir int dizi olduğunu görür. 764 01:03:17,330 --> 01:03:20,640 Belə ki, o, sizeof (array) görür. Yaxşı ki, 20 var. 765 01:03:20,640 --> 01:03:26,440 Bu sizeof əsasən demək olar ki, bütün hallarda necə həqiqətən var. 766 01:03:26,440 --> 01:03:31,150 Sizeof funksiyası deyil, bir operator var. 767 01:03:31,150 --> 01:03:33,570 Siz sizeof funksiyası zəng etməyin. 768 01:03:33,570 --> 01:03:38,280 Sizeof (int), bu compiler yalnız 4 tərcümə edəcək. 769 01:03:41,480 --> 01:03:43,700 O var? Okay. 770 01:03:43,700 --> 01:03:47,520 >> [Tələbə] Beləliklə əsas və foo ildə sizeof (array) arasında fərq nədir? 771 01:03:47,520 --> 01:03:52,840 Biz növü int * edən sizeof (array), deyərək edirik, çünki bu 772 01:03:52,840 --> 01:03:57,120 serialın aşağı burada deyil növü int üçün * halbuki, bu int dizi var. 773 01:03:57,120 --> 01:04:04,540 >> [Tələbə] Beləliklə, siz array [] əvəzinə int * sıra parametre olsaydı, 774 01:04:04,540 --> 01:04:09,230 indi bir göstərici deyil, çünki hələ array dəyişə bilər ki, demək istəyirsiniz? 775 01:04:09,230 --> 01:04:14,250 [Bowden] Bu kimi? >> [Tələbə] Bəli. İndi funksiyası ərzində array dəyişə bilərəm? 776 01:04:14,250 --> 01:04:18,420 [Bowden] Siz həm hallarda array dəyişə bilər. 777 01:04:18,420 --> 01:04:23,130 Bu hallarda, həm də siz array [4] = 0 Cavab pulsuz. 778 01:04:23,130 --> 01:04:26,590 [Tələbə] Amma siz başqa bir şey array point etmək olar? 779 01:04:26,590 --> 01:04:30,230 [Bowden] Oh. Bəli. Hər iki halda - >> [tələbə] Bəli. 780 01:04:30,230 --> 01:04:38,410 [Bowden] array [] və bir int * array arasında fərq yoxdur. 781 01:04:38,410 --> 01:04:42,570 Siz həmçinin burada bəzi çoxölçülü sıra əldə edə bilərsiniz 782 01:04:42,570 --> 01:04:47,050 bəzi əlverişli sintaksis üçün, lakin yalnız bir göstərici var. 783 01:04:47,050 --> 01:04:56,400 Bu array etmək uzağam deməkdir = malloc (sizeof (int)); və indi başqa bir yerdə qeyd. 784 01:04:56,400 --> 01:04:59,610 Lakin, bu əbədi və həmişə necə istəyirəm 785 01:04:59,610 --> 01:05:03,210 edilməsi bu array dəyişən başqa bir şey qeyd 786 01:05:03,210 --> 01:05:07,570 o, dəlil surəti çünki burada bu array aşağı dəyişmir 787 01:05:07,570 --> 01:05:10,780 bu arqument bir göstərici deyil. 788 01:05:10,780 --> 01:05:16,070 Və həqiqətən, yalnız eyni olduğunu daha göstəricisi kimi - 789 01:05:16,070 --> 01:05:21,100 Biz artıq çap sıra baskı nə gördüm - 790 01:05:21,100 --> 01:05:31,410 nə biz serialın ünvanı və ya serialın ünvanı ünvanı çap əgər 791 01:05:31,410 --> 01:05:36,290 o ya da? 792 01:05:41,770 --> 01:05:45,220 Bu bir ignore edək. 793 01:05:48,140 --> 01:05:51,660 Okay. Bu gözəl edir. İndi. / A.out çalışan edir. 794 01:05:51,660 --> 01:06:00,220 Çap array, sonra serialın ünvan çap, eyni şey var. 795 01:06:00,220 --> 01:06:02,870 Array yalnız mövcud deyil. 796 01:06:02,870 --> 01:06:08,190 Bu array çap etdiyiniz zaman, bu 20 bayt edir ki, simvolu çap edirik bilir. 797 01:06:08,190 --> 01:06:11,940 Serialın ünvanı çap, yaxşı, dizi yoxdur. 798 01:06:11,940 --> 01:06:17,200 Bu ünvan mövcut deyil, belə ki, yalnız 20 bayt ünvan görüntüler. 799 01:06:20,820 --> 01:06:28,150 Tez aşağı tərtib kimi, sizin tərtib buggy4 kimi. / A.out 800 01:06:28,150 --> 01:06:30,340 array mövcud deyil. 801 01:06:30,340 --> 01:06:33,640 Pointers mövcuddur. Diziler deyil. 802 01:06:34,300 --> 01:06:38,060 Serialın təmsil yaddaş blokları hələ mövcud 803 01:06:38,060 --> 01:06:43,270 lakin dəyişən array və növü dəyişənlərin yoxdur. 804 01:06:46,260 --> 01:06:50,270 Bu seriallarda və göstəricilər arasında əsas fərqlər kimi 805 01:06:50,270 --> 01:06:55,590 tez funksiyası zəng etmək kimi, heç bir fərq yoxdur. 806 01:06:55,590 --> 01:07:00,460 Amma daxilində array özü bəyan edir ki, funksiyası, sizeof fərqli işləyir 807 01:07:00,460 --> 01:07:05,190 yerine növü ölçüsü bloklarının ölçüsü çap edirik bəri, 808 01:07:05,190 --> 01:07:08,950 bir rəmzi, çünki siz dəyişə bilməz. 809 01:07:08,950 --> 01:07:14,370 Şey şey və ünvanı Çap eyni şey görüntüler. 810 01:07:14,370 --> 01:07:18,480 Və bu olduqca çox var. 811 01:07:18,480 --> 01:07:20,820 [Tələbə] ki, bir daha deyə bilərsinizmi? 812 01:07:21,170 --> 01:07:24,170 Mən bir şey buraxılmış ola bilər. 813 01:07:24,170 --> 01:07:29,260 Array çap sıra və ünvanı, eyni şey yazdıran 814 01:07:29,260 --> 01:07:33,180 Siz göstərici üçün ünvan qarşı bir pointer çap əgər halbuki, 815 01:07:33,180 --> 01:07:36,010 bir şey işarə etdiyiniz nə ünvan yazdıran, 816 01:07:36,010 --> 01:07:40,360 digər yığını üzrə göstərici üçün ünvan görüntüler. 817 01:07:40,360 --> 01:07:47,040 Siz göstərici dəyişə bilərsiniz; bir sıra rəmzi dəyişə bilməz. 818 01:07:47,740 --> 01:07:53,270 Və sizeof pointer ki pointer növü ölçüsü çap edir. 819 01:07:53,270 --> 01:07:57,470 Belə ki, int * p sizeof (p), 4 çap edir 820 01:07:57,470 --> 01:08:04,110 lakin int array [5] print sizeof (array) 20 çap edir. 821 01:08:04,110 --> 01:08:07,480 [Tələbə] Belə int array [5] 20 çap edəcək? >> Bəli. 822 01:08:07,480 --> 01:08:13,300 Niyə daxilində buggy4 ki sizeof (array) olmaq üçün istifadə zaman var 823 01:08:13,300 --> 01:08:16,660 bu i <20 edirdi ki, bu biz nə istədiyini deyil. 824 01:08:16,660 --> 01:08:20,880 Biz i <5 istəyirik. >> [Tələbə] Okay. 825 01:08:20,880 --> 01:08:25,569 [Bowden] Və sonra tez funksiyaları keçən başlamaq kimi, 826 01:08:25,569 --> 01:08:34,340 Biz əgər int * p = array; 827 01:08:34,340 --> 01:08:39,779 bu funksiya daxilində biz əsasən, eyni yolla p və array istifadə edə bilərsiniz 828 01:08:39,779 --> 01:08:43,710 bu sizeof problem və dəyişən problem istisna olmaqla. 829 01:08:43,710 --> 01:08:49,810 Amma p [0] = 1; array [0] = 1 söyləyərək eyni; 830 01:08:49,810 --> 01:08:55,600 Və tezliklə biz foo (array) demək kimi və ya foo (p); 831 01:08:55,600 --> 01:08:59,760 bu foo funksiyası daxilində, bu iki dəfə eyni çağırışdır. 832 01:08:59,760 --> 01:09:03,350 Bu iki zənglər arasında heç bir fərq yoxdur. 833 01:09:07,029 --> 01:09:11,080 >> Ki, yaxşı hər kəs? Okay. 834 01:09:14,620 --> 01:09:17,950 Biz 10 dəqiqə var. 835 01:09:17,950 --> 01:09:28,319 >> Biz bu Hacker Daktilograf proqramı vasitəsilə almaq üçün cəhd edəcəyik 836 01:09:28,319 --> 01:09:32,350 keçən il və ya bir şey çıxdı ki, bu veb. 837 01:09:34,149 --> 01:09:41,100 Siz təsadüfi yazın və çap kimi yalnız ehtimal edir - 838 01:09:41,100 --> 01:09:46,729 Nə olursa olsun faylı yükləmiş olur siz yazaraq olduğunuz kimi görünür. 839 01:09:46,729 --> 01:09:52,069 Bu əməliyyat sistemi kodu bir növ kimi görünür. 840 01:09:53,760 --> 01:09:56,890 Yəni biz həyata istəyirəm nə. 841 01:10:08,560 --> 01:10:11,690 Siz hacker_typer adlı bir ikili çalıştırılabilir olmalıdır 842 01:10:11,690 --> 01:10:14,350 ki, fayl, bir dəlilinin edir "hacker növü." 843 01:10:14,350 --> 01:10:16,480 Yürütülebilir Running ekranı silmək lazımdır 844 01:10:16,480 --> 01:10:20,850 və sonra istifadəçi presleri əsas hər dəfə qəbul olan faylı bir xarakter çap. 845 01:10:20,850 --> 01:10:24,990 Siz basın hər hansı əsas Belə ki, üz atmaq əvəzinə faylı bir xarakter çap etməli 846 01:10:24,990 --> 01:10:27,810 ki dəlildir. 847 01:10:29,880 --> 01:10:34,350 Mən olduqca çox biz bilmək lazımdır olacaq şeyləri nə deyim. 848 01:10:34,350 --> 01:10:36,440 Amma biz termios kitabxana kontrol etmək istəyirəm. 849 01:10:36,440 --> 01:10:44,840 Mən bütün həyatı bu kitabxana istifadə heç vaxt, belə ki, çox minimal məqsədləri var. 850 01:10:44,840 --> 01:10:48,610 Amma bu sizə hit xarakteri tullamaq üçün istifadə edə bilərsiniz kitabxana olacaq 851 01:10:48,610 --> 01:10:52,390 Daxil standart daxil yazaraq zaman 852 01:10:56,970 --> 01:11:05,840 Belə hacker_typer.c və biz # daxil etmək istəyirəm olacaq. 853 01:11:05,840 --> 01:11:12,870 Termios üçün adam səhifə baxanda - Ben bu terminal OS və ya bir şey guessing - 854 01:11:12,870 --> 01:11:16,240 Mən oxumaq üçün necə bilmirəm. 855 01:11:16,240 --> 01:11:21,040 Bu baxıldığında, bu 2 faylları daxil etmək üçün deyir ki, biz bunu edəcəyik. 856 01:11:37,620 --> 01:11:46,820 >> Ilk şey ilk, biz açmalıdır fayl olan bir arqument etmək istəyirəm. 857 01:11:46,820 --> 01:11:52,420 Mən nə istəyirəm? Nasıl bir arqument var kontrol edə bilərəm? 858 01:11:52,420 --> 01:11:56,480 [Tələbə] argc o təşkil edin. >> [Bowden] Bəli. 859 01:11:56,480 --> 01:12:21,250 Beləliklə, əgər (argc = 2!) Printf ("user:% s [fayl açmaq üçün]"). 860 01:12:21,250 --> 01:12:32,750 Mən ikinci dəlil olmadan bu run Əgər indi - oh, mən yeni xətt lazımdır - 861 01:12:32,750 --> 01:12:36,240 siz onu deyir istifadə görürsünüz:. / hacker_typer, 862 01:12:36,240 --> 01:12:39,770 və sonra ikinci mübahisə mən açmaq, istədiyiniz faylı olmalıdır. 863 01:12:58,430 --> 01:13:01,260 İndi mən nə etməliyəm? 864 01:13:01,260 --> 01:13:08,490 Mən bu faylı oxumaq istəyirəm. Nasıl faylı oxuyursunuz? 865 01:13:08,490 --> 01:13:11,920 [Tələbə] Siz ilk açın. >> Bəli. 866 01:13:11,920 --> 01:13:15,010 Belə fopen. Fopen necə görünür? 867 01:13:15,010 --> 01:13:22,980 [Tələbə] Fayl. >> [Bowden] Fayl argv [1] olacaq. 868 01:13:22,980 --> 01:13:26,110 [Tələbə] Sonra nə ilə etmək istəyirəm, belə ki, - >> [Bowden] Bəli. 869 01:13:26,110 --> 01:13:28,740 Yadınızdadırsa etmədi Belə ki, siz adam fopen nə yalnız ola bilər 870 01:13:28,740 --> 01:13:32,960 bu yol fayl olduğu İnşaat char * yol olacaq, burada 871 01:13:32,960 --> 01:13:34,970 İnşaat char * rejimi. 872 01:13:34,970 --> 01:13:38,660 Siz rejimi nə xatırlamıram başına, onda rejimi üçün baxa bilərsiniz. 873 01:13:38,660 --> 01:13:44,660 Man pages İçəridə çizgi xarakter şeyi axtarmaq üçün istifadə edə bilərsiniz edir. 874 01:13:44,660 --> 01:13:49,790 Mən rejimi üçün axtarış / mode yazın. 875 01:13:49,790 --> 01:13:57,130 n və N axtarış oyunları vasitəsilə dövrü üçün istifadə edə bilərsiniz edir. 876 01:13:57,130 --> 01:13:59,800 Burada simli üçün dəlil rejimi bal deyir 877 01:13:59,800 --> 01:14:01,930 aşağıdakı ardıcıllığı biri ilə başlayan. 878 01:14:01,930 --> 01:14:06,480 Oxu r Belə ki, Açıq mətn faylı. Yəni etmək istəyirəm nə. 879 01:14:08,930 --> 01:14:13,210 Oxu, mən ki, saxlamaq istədiyiniz üçün. 880 01:14:13,210 --> 01:14:18,720 Şey bir Resim * olacaq. İndi mən nə istəyirəm nə? 881 01:14:18,720 --> 01:14:21,200 Mənə bir ikinci verin. 882 01:14:28,140 --> 01:14:30,430 Okay. İndi mən nə istəyirəm nə? 883 01:14:30,430 --> 01:14:32,940 [Tələbə] bu NULL var yoxlayın. >> [Bowden] Bəli. 884 01:14:32,940 --> 01:14:38,690 Bir fayl açmaq hər zaman, siz uğurla açmaq arxayın olun. 885 01:14:58,930 --> 01:15:10,460 >> Mən ilk mənim cari ayarları oxumaq istədiyiniz İndi ki termios stuff etmək istəyirəm 886 01:15:10,460 --> 01:15:14,050 və bir o saxlamaq, sonra mənim ayarlarını dəyişdirmək üçün istədiyiniz 887 01:15:14,050 --> 01:15:19,420 , mən yazın ki, hər hansı simvol üz atmaq 888 01:15:19,420 --> 01:15:22,520 və sonra mən bu ayarlarını güncellemek istəyirəm. 889 01:15:22,520 --> 01:15:27,250 Və sonra proqramın sonunda, mən orijinal ayarları geri dəyişdirmək istəyirik. 890 01:15:27,250 --> 01:15:32,080 Belə ki, struct növü termios ilə olacaq və mən bu iki istəyirəm gedirəm. 891 01:15:32,080 --> 01:15:35,600 Birincisi, mənim current_settings olacaq 892 01:15:35,600 --> 01:15:42,010 və onlar mənim hacker_settings olmaq olacaq. 893 01:15:42,010 --> 01:15:48,070 Birincisi, mən, mənim cari ayarları saxlamaq istəyirsinizsə gedirəm 894 01:15:48,070 --> 01:15:53,790 sonra I, hacker_settings güncellemek istəyirsinizsə gedirəm 895 01:15:53,790 --> 01:16:01,570 və sonra mənim proqramının sonunda gəlmişkən, mən cari ayarları geri istəyirəm. 896 01:16:01,570 --> 01:16:08,660 Beləliklə, biz insan termios çalışır ki, yolu, cari ayarları qənaət. 897 01:16:08,660 --> 01:16:15,810 Biz bu int tcsetattr, int tcgetattr ki, görürük. 898 01:16:15,810 --> 01:16:22,960 Mən onun göstərici bir termios struct ilə keçir. 899 01:16:22,960 --> 01:16:30,640 Bu görünür yolu - I've artıq funksiyası adlanır nə unudulmuş. 900 01:16:30,640 --> 01:16:34,930 Kopyalayın ve yapışdırıb. 901 01:16:39,150 --> 01:16:45,500 Tcgetattr Belə ki, sonra, mən də məlumat qənaət edirəm ki, struct keçmək istəyirəm 902 01:16:45,500 --> 01:16:49,650 olan current_settings olacaq 903 01:16:49,650 --> 01:16:59,120 və ilk dəlil I atributları saxlamaq istədiyiniz şey üçün fayl descriptor edir. 904 01:16:59,120 --> 01:17:04,360 Nə fayl descriptor sizə bir fayl açmaq hər zaman kimi, bir fayl descriptor alır. 905 01:17:04,360 --> 01:17:14,560 Mən fopen argv [1], bu sened olan bir fayl descriptor alır 906 01:17:14,560 --> 01:17:16,730 Onu oxumaq və ya yazmaq üçün zaman. 907 01:17:16,730 --> 01:17:19,220 Mən burada istifadə etmək istədiyiniz fayl descriptor deyil. 908 01:17:19,220 --> 01:17:21,940 Siz ismarıcları var üç fayl descriptors var 909 01:17:21,940 --> 01:17:24,310 olan standart həyata və standart səhv standart var. 910 01:17:24,310 --> 01:17:29,960 Mənim cari olaraq, mən bunu 0, standart həyata 1 və standart səhv 2-dir standart hesab edirəm. 911 01:17:29,960 --> 01:17:33,980 Belə ki, nə mən ayarlarını dəyişdirmək istəyirsiniz? 912 01:17:33,980 --> 01:17:37,370 Mən bir xarakter hit zaman və parametrləri dəyişdirmək istədiyiniz 913 01:17:37,370 --> 01:17:41,590 Mən bunu yerinə ekran üçün çap üz ki, karakter atmaq istəyirəm. 914 01:17:41,590 --> 01:17:45,960 Nə axın - - standart həyata, və ya standart səhv, standart 915 01:17:45,960 --> 01:17:52,050 Mən klaviatura ilə yazın zaman şeyə cavab? >> >> Bəli daxil [tələbə] Standard. 916 01:17:52,050 --> 01:17:56,450 Mən ya 0 edə bilərsiniz və ya stdin edə bilərsiniz. 917 01:17:56,450 --> 01:17:59,380 Mən daxil standart current_settings alıram 918 01:17:59,380 --> 01:18:01,720 >> İndi, bu ayarları güncellemek istəyirsinizsə 919 01:18:01,720 --> 01:18:07,200 belə ilk mənim current_settings nə hacker_settings daxil surəti lazımdır. 920 01:18:07,200 --> 01:18:10,430 Və structs iş necə yalnız surəti olacaq. 921 01:18:10,430 --> 01:18:14,510 Beklediğiniz kimi Bu, bütün sahələrində nüsxə. 922 01:18:14,510 --> 01:18:17,410 >> İndi sahələrində bəzi yeniləmək istəyirəm. 923 01:18:17,410 --> 01:18:21,670 Termios baxanda, bu bir çox vasitəsilə oxumaq olacaq 924 01:18:21,670 --> 01:18:24,110 yalnız sizin üçün baxmaq istəyirəm nə, 925 01:18:24,110 --> 01:18:28,210 lakin sizin üçün baxmaq istəyirəm olacaq bayraqları, echo var 926 01:18:28,210 --> 01:18:33,110 belə Echo daxil simvol ECHO. 927 01:18:33,110 --> 01:18:37,710 Birinci mən qurmaq istəyirik - sahəsində nə artıq unudulmuş I've. 928 01:18:45,040 --> 01:18:47,900 Bu struct kimi görünür. 929 01:18:47,900 --> 01:18:51,060 Giriş rejimi Mən biz dəyişdirmək istədiyiniz edirəm. 930 01:18:51,060 --> 01:18:54,210 Biz ki, dəyişdirmək istədiyiniz nə əmin həll baxmaq lazımdır. 931 01:19:04,060 --> 01:19:12,610 Biz bütün bu nəzər ehtiyac qarşısını almaq üçün lflag dəyişmək istəyirəm. 932 01:19:12,610 --> 01:19:14,670 Biz yerli rejimi dəyişdirmək istəyirik. 933 01:19:14,670 --> 01:19:17,710 Siz hər şeyi aid olduğu anlamaq üçün bütün bu şey vasitəsilə oxumaq olacaq 934 01:19:17,710 --> 01:19:19,320 biz dəyişdirmək istəyirik. 935 01:19:19,320 --> 01:19:24,120 Amma biz dəyişdirmək istədiyiniz olacaq yerləşir yerli rejimi daxilində var. 936 01:19:27,080 --> 01:19:33,110 Belə hacker_settings.cc_lmode o deyirlər edir. 937 01:19:39,630 --> 01:19:43,020 c_lflag. 938 01:19:49,060 --> 01:19:52,280 Biz bitwise operatorları daxil yerdir. 939 01:19:52,280 --> 01:19:54,860 Biz həyata cür istəyirik, ancaq real tez keçmək lazımdır. 940 01:19:54,860 --> 01:19:56,600 Biz bitwise operatorları daxil bu ki, 941 01:19:56,600 --> 01:19:59,950 Hesab edirəm ki, harada bir zaman uzun əvvəl bildirib ki, siz bayraqları ilə məşğul başlamaq zaman, 942 01:19:59,950 --> 01:20:03,370 siz bitwise operator bir çox istifadə olacaq. 943 01:20:03,370 --> 01:20:08,240 Bayrağı hər bit davranış bir növ uyğundur. 944 01:20:08,240 --> 01:20:14,090 Belə ki, burada, bu bayraq onların bütün fərqli bir şey demək yerləşir müxtəlif əşyalar, bir dəstə var. 945 01:20:14,090 --> 01:20:18,690 Amma nə etmək istədiklərini yalnız ECHO cavab verən bit söndürmək olunur. 946 01:20:18,690 --> 01:20:25,440 Belə çevirmək ki, mən off & = ¬ ECHO. 947 01:20:25,440 --> 01:20:30,110 Əslində, mən bunu tECHO və ya bir şey kimi düşünürəm. Mən yenidən yoxlamaq üçün gedirəm. 948 01:20:30,110 --> 01:20:34,050 Mən bunu termios bilər. Bu yalnız ECHO oldu. 949 01:20:34,050 --> 01:20:38,440 ECHO bir az olacaq. 950 01:20:38,440 --> 01:20:44,230 ¬ ECHO bütün bayraqları doğru müəyyən edilir deməkdir ki, bütün bit 1 qurmaq deməkdir gedir 951 01:20:44,230 --> 01:20:47,140 bu ECHO bit istisna olmaqla. 952 01:20:47,140 --> 01:20:53,830 Bu mənim yerli bayraqları bitən görə, hazırda doğru müəyyən olunur ki, bütün bayraqları deməkdir 953 01:20:53,830 --> 01:20:56,520 hələ doğru müəyyən olunacaq. 954 01:20:56,520 --> 01:21:03,240 Mənim ECHO bayrağı doğru qurmaq, onda bu mütləq ECHO bayrağı saxta müəyyən edilir. 955 01:21:03,240 --> 01:21:07,170 Belə kodu bu xətt yalnız ECHO bayrağı sönür. 956 01:21:07,170 --> 01:21:16,270 Kodu digər xətləri, Mən onlara vaxt maraq seçin və sonra onları izah edəcəyik. 957 01:21:27,810 --> 01:21:30,180 Həllində, o, 0 deyib. 958 01:21:30,180 --> 01:21:33,880 Bu aydın stdin demək, yəqin ki, daha yaxşıdır. 959 01:21:33,880 --> 01:21:42,100 >> Burada ICANON | Mən də ECHO edirəm edək ki,. 960 01:21:42,100 --> 01:21:46,650 ICANON canonical rejimi deməkdir ayrı bir şey deməkdir. 961 01:21:46,650 --> 01:21:50,280 Siz command line həyata yazaraq etdiyiniz zaman nə canonical rejimi vasitələri, adətən 962 01:21:50,280 --> 01:21:54,670 siz newline hit qədər standart bir şey emal deyil. 963 01:21:54,670 --> 01:21:58,230 Beləliklə, siz GetString zaman, siz newline edib, sonra şeyi bir dəstə yazın. 964 01:21:58,230 --> 01:22:00,590 Bu da standart göndərilən zamanı ki, 965 01:22:00,590 --> 01:22:02,680 Bu u mənim deyil. 966 01:22:02,680 --> 01:22:05,830 Sizə basın indi hər bir xarakter canonical rejimində söndürmək zaman 967 01:22:05,830 --> 01:22:10,910 nə, bu şeylər emal yavaş, çünki adətən pis növ olan emal olur olunur 968 01:22:10,910 --> 01:22:14,330 o bütün xətləri daxil bufer yaxşı nə olan. 969 01:22:14,330 --> 01:22:16,810 Amma hər bir xarakter emal olunsun 970 01:22:16,810 --> 01:22:18,810 Mən newline hit üçün gözləmək istəmirsinizsə ildən 971 01:22:18,810 --> 01:22:21,280 bütün simvol emal əvvəl yazaraq etdik. 972 01:22:21,280 --> 01:22:24,760 Bu canonical rejimi sönür. 973 01:22:24,760 --> 01:22:31,320 Faktiki simvol emal Bu məhsulları yalnız deməkdir. 974 01:22:31,320 --> 01:22:35,830 , Tezliklə mən yazmaq edirəm onları emal, bu dərhal emal deməkdir. 975 01:22:35,830 --> 01:22:42,510 Və bu, standart üçün ayarları yenilənməsi olan funksiyası 976 01:22:42,510 --> 01:22:45,480 və TCSA vasitəsilə indi bunu. 977 01:22:45,480 --> 01:22:50,310 Axın hazırda hər şeyi emal qədər başqa variantları gözləyin olunur. 978 01:22:50,310 --> 01:22:52,030 Ki, həqiqətən məsələ deyil. 979 01:22:52,030 --> 01:22:56,920 Yalnız indi mənim ayarları hacker_typer_settings hazırda nə olacaq dəyişir. 980 01:22:56,920 --> 01:23:02,210 Mən hacker_settings adlı tapmaq, belə ki, dəyişdirmək imkan verir. 981 01:23:09,610 --> 01:23:13,500 Hacker_settings hər şey dəyişir. 982 01:23:13,500 --> 01:23:16,870 >> İndi proqramın sonunda biz geri istəyirəm olacaq 983 01:23:16,870 --> 01:23:20,210 normal_settings daxilində hazırda nə üçün, 984 01:23:20,210 --> 01:23:26,560 olan yalnız və normal_settings kimi baxmaq edir. 985 01:23:26,560 --> 01:23:30,650 Mən ilk bu əldə bəri mənim normal_settings heç dəyişməyib edək. 986 01:23:30,650 --> 01:23:34,520 Sonra geri dəyişdirmək, mən sonunda geri keçir. 987 01:23:34,520 --> 01:23:38,390 Bu yeniləmə idi. Okay. 988 01:23:38,390 --> 01:23:43,900 >> Daxili burada İndi mən yalnız vaxt maraq kodu izah edəcəyik. 989 01:23:43,900 --> 01:23:46,350 Bu çox kodu deyil. 990 01:23:50,770 --> 01:24:03,750 Biz faylı bir xarakter oxumaq baxın. Biz f çağırıb. 991 01:24:03,750 --> 01:24:07,850 İndi insan fgetc bilər, lakin necə fgetc iş gedir 992 01:24:07,850 --> 01:24:11,910 yalnız yalnız oxumaq və ya EOF ki, karakter geri olacaq ki, 993 01:24:11,910 --> 01:24:15,680 olan fayl və ya bir səhv baş sonunda uyğundur. 994 01:24:15,680 --> 01:24:19,900 Biz, faylı bir xarakter oxumaq üçün davam loop olunur 995 01:24:19,900 --> 01:24:22,420 biz oxumaq simvol tökülmək kadar. 996 01:24:22,420 --> 01:24:26,650 Biz bunu etdiyiniz zaman, biz daxil standart bir tək xarakteri gözləyin 997 01:24:26,650 --> 01:24:29,090 Hər bir zaman siz command line bir şey yazın 998 01:24:29,090 --> 01:24:32,820 daxil standart bir xarakter oxu ki, 999 01:24:32,820 --> 01:24:38,330 Sonra putchar yalnız biz fayl standart həyata buraya qədər oxumaq char qoymaq niyyətindədir. 1000 01:24:38,330 --> 01:24:42,890 Siz insan putchar bilər, lakin bu, yalnız standart həyata qoyulması edir ki, bu xarakterli çap edir. 1001 01:24:42,890 --> 01:24:51,600 Eyni fikir; Ayrıca yalnız printf ("% c", c) ola bilər. 1002 01:24:53,330 --> 01:24:56,670 Yəni bizim iş toplu etmək olacaq. 1003 01:24:56,670 --> 01:25:00,300 >> Biz istəyirik olacaq son şey yalnız fayl fclose edir. 1004 01:25:00,300 --> 01:25:03,310 Siz fclose deyilsə, bir yaddaş sızıntısı var. 1005 01:25:03,310 --> 01:25:06,680 Biz ilk açılan fayl fclose istəyirəm və mən ki, düşünürəm. 1006 01:25:06,680 --> 01:25:13,810 Ki, etmək, mən artıq problemlər var. 1007 01:25:13,810 --> 01:25:17,260 Bakalým. 1008 01:25:17,260 --> 01:25:19,960 Nə şikayət etdi? 1009 01:25:19,960 --> 01:25:30,220 Gözlənilən "int", lakin dəlil növü 'struct _IO_FILE *' edir. 1010 01:25:36,850 --> 01:25:39,370 Ki, işləyir, əgər biz görəcəksiniz. 1011 01:25:45,210 --> 01:25:53,540 Yalnız C99 yol. Augh. OK, hacker_typer edir. 1012 01:25:53,540 --> 01:25:57,760 İndi biz daha faydalı təsviri almaq. 1013 01:25:57,760 --> 01:25:59,900 Belə bəyan identifikatoru "normal_settings" istifadə. 1014 01:25:59,900 --> 01:26:04,170 Mən bunu normal_settings zəng etməyib. Mən bunu current_settings çağırıb. 1015 01:26:04,170 --> 01:26:12,090 Belə ki, bütün dəyişdirmək imkan verir. 1016 01:26:17,920 --> 01:26:21,710 İndi mübahisə keçən. 1017 01:26:26,290 --> 01:26:29,500 Mən indi bu 0 edəcəyik. 1018 01:26:29,500 --> 01:26:36,720 Okay. . / Hacker_typer cp.c. 1019 01:26:36,720 --> 01:26:39,590 Mən də başında ekran sil vermədi. 1020 01:26:39,590 --> 01:26:42,960 Amma siz ekran sil necə son problem set geri baxa bilərsiniz. 1021 01:26:42,960 --> 01:26:45,160 Bu, sadəcə bir neçə simvol çap edir 1022 01:26:45,160 --> 01:26:47,210 bu nə istəyirəm nə isə. 1023 01:26:47,210 --> 01:26:48,900 Okay. 1024 01:26:48,900 --> 01:26:55,280 Bu əvəzinə stdin 0 olmaq üçün lazım nə haqqında düşünür, 1025 01:26:55,280 --> 01:27:00,560 olan # 0 müəyyən edilməlidir 1026 01:27:00,560 --> 01:27:03,890 ki, bu şikayət - 1027 01:27:13,150 --> 01:27:19,360 I fayl descriptors olduğunu bildirib, lakin sonra siz də Resim * zaman əvvəl, 1028 01:27:19,360 --> 01:27:23,210 bir fayl descriptor, yalnız bir tam deyil 1029 01:27:23,210 --> 01:27:26,970 bir Resim * Bugün heyəti bütün dəstə var halbuki. 1030 01:27:26,970 --> 01:27:30,380 Yerine stdin 0 demək lazımdır səbəbi 1031 01:27:30,380 --> 01:27:37,480 ki stdin fayl descriptor 0 sened olduğu şey işarə edən bir Resim * edir. 1032 01:27:37,480 --> 01:27:45,070 Belə ki, hətta qədər burada fopen nə zaman (argv [1], mən geri Resim * alıram. 1033 01:27:45,070 --> 01:27:51,180 Amma bir yerdə ki, Resim * ki, fayl üçün fayl descriptor uyğun bir şeydir. 1034 01:27:51,180 --> 01:27:57,430 Siz açıq adam səhifə baxsaq, mən sizə adam 3 açıq etmək lazımdır düşünün - nope - 1035 01:27:57,430 --> 01:27:59,380 man 2 açıq - Bəli. 1036 01:27:59,380 --> 01:28:06,250 Açıq üçün səhifə baxsaq, açıq, aşağı səviyyədə fopen kimi 1037 01:28:06,250 --> 01:28:09,350 və faktiki fayl descriptor qaytarılması oldu. 1038 01:28:09,350 --> 01:28:12,050 fopen açıq üst məhsullarının bir dəstə edir 1039 01:28:12,050 --> 01:28:17,640 əvəzinə fayl descriptor bütün Resim * göstərici qaytarır yalnız qaytarılması olan 1040 01:28:17,640 --> 01:28:20,590 içərisində olan bizim kiçik fayl descriptor edir. 1041 01:28:20,590 --> 01:28:25,020 Fayl * şey deməkdir Yəni standart, 1042 01:28:25,020 --> 01:28:29,120 0 özlüyündə yalnız fayl descriptor standart istinad halbuki. 1043 01:28:29,120 --> 01:28:32,160 >> Suallar? 1044 01:28:32,160 --> 01:28:35,930 [Gülür] ki vasitəsilə partladılıb. 1045 01:28:35,930 --> 01:28:39,140 Bütün hüquqlar. Biz tamamlayın. [Gülür] 1046 01:28:39,140 --> 01:28:42,000 >> [CS50.TV]