1 00:00:00,000 --> 00:00:02,730 [Powered by Google Translate] [BÖLMƏ 5: AZ RAHAT] 2 00:00:02,730 --> 00:00:05,180 [Nate Hardison, Harvard Universiteti] 3 00:00:05,180 --> 00:00:08,260 [Bu CS50 edir.] [CS50.TV] 4 00:00:08,260 --> 00:00:11,690 Belə ki, uşaqlar, geri salamlayıram. 5 00:00:11,690 --> 00:00:16,320 Bölüm 5 xoş gəlmisiniz. 6 00:00:16,320 --> 00:00:20,220 Bu nöqtədə, viktorina 0 başa olan və etdik necə göründüyü edərək, 7 00:00:20,220 --> 00:00:25,770 Mən çox bu bölmədə puanları heyran çünki ümid həqiqətən yaxşı hiss edirəm. 8 00:00:25,770 --> 00:00:28,050 Online tamaşaçı üçün, suallara bir neçə yaşadım 9 00:00:28,050 --> 00:00:33,680 problem sıra son iki problemləri haqqında - və ya viktorina deyil. 10 00:00:33,680 --> 00:00:39,690 Belə ki, hər kəs nə görür ki, həqiqətən tez o artıq getmək olacaq 11 00:00:39,690 --> 00:00:45,060 və deyil, yalnız həll özü görüntü daha çox faktiki həll keçmək necə. 12 00:00:45,060 --> 00:00:50,330 Biz, həqiqətən tez problemlər son bir neçə üzərində getmək üçün 32 və 33 olacaq. 13 00:00:50,330 --> 00:00:53,240 Sadəcə, bir daha, belə ki online tamaşaçıların bu görürük. 14 00:00:53,240 --> 00:00:59,080 >> Siz səhifə 13-də olan problem 32, müraciət edin 15 00:00:59,080 --> 00:01:02,730 16 13, problem 32 bütün svopları edir. 16 00:01:02,730 --> 00:01:05,010 Bu iki integers dəyişdirmə haqqında idi. 17 00:01:05,010 --> 00:01:08,740 Bu mühazirədə bir neçə dəfə artıq getdi istədiyiniz ki, problem var. 18 00:01:08,740 --> 00:01:13,590 Və burada, nə biz nə xahiş edilmişdir tez yaddaş iz edir. 19 00:01:13,590 --> 00:01:17,000 Onlar yığını olan kimi dəyişənlərin dəyərlərinin doldurmaq üçün 20 00:01:17,000 --> 00:01:20,250 kodu bu mübadilə funksiyası ilə gedir kimi. 21 00:01:20,250 --> 00:01:24,500 Xüsusilə, nə biz aradığınız - Ben bu iPad yazmaq gedir - 22 00:01:24,500 --> 00:01:29,650 xüsusilə, nə biz aradığınız bu xətt burada 6 saylı doğru deyil. 23 00:01:29,650 --> 00:01:36,740 Və əvvəlki problem yalnız contiguity üçün 6 saylı oldu. 24 00:01:36,740 --> 00:01:41,720 Biz nə istəyirik yaddaş dövlət göstərmək və ya etiket olunur 25 00:01:41,720 --> 00:01:46,090 biz bu xətt 6 saylı həyata zaman, o 26 00:01:46,090 --> 00:01:52,540 hansı səmərəli burada bizim svop funksiyası bir qayıdacaqsınız. 27 00:01:52,540 --> 00:01:59,450 Burada aşağı diyirləyin, biz yaddaşında hər şey ünvanları bizim üçün ki, gördüm. 28 00:01:59,450 --> 00:02:02,540 Bu, çox əsas, biz yalnız bir anda onu geri gəlmək lazımdır. 29 00:02:02,540 --> 00:02:09,240 Və sonra aşağı burada altında, biz müraciət olacaq ki, bir az yaddaş diaqram idi. 30 00:02:09,240 --> 00:02:12,490 Mən, həqiqətən, mənim iPad bu həyata görmüşük. 31 00:02:12,490 --> 00:02:20,720 Mən yalnız istinad üçün iPad və bu kodu arasında geri və irəli alternativ gedirəm. 32 00:02:20,720 --> 00:02:26,540 >> Nin başlamaq edək. Birincisi, sağ burada əsas xətləri ilk bir neçə diqqət edək. 33 00:02:26,540 --> 00:02:30,220 Başlamaq üçün, 2-1-y x başlamaq olacaq. 34 00:02:30,220 --> 00:02:33,040 Biz iki tam dəyişənlər var, belə ki, onlar yığını yerləşdiriləcək olacaq də. 35 00:02:33,040 --> 00:02:36,050 Biz onlara bir 1 və 2 qoymaq olacaq. 36 00:02:36,050 --> 00:02:43,150 Mən iPad üzərində flip Belə ki, inşallah, gəlin görək - 37 00:02:43,150 --> 00:02:48,660 Apple TV aynalama, orada getmək. Okay. 38 00:02:48,660 --> 00:02:51,670 Mən iPad üzərində flip Beləliklə, əgər, 39 00:02:51,670 --> 00:02:56,220 I 2 1 və y x başlamaq istəyirəm. 40 00:02:56,220 --> 00:03:00,580 Biz x qeyd qutusuna 1 yazmaqla sadəcə bunu 41 00:03:00,580 --> 00:03:07,730 və qutusuna 2 y oldu. Olduqca sadə. 42 00:03:07,730 --> 00:03:11,620 Belə ki, indi də laptop geri bildirin, sonrakı nə görmək. 43 00:03:11,620 --> 00:03:15,810 Şeylər çətin aldığı bu növbəti xəttidir. 44 00:03:15,810 --> 00:03:28,110 Biz parametrlər x ünvanı və y ünvan keçmək mübadilə funksiyası bir və b. 45 00:03:28,110 --> 00:03:32,380 X və y-in ünvanı ünvanı, biz hesablamaq edə bilməz şeylər 46 00:03:32,380 --> 00:03:36,360 Bu güllə istinad etmədən burada sağ aşağı göstərir. 47 00:03:36,360 --> 00:03:39,750 Və xoşbəxtlikdən, ilk iki güllə xal cavab var tam olaraq nə bizə. 48 00:03:39,750 --> 00:03:44,740 Yaddaş x ünvanı 10 və yaddaş y ünvanı 14. 49 00:03:44,740 --> 00:03:51,870 Belə ki, bu kimi qəbul almaq dəyərlər bir və mübadilə funksiyası qədər üst b. 50 00:03:51,870 --> 00:04:00,760 Belə ki, yenə bizim diaqram geri keçid, bir ildə 10 yaza bilərsiniz 51 00:04:00,760 --> 00:04:07,400 b və 14. 52 00:04:07,400 --> 00:04:11,610 Biz mübadilə davam yerləşir İndi bu nöqtəsidir. 53 00:04:11,610 --> 00:04:14,520 Belə ki, daha laptop geri Flipping 54 00:04:14,520 --> 00:04:21,079 biz mübadilə işləri yol tmp bir və mağaza nəticəsində ilk dereference görürük. 55 00:04:21,079 --> 00:04:27,650 Belə ki, dereference operator Hey ", deyir. Ünvan olaraq dəyişən bir məzmunu müalicəsi. 56 00:04:27,650 --> 00:04:33,830 Ki, ünvan saxlanılır nə gedin və yük ". 57 00:04:33,830 --> 00:04:41,720 Nə dəyişən həyata yük bizim tmp dəyişən daxil saxlanılır gedir. 58 00:04:41,720 --> 00:04:45,150 IPad geri Flipping. 59 00:04:45,150 --> 00:04:51,690 10 müraciət getmək, biz ünvan 10 varible x bilirik ki, 60 00:04:51,690 --> 00:04:55,480 biz yaddaş x ünvanı 10 ki güllə nöqtə bildirib, çünki. 61 00:04:55,480 --> 00:05:00,180 Belə ki, biz, biz iPad bax, orada getmək 1 bu dəyəri əldə edə bilərsiniz 62 00:05:00,180 --> 00:05:06,300 və tmp daxil yük. 63 00:05:06,300 --> 00:05:08,250 Yenə bu yekun məzmunu deyil. 64 00:05:08,250 --> 00:05:14,350 Biz vasitəsilə gəzmək olacaq və biz sonunda proqram bizim son dövlət almaq lazımdır. 65 00:05:14,350 --> 00:05:17,210 Amma indi, biz tmp saxlanılan dəyəri 1 var. 66 00:05:17,210 --> 00:05:19,210 >> Və burada tez sual var. 67 00:05:19,210 --> 00:05:23,980 [Alexander] Bu dereference operatoru - yalnız dəyişən qarşısında ulduz hüququ var? 68 00:05:23,980 --> 00:05:27,600 >> Bəli. Biz bir daha laptop geri çevirmek kimi dereference operator Beləliklə 69 00:05:27,600 --> 00:05:33,780 sağ qarşısında bu ulduz edir. 70 00:05:33,780 --> 00:05:37,460 Bu mənada, bu - Siz vurma operator ilə ziddiyyət 71 00:05:37,460 --> 00:05:42,400 iki şeyi tələb edir dereference operator bir unary operatorudur. 72 00:05:42,400 --> 00:05:46,130 Bir ikili operator fərqli bir dəyər müraciət 73 00:05:46,130 --> 00:05:48,810 siz iki müxtəlif dəyərlər tətbiq yerləşir. 74 00:05:48,810 --> 00:05:52,080 Belə ki, bu istiqamətdə olur. 75 00:05:52,080 --> 00:05:58,390 Biz dəyəri 1 dolu və müvəqqəti tam dəyişən onu saxlanılır. 76 00:05:58,390 --> 00:06:05,800 Növbəti xətti, biz daxil b məzmunu saxlamaq - 77 00:06:05,800 --> 00:06:12,630 və ya, əksinə, biz b bir işarə olduğu yerə işarə edir ki, məzmunu saxlamayın. 78 00:06:12,630 --> 00:06:17,690 Biz sol sağ bu təhlil etsək, biz dereference b edir 79 00:06:17,690 --> 00:06:23,580 biz 14 müraciət edir, biz olduğunu tam qamarlamaq edir 80 00:06:23,580 --> 00:06:26,900 və sonra, ünvanı 10 getmək gedir 81 00:06:26,900 --> 00:06:34,240 və biz kosmosa b bizim dereference nəticəsində atmaq niyyətindəyik. 82 00:06:34,240 --> 00:06:40,080 Biz bu bir az daha konkret edə bilər bizim iPad, geri Flipping, 83 00:06:40,080 --> 00:06:44,070 Mən burada ünvanlar bütün nömrələri yazmaq əgər kömək edə bilər. 84 00:06:44,070 --> 00:06:53,820 Belə ki, y, biz ünvan 14 bilirik ki, x ünvan 10 edir. 85 00:06:53,820 --> 00:07:00,180 Biz b başlamaq zaman, biz dereference b, biz dəyəri 2 qapmaq olacaq. 86 00:07:00,180 --> 00:07:08,320 Biz ünvan 14 yaşayır ki, dəyəri çünki bu dəyər işğalçı gedir. 87 00:07:08,320 --> 00:07:15,700 Və biz, ünvanı 10 yaşayır ki, dəyişən onu qoymaq olacaq 88 00:07:15,700 --> 00:07:19,160 olan dəyişən x müvafiq sağ var. 89 00:07:19,160 --> 00:07:21,810 Belə ki, burada yadda bir az edə bilərsiniz 90 00:07:21,810 --> 00:07:35,380 biz 1 qurtarmaq və əvəzinə biz 2 yazmaq yerləşir. 91 00:07:35,380 --> 00:07:39,560 Belə ki, bütün indi üzerine x var baxmayaraq, yaxşı və dünyada yaxşı. 92 00:07:39,560 --> 00:07:44,890 Biz tmp dəyişən x köhnə dəyər saxlanılır var. 93 00:07:44,890 --> 00:07:50,210 Belə ki, biz növbəti xətti ilə mübadilə tamamlaya bilər. 94 00:07:50,210 --> 00:07:53,030 Bizim laptop geri Flipping. 95 00:07:53,030 --> 00:07:58,150 İndi bütün qalıqları bizim müvəqqəti tam dəyişən məzmunu çıxarmaq üçün 96 00:07:58,150 --> 00:08:05,630 və b aparılır ki ünvanda yaşayan dəyişən onları saxlamayın. 97 00:08:05,630 --> 00:08:10,230 Biz dəyişən əldə etmək üçün səmərəli dereference b olacaq 98 00:08:10,230 --> 00:08:14,340 ki, b onu tutan ünvan edir 99 00:08:14,340 --> 00:08:19,190 və biz tmp onu aparır ki, dəyəri mövzusu olacaq. 100 00:08:19,190 --> 00:08:23,280 Bir daha iPad geri Flipping. 101 00:08:23,280 --> 00:08:31,290 Mən burada 2 Bu dəyər silmək bilər 102 00:08:31,290 --> 00:08:41,010 əvəzinə biz onu 1 sağ surəti lazımdır. 103 00:08:41,010 --> 00:08:43,059 Sonra əlbəttə həyata ki, növbəti line - 104 00:08:43,059 --> 00:08:47,150 biz laptop geri flip əgər - Bu nöqtəyə 6 105 00:08:47,150 --> 00:08:52,500 biz diaqram tamamilə doldurulmuş etmək istəyirdi hansı nöqtəsində olan. 106 00:08:52,500 --> 00:08:58,940 Belə ki, iPad üçün geri Flipping bir daha, yalnız belə ki, başa diaqram bilərsiniz 107 00:08:58,940 --> 00:09:06,610 biz x bir ildə 10, b 14, tmp bir 1, 2, və y bir 1 var olduğunu görə bilərsiniz. 108 00:09:06,610 --> 00:09:11,000 Bu barədə hər hansı sualınız var? 109 00:09:11,000 --> 00:09:14,640 Bu yolu gəzmiş olan, daha məntiqli edirmi? 110 00:09:14,640 --> 00:09:24,850 Az mənada etmək? İnşallah deyil. Okay. 111 00:09:24,850 --> 00:09:28,230 >> Pointers çox çətin mövzu var. 112 00:09:28,230 --> 00:09:33,420 Biz işləmək uşaqlar bir çox ümumi kəlam var: 113 00:09:33,420 --> 00:09:36,590 "Göstəricilərinə anlamaq üçün, ilk göstəricilərinə anlamaq lazımdır." 114 00:09:36,590 --> 00:09:40,530 Hansı mən çox doğru hesab edirəm. Bu istifadə almaq üçün bir müddət edir. 115 00:09:40,530 --> 00:09:45,360 Çox faydalı edir, şəkillər püşkatma bu kimi yaddaş sxemlərinin püşkatma 116 00:09:45,360 --> 00:09:49,480 və məsələn sonra misal sonra misal vasitəsilə gəzmək sonra, 117 00:09:49,480 --> 00:09:54,450 bir az daha məntiqli və bir az daha məntiqli və bir az daha məntiqli başlarsınız. 118 00:09:54,450 --> 00:10:01,560 Nəhayət, bir gün siz bütün tamamilə hakim olacaq. 119 00:10:01,560 --> 00:10:13,800 Biz növbəti problem geçmek? Hər hansı sual qarşısında Bütün hüquqlar. 120 00:10:13,800 --> 00:10:18,840 Belə ki, laptop geri çevirmek. 121 00:10:18,840 --> 00:10:23,300 Biz növbəti problem problem sayı 33 fayl haqqında I / O. 122 00:10:23,300 --> 00:10:26,350 Bu bir az üzrə kiçildin. 123 00:10:26,350 --> 00:10:28,710 Problem 33 - Var? 124 00:10:28,710 --> 00:10:32,110 >> [Daniel] Mən tez sual idi. Bu ulduz, və ya ulduz, 125 00:10:32,110 --> 00:10:35,590 siz əvvəl bir ulduz istifadə dereferencing deyirlər. 126 00:10:35,590 --> 00:10:38,820 Əvvəl işareti istifadə ne adlanan var? 127 00:10:38,820 --> 00:10:43,140 >> Bu işareti əvvəl ünvan-nin operatorudur. 128 00:10:43,140 --> 00:10:45,880 Belə in qədər geri hərəkət edək. 129 00:10:45,880 --> 00:10:49,310 Üzr istəyirik. Mən belə Mən həqiqətən diyirləyin deyil zoom rejimində edirəm. 130 00:10:49,310 --> 00:10:52,780 Biz burada həqiqətən tez bu kodu baxsaq, 131 00:10:52,780 --> 00:10:54,980 yenə eyni şey baş. 132 00:10:54,980 --> 00:10:59,180 Biz burada bu kodu baxsaq, bu xətt üzrə biz zəng, dəyişdirmək etmək Ü 133 00:10:59,180 --> 00:11:10,460 bu işareti yalnız "ünvanı olan dəyişən x həyatını almaq." deyib 134 00:11:10,460 --> 00:11:14,460 Sizin compiler sizin kodu tərtib edərkən, 135 00:11:14,460 --> 00:11:20,590 faktiki fiziki yaşamaq üçün dəyişənlərin bütün yaddaş bir yer qeyd etmək üçün var. 136 00:11:20,590 --> 00:11:24,910 Hər şeyi tərtib sonra və belə compiler, sonra nə edə bilər 137 00:11:24,910 --> 00:11:31,110 ki, "Oh, mən ünvan 10 x qoydu. Mən ünvan 14 y qoymaq." bilir 138 00:11:31,110 --> 00:11:34,640 O sizin üçün bu dəyərlər doldurmaq olar. 139 00:11:34,640 --> 00:11:44,740 Belə ki, sonra ola bilər - o cümlədən və pass & y bu keçə bilər. 140 00:11:44,740 --> 00:11:50,730 , Bu uşaqlar ünvanı almaq, həm də, zaman mübadilə funksiyası onları keçmək 141 00:11:50,730 --> 00:11:55,690 Bu növ məlumat, burada bu int *, bu compiler deyir 142 00:11:55,690 --> 00:12:01,350 "OK, biz tam dəyişən bir ünvan kimi bu ünvan tərcümə etmək olacaq." 143 00:12:01,350 --> 00:12:05,900 Bir int bir ünvan kimi, bir xarakter dəyişən və ünvan fərqli 144 00:12:05,900 --> 00:12:09,930 bir int bir 32-bit maşın, çəkir, çünki yer 4 bayt tutur 145 00:12:09,930 --> 00:12:13,310 bir xarakter yalnız yer 1 byte tutur halbuki. 146 00:12:13,310 --> 00:12:17,310 Belə ki, nə də bilmək vacibdir - yaşayır, nə dəyəri nə növü 147 00:12:17,310 --> 00:12:20,340 da qəbul oldu ki ünvanda yaşayan 148 00:12:20,340 --> 00:12:22,020 Siz ilə məşğul olduğunuz və ya ünvanı. 149 00:12:22,020 --> 00:12:29,020 Bu yolla, siz neçə bayt məlumat faktiki olaraq RAM həyata yük bilirik. 150 00:12:29,020 --> 00:12:31,780 Və sonra, bəli, sizin kimi bu dereference operator, xahiş edildi 151 00:12:31,780 --> 00:12:37,200 gedir və müəyyən bir ünvan informasiya çatmaz. 152 00:12:37,200 --> 00:12:42,820 Belə ki, burada bu dəyişən ilə deyir, ünvan olaraq bir məzmunu müalicə 153 00:12:42,820 --> 00:12:47,880 ki, ünvan gedin və çıxarmaq, bir reyestrinə prosessor, yük daxil yükləmək 154 00:12:47,880 --> 00:12:56,340 faktiki dəyərləri və ya ünvanda yaşayan məzmunu. 155 00:12:56,340 --> 00:12:59,620 Hər hansı bir daha suallar? Bu yaxşı suallar var. 156 00:12:59,620 --> 00:13:01,650 Bu da yeni terminologiya bir çox var. 157 00:13:01,650 --> 00:13:09,800 Bu müxtəlif yerlərdə və və * görən, həmçinin funky növü var. 158 00:13:09,800 --> 00:13:13,180 >> Bütün hüquqlar. 159 00:13:13,180 --> 00:13:18,530 Belə ki, geri problem 33, fayl I / O. 160 00:13:18,530 --> 00:13:22,540 Bu şeyi bir neçə baş edirəm ki, bu problemlərin biri idi. 161 00:13:22,540 --> 00:13:25,400 Biri, bu, kifayət qədər yeni mövzu var. 162 00:13:25,400 --> 00:13:30,590 Bu viktorina əvvəl pretty tezliklə təqdim edilib 163 00:13:30,590 --> 00:13:33,400 və sonra mən bu riyaziyyat o söz problemlərdən biri kimi cür idi 164 00:13:33,400 --> 00:13:39,720 Onlar sizə bir çox informasiya vermək, ancaq həqiqətən bir ton istifadə üçün olan qədər başa yoxdur. 165 00:13:39,720 --> 00:13:44,060 Bu problem ilk hissəsi bir CSV faylı nə izah. 166 00:13:44,060 --> 00:13:50,620 İndi, bir CSV fayl, təsviri görə, virgülle ayrılmış dəyərlər fayl. 167 00:13:50,620 --> 00:13:55,300 Bu bütün maraqlı olduğunu səbəb və heç istifadə səbəbi, 168 00:13:55,300 --> 00:14:00,800 Çünki, necə çox heç Excel kimi məhsulları istifadə olunur? 169 00:14:00,800 --> 00:14:03,240 , Yəqin ki, və ya həyat bir nöqtədə istifadə edəcək ki, siz ən Şəkil. 170 00:14:03,240 --> 00:14:06,430 Excel kimi bir şey istifadə edəcəyik. 171 00:14:06,430 --> 00:14:10,940 Excel elektron tablo data çıxmaq və ya emal ilə hər cür etmək üçün, 172 00:14:10,940 --> 00:14:17,240 Bir C proqram və ya Python proqram, Java proqram yazmaq istəyirdi əgər 173 00:14:17,240 --> 00:14:20,070 orada saxlanılan var data ilə məşğul, 174 00:14:20,070 --> 00:14:23,170 onu almaq üçün ən ümumi yollarından biri bir CSV fayl var. 175 00:14:23,170 --> 00:14:26,850 Siz, dialoq "kimi saxla 'getmək zaman Excel açmaq bilər 176 00:14:26,850 --> 00:14:32,840 Əgər faktiki CSV fayl əldə edə bilərsiniz. 177 00:14:32,840 --> 00:14:35,890 >> Bu şeylər ilə məşğul necə Handy. 178 00:14:35,890 --> 00:14:42,010 Bu işləri yolu ona oxşar ki, - mən demək, bu, mahiyyətcə bir elektron tablo imitasiya edir 179 00:14:42,010 --> 00:14:47,590 yerləşir, biz burada görmək kimi, çox sol en tikə, 180 00:14:47,590 --> 00:14:49,910 biz bütün son adları var. 181 00:14:49,910 --> 00:14:54,670 Belə ki, biz sonra Malan, Hardison, sonra Bowden, MacWilliam, sonra Chan var. 182 00:14:54,670 --> 00:14:59,470 Bütün son adları. Və sonra bir vergül ilk adları keçən adları ayırır. 183 00:14:59,470 --> 00:15:02,970 David, Nate, Rob, Tommy və Zamyla. 184 00:15:02,970 --> 00:15:06,850 Mən həmişə Robby və Tom qədər qarışdırılır. 185 00:15:06,850 --> 00:15:10,940 Və sonra, nəhayət, üçüncü sütun e-poçt ünvanlarını deyil. 186 00:15:10,940 --> 00:15:18,500 Ki, siz başa sonra, proqram qalan həyata keçirilməsi olduqca sadə deyil. 187 00:15:18,500 --> 00:15:23,850 Biz C proqram bu eyni struktur taklit üçün etdik nə 188 00:15:23,850 --> 00:15:27,510 biz bir quruluş istifadə etdiyiniz edilir. 189 00:15:27,510 --> 00:15:30,520 Biz də bu bir az daha çox oynayan başlamaq lazımdır. 190 00:15:30,520 --> 00:15:35,790 Biz lüğətlər ilə məşğul olan zaman problem set 3, ilk az onları gördüm. 191 00:15:35,790 --> 00:15:40,290 Amma bu heyət struct son adı, adı və e-poçt saklar. 192 00:15:40,290 --> 00:15:44,500 Yalnız CSV fayl kimi saxlanılması edilib. 193 00:15:44,500 --> 00:15:47,950 Belə ki, bu yalnız bir format digər konvertasiya edilir. 194 00:15:47,950 --> 00:15:54,630 Biz bir xəttə, bu halda, kadr struct çevirmək üçün 195 00:15:54,630 --> 00:15:59,060 yalnız kimi bir vergül ayrılmış xətt. 196 00:15:59,060 --> 00:16:01,500 Bu mənada edirmi? Siz uşaqlar bütün viktorina qəbul etmişdir 197 00:16:01,500 --> 00:16:07,680 Mən ən azı bu barədə düşünmək üçün vaxt var düşünün. 198 00:16:07,680 --> 00:16:16,410 >> Də kirayə funksiyası problem bizə etmək üçün xahiş - bu bir az üzrə we'll zoom - 199 00:16:16,410 --> 00:16:22,480 , adı, s, bir ştat strukturu, bir heyət struct almaq 200 00:16:22,480 --> 00:16:30,900 və staff.csv faylı onun məzmunu əlavə. 201 00:16:30,900 --> 00:16:34,230 Bu istifadə etmək üçün kifayət qədər sadə ki, həyata çevirir. 202 00:16:34,230 --> 00:16:37,430 Biz belə bir az daha bu funksiyaları gün ilə ətrafında oynamaq lazımdır. 203 00:16:37,430 --> 00:16:44,510 Lakin bu halda, fprintf funksiyası həqiqətən vacibdir. 204 00:16:44,510 --> 00:16:51,960 Belə fprintf ilə, sizə uşaqlar printf bu müddəti istifadə edilmişdir yalnız kimi çap edə bilərsiniz. 205 00:16:51,960 --> 00:16:55,050 Siz fayl printf xətti bilərsiniz. 206 00:16:55,050 --> 00:16:59,030 Yerine adi printf zəng edilməsi Belə ki, bu format string vermək yerləşir 207 00:16:59,030 --> 00:17:05,380 və sonra, aşağıdakı dəlilləri ilə bütün dəyişənlər əvəz 208 00:17:05,380 --> 00:17:11,290 fprintf ilə, ilk arqument əvəzinə sizə yazmaq istədiyiniz fayl. 209 00:17:11,290 --> 00:17:21,170 Biz insan fprintf, misal üçün, cihaz bu baxmaq olsaydı 210 00:17:21,170 --> 00:17:25,980 biz printf və fprintf arasında fərq görə bilərsiniz. 211 00:17:25,980 --> 00:17:28,960 Mən burada bir az kiçiltmək lazımdır. 212 00:17:28,960 --> 00:17:33,140 Printf ilə Beləliklə, biz bir format string verəcək, sonra sonrakı arqumentlər 213 00:17:33,140 --> 00:17:37,580 bizim format string daxil dəyişdirilməsi və ya əvəz bütün dəyişənlər var. 214 00:17:37,580 --> 00:17:47,310 Fprintf ilə Halbuki, ilk arqument həqiqətən bir axın adlanan bu file * edir. 215 00:17:47,310 --> 00:17:51,800 >> Bizim kirayə burada artıq geri hərəkət 216 00:17:51,800 --> 00:17:54,550 biz artıq file * axın bizim üçün açılan var. 217 00:17:54,550 --> 00:17:57,810 Yəni bu ilk nə o, staff.csv fayl açır 218 00:17:57,810 --> 00:18:01,690 bu əlavə rejimində o açır, bizə nə üçün sol ki, bütün 219 00:18:01,690 --> 00:18:08,640 fayl üçün ştat strukturu yazın. 220 00:18:08,640 --> 00:18:10,870 Və mən iPad istifadə etmək istəyirsiniz, gəlin görək? 221 00:18:10,870 --> 00:18:17,900 Mən iPad istifadə edəcəyik. Biz etibarsız var - mən bir az daha yaxşı yaza bilər, belə müzakirə bu qoymaq edək - 222 00:18:17,900 --> 00:18:33,680 kirayə ləğv və bu, bir arqument s adlı heyətinin strukturu edir. 223 00:18:33,680 --> 00:18:44,120 Bizim aşırma var, biz, fayl adlı file * var 224 00:18:44,120 --> 00:18:48,380 biz, bizə bizim fopen xətti 225 00:18:48,380 --> 00:18:51,890 bu pedia artıq olduğundan və yalnız nöqtələr kimi yazmaq lazımdır. 226 00:18:51,890 --> 00:19:00,530 Və sonra növbəti line, biz fprintf zəng etmək olacaq 227 00:19:00,530 --> 00:19:03,700 və biz, biz çap istədiyiniz fayl keçmək olacaq 228 00:19:03,700 --> 00:19:10,290 və sonra format string olan - 229 00:19:10,290 --> 00:19:14,300 Mən sizə uşaqlar kimi görünür nə mənə bildirin lazımdır. 230 00:19:14,300 --> 00:19:20,500 Necə haqqında, Stella? Siz format string ilk hissəsi kimi görünür nə bilirik? 231 00:19:20,500 --> 00:19:24,270 [Stella] Mən əmin deyiləm. >> Jimmy xahiş çekinmeyin. 232 00:19:24,270 --> 00:19:27,690 Siz, Cimmi bilirsinizmi? 233 00:19:27,690 --> 00:19:31,000 [Jimmy] yalnız sonuncu istəyirsiniz? Bilmirəm. Mən tamamilə əmin deyiləm. 234 00:19:31,000 --> 00:19:39,020 Okay. >> Necə haqqında, heç imtahan bu doğru əldə etdiniz? 235 00:19:39,020 --> 00:19:41,770 Bütün hüquqlar No. 236 00:19:41,770 --> 00:19:47,920 Burada biz bütün biz ştat strukturunun hər bir hissəsi istəyirəm ki, həyata çevirir 237 00:19:47,920 --> 00:19:53,290 bizim fayla bir string kimi çap edilir. 238 00:19:53,290 --> 00:19:59,900 Biz bir soyadı, çünki Biz yalnız simli əvəz xarakter üç müxtəlif vaxtlarda istifadə 239 00:19:59,900 --> 00:20:07,160 vergül sonra, sonra bir ad, bir vergül sonra 240 00:20:07,160 --> 00:20:12,430 və sonra nəhayət ki e-mail ünvanı izləyir - deyil 241 00:20:12,430 --> 00:20:15,140 mənim ekranda uyğun - ancaq bir newline xarakteri təqib edir. 242 00:20:15,140 --> 00:20:20,060 Mən yalnız aşağı orada yazmaq üçün gedirəm. 243 00:20:20,060 --> 00:20:23,560 Və sonra, bizim format string aşağıdakı 244 00:20:23,560 --> 00:20:27,880 biz yalnız biz dot notation istifadə daxil olan Əvəzedicilərimiz var 245 00:20:27,880 --> 00:20:31,370 biz problem set 3 gördüm. 246 00:20:31,370 --> 00:20:48,820 Biz s.last, s.first və s.email istifadə edə bilərsiniz 247 00:20:48,820 --> 00:20:58,990 bizim format string o üç dəyərlər əvəz edilsin. 248 00:20:58,990 --> 00:21:06,190 Belə ki, necə getdi? Mənada etmək? 249 00:21:06,190 --> 00:21:09,700 Bəli? No? Ola bilsin? Okay. 250 00:21:09,700 --> 00:21:14,180 >> Biz çap etdik və biz fayl açdı sonra sonra biz ki, son şey: 251 00:21:14,180 --> 00:21:17,370 biz bir fayl açmıştınız zaman, biz həmişə yaxın unutmayın lazımdır. 252 00:21:17,370 --> 00:21:19,430 Başqa biz yaddaş sızması çıxacağıq, çünki 253 00:21:19,430 --> 00:21:22,500 fayl descriptors istifadə edərək. 254 00:21:22,500 --> 00:21:25,950 Belə ki, biz funksiyasından istifadə, bunun yaxın? Daniel? 255 00:21:25,950 --> 00:21:30,120 [Daniel] fclose? Dəqiq >> fclose. 256 00:21:30,120 --> 00:21:37,520 Belə ki, bu problem son hissəsi, fclose funksiyası istifadə edərək, fayl düzgün yaxın idi 257 00:21:37,520 --> 00:21:40,370 hansı ki, yalnız kimi görünür. 258 00:21:40,370 --> 00:21:43,880 Çox crazy deyil. 259 00:21:43,880 --> 00:21:46,990 Cool. 260 00:21:46,990 --> 00:21:49,520 Belə ki, viktorina problem 33 var. 261 00:21:49,520 --> 00:21:52,480 Biz I / O gələn mütləq daha çox fayl lazımdır. 262 00:21:52,480 --> 00:21:55,130 Biz bu gün bu gün mühazirə bir az daha çox, və ya bölməsində olacaq 263 00:21:55,130 --> 00:22:01,710 Bu qarşıdakı pset hissəsi yaratmaq üçün neler çünki. 264 00:22:01,710 --> 00:22:05,020 Bu nöqtədə viktorina olan hərəkət edək. Bəli? 265 00:22:05,020 --> 00:22:10,880 >> [Charlotte]] Nə əvəzinə fclose və fclose (fayl) (staff.csv)? 266 00:22:10,880 --> 00:22:19,100 >> Ah. O çıxır ki, Çünki - belə sual, böyük bir olan, 267 00:22:19,100 --> 00:22:27,800 Ona görə biz fclose yazmaq zaman, biz fclose (fayl) star dəyişən yazılı edilir 268 00:22:27,800 --> 00:22:33,680 kimi fayl adı, staff.csv qarşı? Ki, doğru mu? Bəli. 269 00:22:33,680 --> 00:22:39,570 Belə in nəzər salaq. Mən laptop geri keçmək varsa, 270 00:22:39,570 --> 00:22:45,040 və ən fclose funksiyası baxaq. 271 00:22:45,040 --> 00:22:51,460 Belə ki, fclose funksiyası axın bağlayır və biz yaxın istədiyiniz stream üçün pointer götürür 272 00:22:51,460 --> 00:22:57,010 biz yaxın istədiyiniz faktiki fayl adı fərqli. 273 00:22:57,010 --> 00:23:01,620 Bu, çünki pərdə arxasında, siz fopen zəng etmək zaman deyil 274 00:23:01,620 --> 00:23:12,020 bir fayl açmaq, həqiqətən, fayl haqqında məlumat saxlamaq üçün yaddaş ayrılması edirik. 275 00:23:12,020 --> 00:23:16,380 Belə ki, fayl haqqında məlumat var ki, fayl göstərici var 276 00:23:16,380 --> 00:23:23,080 açıq var kimi, siz fayl hazırda burada onun ölçüsü, 277 00:23:23,080 --> 00:23:29,100 oxuduğunuz və fayl ərzində xüsusi yer zənglər yazılı edə bilərsiniz ki. 278 00:23:29,100 --> 00:23:38,060 Yerine fayl adı bağlanması göstərici bağlanması son. 279 00:23:38,060 --> 00:23:48,990 >> Bəli? [Daniel] Belə kirayə istifadə etmək üçün, demək ki, - necə ki, bu istifadəçi daxil almaq deyil? 280 00:23:48,990 --> 00:23:53,830 Fprintf yalnız istifadəçi daxil gözləmək lazımdır ki mənada GetString kimi hərəkət etmir 281 00:23:53,830 --> 00:23:57,180 və bu yazın xahiş - və ya bu üç şeyi yazın üçün gözləmək? 282 00:23:57,180 --> 00:24:00,480 Və ya kirayə həyata bir şey istifadə etmək lazımdır? 283 00:24:00,480 --> 00:24:04,100 >> Bəli. Belə ki, biz deyilik - sualına, necə biz istifadəçi daxil ola bilmirəm edilib 284 00:24:04,100 --> 00:24:09,220 kirayə həyata keçirilməsi üçün? Və biz burada, kiralama zəng edir 285 00:24:09,220 --> 00:24:17,690 artıq struct saxlanılan məlumatların bütün bu heyət struct keçdi. 286 00:24:17,690 --> 00:24:22,990 Belə fprintf yalnız fayl birbaşa məlumatlar yazmaq edə bilər. 287 00:24:22,990 --> 00:24:25,690 Istifadəçi girişi gözləyir var. 288 00:24:25,690 --> 00:24:32,110 Istifadəçi artıq düzgün bu heyət struct onu qoyaraq giriş verilmiş oldu. 289 00:24:32,110 --> 00:24:36,510 Həmin göstəricilər hər hansı null əgər və hər şeyi, əlbəttə, qırmaq olacaq 290 00:24:36,510 --> 00:24:40,370 belə biz burada geri gedin və biz struct oldu. 291 00:24:40,370 --> 00:24:43,640 Biz simli son simli ilk simli email var. 292 00:24:43,640 --> 00:24:48,530 İndi o, həqiqətən bütün başlıq altında, char * dəyişənlərin olduğunu bilirəm. 293 00:24:48,530 --> 00:24:53,470 Bu null işarə bilər və ya. 294 00:24:53,470 --> 00:24:55,800 Onlar yığın yaddaş işarə ola bilər 295 00:24:55,800 --> 00:24:59,650 yığını ola bilər yaddaş. 296 00:24:59,650 --> 00:25:04,580 Biz, həqiqətən, bilirik, lakin bu göstəricilər hər hansı null, və ya etibarsız deyilsə, yoxdur 297 00:25:04,580 --> 00:25:08,120 mütləq bizim kirayə funksiyası qəza lazımdır ki,. 298 00:25:08,120 --> 00:25:11,050 Bu imtahan çərçivəsindən kənarda cür idi ki, bir şey idi. 299 00:25:11,050 --> 00:25:16,440 Biz narahat deyilik. 300 00:25:16,440 --> 00:25:22,170 Böyük. Okay. Belə ki, viktorina olan hərəkət. 301 00:25:22,170 --> 00:25:25,760 >> Bu oğlan yaxın edək və biz pset 4 baxmaq olacaq. 302 00:25:25,760 --> 00:25:34,700 Uşaqlar da pset spec baxmaq əgər, bir dəfə siz onu istifadə edə bilərsiniz, cs50.net/quizzes, 303 00:25:34,700 --> 00:25:42,730 biz bölməsində problemlər bu gün bir neçə ilə getmək niyyətindəyik. 304 00:25:42,730 --> 00:25:52,240 Mən aşağı kaydırarak alıram - suallar bölməsində pset spec üçüncü səhifə başlayır. 305 00:25:52,240 --> 00:25:57,800 Və ilk hissəsi yönlendirme və borular getmək və qısa izləmək üçün siz soruşur. 306 00:25:57,800 --> 00:26:02,820 Sərin qısa cür idi, siz istifadə edə bilərsiniz ki, bəzi yeni, sərin command line tövsiyələr göstərir. 307 00:26:02,820 --> 00:26:06,050 Və sonra biz də sizə bir neçə sual var. 308 00:26:06,050 --> 00:26:10,860 Axınları haqqında Bu ilk sual, printf ismarıcları yazır olan, 309 00:26:10,860 --> 00:26:15,920 biz belə bir an əvvəl yalnız bir az toxundu. 310 00:26:15,920 --> 00:26:22,380 Biz yalnız müzakirə Bu fprintf onun dəlil kimi file * axın edir. 311 00:26:22,380 --> 00:26:26,580 fclose, həmçinin bir file * axın edir 312 00:26:26,580 --> 00:26:32,660 və fopen qaytarılması dəyəri kimi yaxşı bir file * axın verir. 313 00:26:32,660 --> 00:26:36,060 Biz printf ilə məşğul olduğunuz zaman əvvəl görməmişik səbəbi 314 00:26:36,060 --> 00:26:39,450 printf bir default axın var çünki. 315 00:26:39,450 --> 00:26:41,810 Və yazır üçün u mənim axın 316 00:26:41,810 --> 00:26:45,190 Siz qısa haqqında tapa bilərsiniz. 317 00:26:45,190 --> 00:26:50,080 Belə ki, mütləq o nəzər. 318 00:26:50,080 --> 00:26:53,010 >> Bu gün bölümünde, biz gdb haqqında bir az danışmaq olacaq 319 00:26:53,010 --> 00:26:57,720 daha tanış siz bu olduğundan, daha çox təcrübə, siz onu almaq 320 00:26:57,720 --> 00:27:01,390 daha yaxşı edə həqiqətən öz kodu hataları aşağı ov olacaq. 321 00:27:01,390 --> 00:27:05,540 Bu olduqca qədər ayıklama prosesi sürətləndirir. 322 00:27:05,540 --> 00:27:09,230 Belə printf istifadə edərək, hər zaman, sizin kodu derleyeceğiz ki, nə 323 00:27:09,230 --> 00:27:13,000 yeniden çalıştırmak var, bəzən siz ətrafında printf zəng hərəkət etmək 324 00:27:13,000 --> 00:27:17,100 kodunu şərh, yalnız bir müddət alır. 325 00:27:17,100 --> 00:27:20,850 Bizim məqsədimiz cəhd və gdb ilə, mahiyyətcə bilər ki, razı deyil 326 00:27:20,850 --> 00:27:26,810 printf sizin kodu hər hansı bir şey və bunu derleyeceğiz heç vaxt. 327 00:27:26,810 --> 00:27:35,120 Siz başlamaq və harada printf növbəti guessing saxlamaq üçün heç vaxt. 328 00:27:35,120 --> 00:27:40,910 Etmək üçün ilk şey bu xətt seçin və web bölməsində kodu off əldə etməkdir. 329 00:27:40,910 --> 00:27:47,530 Mən "wget ​​http://cdn.cs50.net", deyir ki kodu bu xətt çıxarmaq alıram. 330 00:27:47,530 --> 00:27:49,510 Mən kopyalamak üçün gedirəm. 331 00:27:49,510 --> 00:27:55,950 Mən cihaz üzərində getmək üçün gedirəm, belə ki, mən edirəm nə görə bilərsiniz Uzaklaştırmak 332 00:27:55,950 --> 00:28:01,890 orada köçürməklə yenidən, mən daxil edin hit zaman, bu wget komanda sanki bir web almaq edir. 333 00:28:01,890 --> 00:28:06,210 Bu, internet bu fayl off açılan olacaq 334 00:28:06,210 --> 00:28:11,790 və cari kataloq saxlamaq olacaq. 335 00:28:11,790 --> 00:28:21,630 Mən cari kataloq siyahısını əgər İndi mən orada bu section5.zip fayl var olduğunu görə bilərsiniz. 336 00:28:21,630 --> 00:28:25,260 Ki, oğlan ilə məşğul yolu, bu açın üçün 337 00:28:25,260 --> 00:28:27,650 siz yalnız bu kimi command line edə bilər. 338 00:28:27,650 --> 00:28:31,880 Section5.zip. 339 00:28:31,880 --> 00:28:36,980 Bu açın lazımdır ki, mənim üçün qovluq yaratmaq 340 00:28:36,980 --> 00:28:40,410 məzmunu bütün şişirdilir, burada qoydu. 341 00:28:40,410 --> 00:28:47,410 Belə ki, indi mən cd komanda istifadə edərək Bölüm 5 dizine bilərsiniz. 342 00:28:47,410 --> 00:28:58,310 Aydın istifadə ekran sil. Belə ki, ekran sil. 343 00:28:58,310 --> 00:29:02,280 İndi ilə məşğul gözəl təmiz terminal var. 344 00:29:02,280 --> 00:29:06,200 >> Mən bu qovluğu görmək bütün faylları siyahısını İndi əgər 345 00:29:06,200 --> 00:29:12,270 buggy1, buggy2, buggy3 və buggy4: Mən dörd fayllar var olduğunu görürük. 346 00:29:12,270 --> 00:29:16,180 Mən də onların müvafiq. C fayllar var. 347 00:29:16,180 --> 00:29:20,400 Biz indi üçün. C faylları baxmaq fikrində deyilik. 348 00:29:20,400 --> 00:29:24,140 Əksinə, biz gdb açmaq istifadə etmək olacaq. 349 00:29:24,140 --> 00:29:28,220 Biz gdb istifadə etdiyiniz zaman, biz faktiki mənbə kodu çıxışı var ki, onların ətrafında saxlanılır sonra 350 00:29:28,220 --> 00:29:32,740 lakin bölməsində bu hissəsi məqsədi gdb ətrafında misgər üçün 351 00:29:32,740 --> 00:29:40,370 və biz bu dörd arabası proqramlar hər yanlış nə anlamaq üçün istifadə edə bilərsiniz necə. 352 00:29:40,370 --> 00:29:43,380 Belə ki, yalnız, həqiqətən, tez oda ətrafında olacaq 353 00:29:43,380 --> 00:29:47,000 və Mən arabası proqramlarının bir run kimsə xahiş gedirəm 354 00:29:47,000 --> 00:29:54,730 və sonra, biz gdb bir qrup kimi gedəcəyəm və biz bu proqramların düzeltmek üçün nə edə görürsünüz 355 00:29:54,730 --> 00:29:58,460 və ya ən azı onların hər səhv neler müəyyən etmək. 356 00:29:58,460 --> 00:30:04,760 Daniel burada başlamaq edək. Siz buggy1 davam edəcək? Nə görmək edək. 357 00:30:04,760 --> 00:30:09,470 [Daniel] Bu tətbiq günah var deyir. >> Bəli. Exactly. 358 00:30:09,470 --> 00:30:12,460 Mən buggy1 run Belə ki, bir seg günah almaq. 359 00:30:12,460 --> 00:30:16,210 Bu nöqtədə, mən getmək və buggy1.c qədər aça bilər 360 00:30:16,210 --> 00:30:19,450 , cəhd və səhv nə anlamaq 361 00:30:19,450 --> 00:30:22,000 lakin bu seg günah səhv haqqında ən obnoxious şeyi bir 362 00:30:22,000 --> 00:30:27,610 bu proqram şeyi line həqiqətən yanlış getdi və qırdı nə sizə demək deyil ki. 363 00:30:27,610 --> 00:30:29,880 Siz tipli kodu baxmaq 364 00:30:29,880 --> 00:30:33,990 və tahmin istifadə anlamaq və yoxlamaq və ya printf yanlış gedir nə görmək. 365 00:30:33,990 --> 00:30:37,840 Gdb haqqında keyfiyyətli şeylərdən biri həqiqətən, həqiqətən, asan ki, 366 00:30:37,840 --> 00:30:42,170 xətti anlamaq üçün olan proqram qəzaları da. 367 00:30:42,170 --> 00:30:46,160 Bu tamamilə belə yalnız ki, əgər istifadə etmək lazımdır. 368 00:30:46,160 --> 00:30:56,190 Belə ki, gdb qədər çəkmə, mən gdb yazın, sonra mən qaçmaq istəyirəm ki, yürütülebilir üçün yol verir. 369 00:30:56,190 --> 00:31:01,960 Burada gdb ./buggy1 yazaraq alıram. 370 00:31:01,960 --> 00:31:06,600 Daxil Hit. Mənə bütün bu copyright məlumat verir 371 00:31:06,600 --> 00:31:13,000 və aşağı burada "/ home / etibarən Oxu simvol deyir ki, bu xətti görürsünüz 372 00:31:13,000 --> 00:31:17,680 jharvard/section5/buggy1 ". 373 00:31:17,680 --> 00:31:22,060 Bütün yaxşı gedir varsa, bu kimi bir mesaj çap görəcəksiniz. 374 00:31:22,060 --> 00:31:25,500 Bu simvol oxumaq lazımdır ki, "Mən, sizin faylı simvolları oxu edirəm" demək lazımdır 375 00:31:25,500 --> 00:31:29,900 və o, burada bu "görülən" mesajı olacaq. 376 00:31:29,900 --> 00:31:35,410 Bu digər variasiya görmək, və ya görürsünüzsə bu simvol tapa bilmədi 377 00:31:35,410 --> 00:31:41,460 və ya kimi bir şey, nə o deməkdir ki, yalnız düzgün çalıştırılabilir tərtib deyil ki. 378 00:31:41,460 --> 00:31:49,980 Biz gdb istifadə üçün proqramlar tərtib zaman, biz, xüsusi-g bayrağı istifadə etmək 379 00:31:49,980 --> 00:31:54,540 Siz proqramları tərtib əgər ki, yalnız etmək yazaraq, default tərəfindən həyata 380 00:31:54,540 --> 00:31:59,320 və ya arabası etmək və ya hər hansı bərpa etmək. 381 00:31:59,320 --> 00:32:07,800 Amma siz cingilti ilə əl tərtib edirsinizsə, onda siz getmək və-g bayrağı daxil lazımdır. 382 00:32:07,800 --> 00:32:10,310 >> Bu nöqtədə, indi bizim gdb tez var, 383 00:32:10,310 --> 00:32:12,310 bu proqram çalıştırmak üçün olduqca sadə. 384 00:32:12,310 --> 00:32:19,740 Biz ya run edə bilərsiniz, və ya biz yalnız r edəbilərsiniz. 385 00:32:19,740 --> 00:32:22,820 Ən gdb əmrləri qısaldılmış ola bilər. 386 00:32:22,820 --> 00:32:25,940 Adətən olduqca gözəl olan yalnız bir və ya bir neçə məktublar, üçün. 387 00:32:25,940 --> 00:32:30,980 Siz r yazın və nə daxil edib Belə ki, Saad? 388 00:32:30,980 --> 00:32:39,390 [Saad] Mən SIGSEGV, seqmentləşdirmə günah və sonra bütün bu anlamsız var. 389 00:32:39,390 --> 00:32:43,650 >> Bəli. 390 00:32:43,650 --> 00:32:47,990 Biz indi ekranda gördükdə kimi, və Saad bildirib kimi, 391 00:32:47,990 --> 00:32:53,430 biz run və ya r yazın və Enter düyməsini basın zaman, biz hələ də eyni seg günah almaq. 392 00:32:53,430 --> 00:32:55,830 Belə ki, gdb istifadə edərək problemi həll etmir. 393 00:32:55,830 --> 00:32:59,120 Lakin bizə anlamsız verir və bu çıxır ki, bu anlamsız 394 00:32:59,120 --> 00:33:03,080 bu baş yerləşir həqiqətən bizə deyir. 395 00:33:03,080 --> 00:33:10,680 Bu bir az təhlil etmək üçün bu ilk bit hər şey yanlış gedir hansı funksiyası var. 396 00:33:10,680 --> 00:33:20,270 Bu __ strcmp_sse4_2, ve bu fayl baş bizə deyir ki, 397 00:33:20,270 --> 00:33:29,450 sysdeps/i386 adlanan bu, yenə bir mess cür - ancaq line 254. 398 00:33:29,450 --> 00:33:31,670 Bu analiz üçün cür çətindir. Əgər bu kimi şeylər görmək Adətən zaman 399 00:33:31,670 --> 00:33:38,770 ki, sistem kitabxanaların bir faulting seg ki, deməkdir. 400 00:33:38,770 --> 00:33:43,220 Belə bir şey strcmp ilə. Siz uşaqlar əvvəl strcmp gördük. 401 00:33:43,220 --> 00:33:52,730 Çox crazy, lakin bu strcmp strcmp ilə bir problem var ki, sınıq və ya ki demektir? 402 00:33:52,730 --> 00:33:57,110 Siz, Aleksandr nə düşünürsünüz? 403 00:33:57,110 --> 00:34:04,890 [Alexander] bu mu - 254 xətti var? Və - deyil ikili, lakin onların tavanlar deyil, 404 00:34:04,890 --> 00:34:10,590 və hər bir funksiyası üçün başqa bir dil var. - Ki, funksiyası 254, və ya mi? 405 00:34:10,590 --> 00:34:21,460 >> Bu line 254 var. Bu. S faylı kimi görünür, yəqin ki, bu toplantının kodu belə. 406 00:34:21,460 --> 00:34:25,949 >> Ancaq mən, bir seg günah kazanılmış etdik, çünki daha çətin bir şey olduğunu təxmin 407 00:34:25,949 --> 00:34:29,960 və strcmp funksiya geliyor kimi görünür, 408 00:34:29,960 --> 00:34:38,030 bu demək deyil, o ki, strcmp sınıq olunur? 409 00:34:38,030 --> 00:34:42,290 Bu ümid edirəm ki, lazımdır. Bir seqmentasiya günah var Belə ki, yalnız çünki 410 00:34:42,290 --> 00:34:49,480 sisteminin funksiyaları biri, adətən ki, yalnız düzgün adlandırıb deyil deməkdir. 411 00:34:49,480 --> 00:34:52,440 Nə həqiqətən gedən anlamaq üçün nə üçün ən qısa şey 412 00:34:52,440 --> 00:34:55,500 bir seg günah görmək zaman bu kimi crazy şey görəndə, 413 00:34:55,500 --> 00:34:59,800 siz çox yalnız əsas istifadə olan bir proqram var, xüsusilə də əgər 414 00:34:59,800 --> 00:35:03,570 bir backtrace istifadə etməkdir. 415 00:35:03,570 --> 00:35:13,080 Mən tam backtrace söz fərqli olaraq, bt yazmaqla backtrace qısaltmaq. 416 00:35:13,080 --> 00:35:16,510 Amma Charlotte, siz bt yazın və hit daxil zaman nə olar? 417 00:35:16,510 --> 00:35:23,200 [Charlotte] Bu, mənim iki xətləri, line 0 və 1 satır göstərir. 418 00:35:23,200 --> 00:35:26,150 >> Bəli. Belə line 0 və 1 satır. 419 00:35:26,150 --> 00:35:34,560 Bu proqram qəzaya zaman play-hazırda olan faktiki stack çərçivəsində edir. 420 00:35:34,560 --> 00:35:42,230 Bu topmost çərçivəsində çərçivəsində 0-dan başlayaraq, və çərçivə 1 olan alt ən gedir. 421 00:35:42,230 --> 00:35:45,140 Bizim topmost çərçivəsində strcmp çərçivəsində edir. 422 00:35:45,140 --> 00:35:50,080 Siz bu biz yalnız göstəricilər ilə viktorina edir ki, problem kimi oxşar düşünmək olar 423 00:35:50,080 --> 00:35:54,890 biz, əsas yığını çərçivəsində üst yığını çərçivəsində dəyişdirmək idi 424 00:35:54,890 --> 00:35:59,700 və biz mübadilə əsas istifadə dəyişənlərin üst istifadə dəyişənlərin idi. 425 00:35:59,700 --> 00:36:08,440 Burada qəza bizim əsas funksiyası adlanan bizim strcmp funksiyası, baş 426 00:36:08,440 --> 00:36:14,370 və backtrace Bookmark şeyi uğursuz olan funksiyaları yalnız verir, 427 00:36:14,370 --> 00:36:16,440 hər şey çağırılmış olduğu, həm də bizə izah edir. 428 00:36:16,440 --> 00:36:18,830 Mən doğru bir az daha artıq hərəkət, əgər 429 00:36:18,830 --> 00:36:26,110 biz Bəli, biz bu strcmp-sse4.s fayl line 254 idi ki, görürük. 430 00:36:26,110 --> 00:36:32,540 Amma zəng buggy1.c, line 6 edilmişdir. 431 00:36:32,540 --> 00:36:35,960 Biz yalnız kontrol və gedən nə görmək getmək bilər - biz nə edə bilərsiniz deməkdir ki, 432 00:36:35,960 --> 00:36:39,930 buggy1.c, line 6. 433 00:36:39,930 --> 00:36:43,780 Yenə bunu bir neçə yolu var. Bir gdb həyata çıxmaq üçün 434 00:36:43,780 --> 00:36:49,460 və ya başqa kodu pəncərə və cross reference açılacaq var. 435 00:36:49,460 --> 00:36:54,740 İndi ofis saat edirsinizsə, çünki O, özü-özlüyündə, olduqca lazımlı 436 00:36:54,740 --> 00:36:57,220 və bir seg günah var və hər şey qırılma olduğu üçün TF, merak edir 437 00:36:57,220 --> 00:36:59,710 yalnız "Oh, xətt 6, deyə bilərik. Mən nə bilmirəm 438 00:36:59,710 --> 00:37:03,670 lakin line 6 şey mənim proqram pozmağa səbəb olur. " 439 00:37:03,670 --> 00:37:10,430 Bunu başqa yol gdb siyahısına adlanan bu funksiyanı istifadə edə bilərsiniz. 440 00:37:10,430 --> 00:37:13,650 Siz həmçinin l ilə qısaltmaq bilər. 441 00:37:13,650 --> 00:37:18,910 Biz l hit əgər Beləliklə, biz burada nə əldə edirsiniz? 442 00:37:18,910 --> 00:37:21,160 Biz qəribə məhsulları bütün dəstə almaq. 443 00:37:21,160 --> 00:37:26,030 Bu faktiki toplaşmaq kodu 444 00:37:26,030 --> 00:37:29,860 ki strcmp_sse4_2 edir. 445 00:37:29,860 --> 00:37:32,440 Bu, funky cür görünür 446 00:37:32,440 --> 00:37:36,520 və biz bu alıyorsanız səbəbi, hazırda Çünki 447 00:37:36,520 --> 00:37:40,160 Gdb çərçivəsində 0 bizi var. 448 00:37:40,160 --> 00:37:43,070 >> Belə ki, zaman biz baxmaq dəyişənlər, biz mənbə kodu baxmaq istənilən vaxt, 449 00:37:43,070 --> 00:37:50,530 biz yığını çərçivəsində ilgili biz da hazırda olduğunuz mənbə kodu geçirdiğiniz 450 00:37:50,530 --> 00:37:53,200 Belə mənalı bir şey almaq üçün, biz var 451 00:37:53,200 --> 00:37:57,070 daha anlamlı bir yığın çərçivəsində hərəkət. 452 00:37:57,070 --> 00:38:00,180 Bu halda, əsas yığını çərçivəsində bir az daha məntiqli olardı 453 00:38:00,180 --> 00:38:02,680 əslində biz yazdı kodu idi. 454 00:38:02,680 --> 00:38:05,330 Deyil strcmp kodu. 455 00:38:05,330 --> 00:38:08,650 Biz iki çünki, bu halda, çərçivələr arasında hərəkət yolu, 456 00:38:08,650 --> 00:38:10,430 biz, 0 və 1 var 457 00:38:10,430 --> 00:38:13,650 Siz yuxarı ve aşağı əmrləri ilə bunu. 458 00:38:13,650 --> 00:38:18,480 Mən bir çərçivəsində hərəkət edin 459 00:38:18,480 --> 00:38:21,770 İndi əsas yığını çərçivəsində edirəm. 460 00:38:21,770 --> 00:38:24,330 Mən idi geri aşağı hərəkət edə bilər 461 00:38:24,330 --> 00:38:32,830 yenidən qalxmaq, daha aşağı getmək və yenidən gedin. 462 00:38:32,830 --> 00:38:39,750 Əgər gdb sizin proqram varsa, bir crash almaq, siz backtrace almaq 463 00:38:39,750 --> 00:38:42,380 və sizin neler bilmirəm ki, bəzi fayl olduğunu görürük. 464 00:38:42,380 --> 00:38:45,460 Siz siyahısı cəhd, kodu, sizə tanış baxmaq deyil 465 00:38:45,460 --> 00:38:48,150 Sizin çərçivəsində nəzər və siz harada həyata rəqəm. 466 00:38:48,150 --> 00:38:51,010 Siz yanlış yığın çərçivəsində yəqin edirik. 467 00:38:51,010 --> 00:38:58,760 Və ya ən azı, siz həqiqətən debug bilər ki, bir deyil, bir yığın çərçivəsində edirik. 468 00:38:58,760 --> 00:39:03,110 İndi müvafiq yığını çərçivəsində istəyirik ki, biz, əsas etdiyiniz 469 00:39:03,110 --> 00:39:08,100 indi biz xətti nə anlamaq üçün siyahıdan funksiyanı istifadə edə bilərsiniz. 470 00:39:08,100 --> 00:39:13,590 Və görürük ki, bu burada bizim üçün çap. 471 00:39:13,590 --> 00:39:19,470 Amma biz eyni siyahısını təşkil edə bilər, və siyahısı bizə bu gözəl printout verir 472 00:39:19,470 --> 00:39:23,920 burada gedən olan faktiki mənbə kodu. 473 00:39:23,920 --> 00:39:26,420 >> Xüsusilə, biz xətt 6 baxmaq olar. 474 00:39:26,420 --> 00:39:29,330 Biz burada neler bilərsiniz. 475 00:39:29,330 --> 00:39:31,250 Biz bir string müqayisə edirik kimi görünür 476 00:39:31,250 --> 00:39:41,050 simli "CS50 süxurlar" və argv arasında [1]. 477 00:39:41,050 --> 00:39:45,700 Bu barədə bir şey şaqqıltılı edilib. 478 00:39:45,700 --> 00:39:54,120 Missy Belə ki, burada neler bilər hər hansı bir fikir var? 479 00:39:54,120 --> 00:39:59,400 [Missy] bu şaqqıltılı görə bilmirəm. Bu şaqqıltılı oldu niyə >> Siz bilmirəm? 480 00:39:59,400 --> 00:40:02,700 Jimmy, hər hansı bir fikir? 481 00:40:02,700 --> 00:40:06,240 [Jimmy] Mən tamamilə əmin deyiləm, amma biz string istifadə son dəfə müqayisə 482 00:40:06,240 --> 00:40:10,260 və ya strcmp, biz bunu altında üç müxtəlif hallarda kimi idi. 483 00:40:10,260 --> 00:40:12,800 Biz == yox idi, mən sağ ilk olaraq, düşünmürəm. 484 00:40:12,800 --> 00:40:16,700 Bunun əvəzinə, üç ayrılmış və bir == 0 idi 485 00:40:16,700 --> 00:40:19,910 biri idi <0, mən hesab edirəm və bir idi> 0. 486 00:40:19,910 --> 00:40:22,590 Kimi Belə ki, bəlkə bir şey? >> Bəli. Belə ki, bu məsələ var 487 00:40:22,590 --> 00:40:27,200 biz düzgün müqayisə edirlər? 488 00:40:27,200 --> 00:40:31,660 Stella? Hər hansı bir fikir? 489 00:40:31,660 --> 00:40:38,110 [Stella] Mən əmin deyiləm. >> Əmin deyil. Daniel? Düşüncələr? Okay. 490 00:40:38,110 --> 00:40:44,770 Bu proqram qaçdı nə zaman burada baş deyil çıxır 491 00:40:44,770 --> 00:40:48,370 Siz ilk dəfə proqram, Daniel, qaçıb zaman və biz seg günah var 492 00:40:48,370 --> 00:40:50,800 Əgər command line arguments vermək idi? 493 00:40:50,800 --> 00:40:58,420 [Daniel] No >> No Bu halda, argv dəyəri nə [1]? 494 00:40:58,420 --> 00:41:00,920 >> Heç bir dəyəri yoxdur. >> Hüququ. 495 00:41:00,920 --> 00:41:06,120 Yaxşı, heç bir müvafiq simli dəyər var. 496 00:41:06,120 --> 00:41:10,780 Amma bəzi dəyəri var. Orada saxlanılır olur ki, dəyəri nədir? 497 00:41:10,780 --> 00:41:15,130 >> A zibil dəyər? Bu halda, ya zibil dəyəri və ya >>, 498 00:41:15,130 --> 00:41:19,930 bu argv serialın sonunda həmişə null ilə xitam verilir. 499 00:41:19,930 --> 00:41:26,050 Beləliklə, nə həqiqətən saxlanılır oldu null var. 500 00:41:26,050 --> 00:41:30,810 Başqa bir yolu deyil, onun vasitəsilə düşüncə çox, bu həll 501 00:41:30,810 --> 00:41:33,420 onu çap cəhd edir. 502 00:41:33,420 --> 00:41:35,880 Mən gdb istifadə böyük olduğunu deyirdi burada 503 00:41:35,880 --> 00:41:40,640 istədiyiniz bütün dəyişənlər çap edə bilərsiniz, çünki bütün dəyərlər 504 00:41:40,640 --> 00:41:43,230 Bu lazımlı-modabaz p komanda istifadə edərək. 505 00:41:43,230 --> 00:41:48,520 Mən p yazın və əgər mən bir dəyişən və ya bir dəyişən adı dəyəri yazın 506 00:41:48,520 --> 00:41:55,320 , argc demək, mən argc 1 görürük. 507 00:41:55,320 --> 00:42:01,830 Mən argv çap etmək istəyirsinizsə, [0], yalnız belə bunu edə bilərsiniz. 508 00:42:01,830 --> 00:42:04,840 Və gördük kimi, argv [0] həmişə proqram adı, 509 00:42:04,840 --> 00:42:06,910 həmişə yürütülebilir adı. 510 00:42:06,910 --> 00:42:09,740 Burada siz tam yol adı var bax. 511 00:42:09,740 --> 00:42:15,920 Mən də çap edə bilərsiniz argv [1] və nə görmək. 512 00:42:15,920 --> 00:42:20,890 >> Burada mistik dəyər bu cür var. 513 00:42:20,890 --> 00:42:23,890 Biz bu 0x0 var. 514 00:42:23,890 --> 00:42:27,850 Biz hexadecimal nömrələri haqqında söhbət zaman müddətinin əvvəlində saxla? 515 00:42:27,850 --> 00:42:34,680 Və ya hex 50 təmsil haqqında pset 0 sonunda ki, az sual? 516 00:42:34,680 --> 00:42:39,410 Biz CS hex nömrələri yazmaq yol, yalnız özümüzü çaşdırmaq deyil 517 00:42:39,410 --> 00:42:46,080 decimal nömrələri ilə, biz həmişə 0x ilə prefiks deyil. 518 00:42:46,080 --> 00:42:51,420 Beləliklə, bu 0x prefiks həmişə yalnız bir hexadecimal sayı aşağıdakı sayda şərh deməkdir 519 00:42:51,420 --> 00:42:57,400 bir string kimi deyil, bir decimal sayı kimi, bir ikili sayı. 520 00:42:57,400 --> 00:43:02,820 Sayı 5-0 hexadecimal cari sayı ildən. 521 00:43:02,820 --> 00:43:06,240 Və decimal, 50 bir sıra. 522 00:43:06,240 --> 00:43:10,050 Belə ki, bu biz disambiguate yalnız necə. 523 00:43:10,050 --> 00:43:14,860 Beləliklə də 0 decimal olan 0x0 vasitəsi hexadecimal 0, ikili 0. 524 00:43:14,860 --> 00:43:17,030 Bu, yalnız dəyəri 0 olacaq. 525 00:43:17,030 --> 00:43:22,630 Bu null yaddaş, həqiqətən, nə ki çıxır. 526 00:43:22,630 --> 00:43:25,940 Null yalnız 0-dir. 527 00:43:25,940 --> 00:43:37,010 Burada element [1] null edir argv saxlanılır. 528 00:43:37,010 --> 00:43:45,220 Beləliklə, biz bir null string üçün "CS50 süxurlar" string müqayisə çalışdığınız. 529 00:43:45,220 --> 00:43:48,130 Belə null dereferencing, null at şeyi əldə etmək üçün çalışırıq, 530 00:43:48,130 --> 00:43:55,050 o, adətən, seqmentasiya günah və ya baş başqa pis şeylər bir növ səbəb edir. 531 00:43:55,050 --> 00:43:59,350 Və strcmp kontrol deyil çıxır ki, 532 00:43:59,350 --> 00:44:04,340 siz null ki, bir dəyər qəbul etdik və ya deyil. 533 00:44:04,340 --> 00:44:06,370 Əksinə, yalnız irəli gedir, onun şey üçün çalışır 534 00:44:06,370 --> 00:44:14,640 bu çatışmazlıqlar seg əgər, bu çatışmazlıqlar seg və sizin problem var. Siz düzeltmek getmək üçün var. 535 00:44:14,640 --> 00:44:19,730 Həqiqətən tez, bu problem necə düzeltmek bilər? Charlotte? 536 00:44:19,730 --> 00:44:23,540 [Charlotte] Siz əgər istifadə kontrol edə bilərsiniz. 537 00:44:23,540 --> 00:44:32,240 Belə ki, əgər argv [1] null deyil, == 0, sonra 1 qayıtmaq, və ya bir şey [anlaşılmaz]. 538 00:44:32,240 --> 00:44:34,590 >> Bəli. Belə ki, biz kontrol edə bilərsiniz kimi, bunu bir böyük yol 539 00:44:34,590 --> 00:44:39,230 biz strcmp keçir üzeresiniz dəyəri argv [1] ki, null edilir? 540 00:44:39,230 --> 00:44:45,830 Bu null, onda biz, abort tamam demək olar. 541 00:44:45,830 --> 00:44:49,450 >> Bunu etmək üçün daha ümumi şəkildə argc dəyər istifadə etməkdir. 542 00:44:49,450 --> 00:44:52,040 Siz əsas əvvəlində burada görə bilərsiniz 543 00:44:52,040 --> 00:44:58,040 biz command line arguments istifadə zaman adətən ki, ilk test çıxarılmışdır 544 00:44:58,040 --> 00:45:05,240 bizim argc dəyər biz gözləyirik nə olub olmadığını yoxlamaq üçün edir. 545 00:45:05,240 --> 00:45:10,290 Bu halda, biz, ən azı iki dəlilləri bekliyorsanız 546 00:45:10,290 --> 00:45:13,660 Bu proqram adı plus digər biri. 547 00:45:13,660 --> 00:45:17,140 Biz burada ikinci dəlil istifadə üzeresiniz Çünki. 548 00:45:17,140 --> 00:45:21,350 Belə ki, bizim strcmp zəng əvvəl əvvəlcədən test bir növ olan 549 00:45:21,350 --> 00:45:37,390 argv ən azı 2 olub ki, testlər, həmçinin şey eyni cür edərdi. 550 00:45:37,390 --> 00:45:40,620 Yenə proqram çalışan işləri biz görürük. 551 00:45:40,620 --> 00:45:45,610 Siz həmişə, həqiqətən, gözəl olan gdb ərzində proqram yenidən başlada bilərsiniz. 552 00:45:45,610 --> 00:45:49,310 Siz çalıştırabilirsiniz və siz proqram dəlilləri qəbul edərkən 553 00:45:49,310 --> 00:45:53,060 Siz gdb qədər önyükleme zaman run Zəng zaman onlara keçmək deyil. 554 00:45:53,060 --> 00:45:57,120 Bu yolla siz müxtəlif dəlilləri ilə hər zaman proqram invoking saxlaya bilərsiniz. 555 00:45:57,120 --> 00:46:08,080 Belə ki, run və ya yenidən, mən r yazın bilər, və biz yazın əgər nə "salam" olur bax edək. 556 00:46:08,080 --> 00:46:11,140 Daha əvvəldən başlamaq istəyirsinizsə, həmişə xahiş edəcək. 557 00:46:11,140 --> 00:46:17,490 Adətən, daha əvvəldən başlamaq istəyirəm. 558 00:46:17,490 --> 00:46:25,010 Və bu nöqtədə o yeniden daha, onu çap 559 00:46:25,010 --> 00:46:28,920 biz mübahisə salam ilə, buggy1 çalışan olduğunuz proqram, 560 00:46:28,920 --> 00:46:32,720 və bu standart çap, bu kədərli üz "Siz, D almaq", deyir. 561 00:46:32,720 --> 00:46:37,610 Amma biz günah seg vermədi. Bu proses çıxış edib. 562 00:46:37,610 --> 00:46:39,900 Belə ki, çox yaxşı görünür. 563 00:46:39,900 --> 00:46:43,050 No daha seg günah, biz, bu, ötən etdi 564 00:46:43,050 --> 00:46:48,190 ki, həqiqətən biz əldə edilmiş seg günah səhv olduğu kimi belə görünür. 565 00:46:48,190 --> 00:46:51,540 Təəssüf ki, biz bir D. əldə edirik ki, bizə deyir 566 00:46:51,540 --> 00:46:54,090 >> Biz geri kodu baxmaq və orada gedən nə görə bilərsiniz 567 00:46:54,090 --> 00:46:57,980 nə həyata rəqəm - biz bir D. var ki, bizə izah nə 568 00:46:57,980 --> 00:47:03,690 Bu printf bir D. var ki Bakalým, burada edilib 569 00:47:03,690 --> 00:47:08,540 Biz siyahısını yazın Əgər yazaraq siyahısını saxlamaq kimi, bu, sizin proqram vasitəsilə aşağı iterating saxlayır 570 00:47:08,540 --> 00:47:10,940 belə ki, sizin proqram ilk bir neçə xətləri göstərmək lazımdır. 571 00:47:10,940 --> 00:47:15,450 Sonra siz növbəti bir neçə xətləri, və növbəti yığın və növbəti yığın göstərmək lazımdır. 572 00:47:15,450 --> 00:47:18,240 Və aşağı getmək üçün çalışırıq saxlamaq lazımdır. 573 00:47:18,240 --> 00:47:21,180 İndi biz "16 saylı sıra həyata girdi." Almaq lazımdır 574 00:47:21,180 --> 00:47:23,940 Yalnız 15 xətləri var. 575 00:47:23,940 --> 00:47:30,310 Bu baxımdan almaq və "mən nə etməliyəm?" Merak varsa, siz köməyi komanda istifadə edə bilərsiniz. 576 00:47:30,310 --> 00:47:34,340 Kömək və sonra bir komanda adını vermək istifadə edin. 577 00:47:34,340 --> 00:47:36,460 Və siz gdb Bookmark məhsullarının bütün bu cür verir baxın. 578 00:47:36,460 --> 00:47:43,870 Bu "heç bir dəlil ilə, əvvəlki siyahı sonra və ya ətrafında on daha xətləri siyahıları, deyir. 579 00:47:43,870 --> 00:47:47,920 Siyahısı - əvvəl on xətləri siyahıları - " 580 00:47:47,920 --> 00:47:52,960 Belə siyahısına minus istifadə edək. 581 00:47:52,960 --> 00:47:57,000 Və bu, 10 xətləri əvvəlki siyahıları, siz siyahısı ilə bir az ətrafında oynaya bilər. 582 00:47:57,000 --> 00:48:02,330 Siz siyahısı, siyahısı edə bilərsiniz - siz hətta, siyahı 8 kimi, siyahıda bir sıra verə bilər 583 00:48:02,330 --> 00:48:07,500 və line 8 ətrafında 10 xətləri listeleriz. 584 00:48:07,500 --> 00:48:10,290 Əgər başqa bir sadə var və burada neler bilərsiniz. 585 00:48:10,290 --> 00:48:13,980 Siz CS50 süxurların yazın, bu, "Siz A. olsun" çap 586 00:48:13,980 --> 00:48:16,530 Əks halda o, "Siz D. olsun" çap 587 00:48:16,530 --> 00:48:23,770 Bummer şəhər. Bütün hüquqlar. Bəli? 588 00:48:23,770 --> 00:48:26,730 >> [Daniel] Mən quotes olmadan CS50 süxurların bunu cəhd zaman, 589 00:48:26,730 --> 00:48:29,290 ki, "Siz D. olsun" deyir 590 00:48:29,290 --> 00:48:32,560 Mən bu iş üçün quotes lazım; niyə ki? 591 00:48:32,560 --> 00:48:38,490 >> Bəli. Bu çıxır ki, - bu başqa fun az yağlı tikə edir - 592 00:48:38,490 --> 00:48:47,900 biz run Əgər, proqram run və biz CS50 süxurların yazın zaman, 593 00:48:47,900 --> 00:48:50,800 kimi, Daniel o deyirdi, və Enter düyməsini basın 594 00:48:50,800 --> 00:48:52,870 hələ biz D. almaq deyir 595 00:48:52,870 --> 00:48:55,580 Və sual, niyə bu deyil? 596 00:48:55,580 --> 00:49:02,120 Və bizim terminal və gdb də bu iki ayrı-ayrı arqumentlər kimi analiz çıxır ki. 597 00:49:02,120 --> 00:49:04,800 Kimi nəzərdə tutulmuş olan bir yer var Çünki 598 00:49:04,800 --> 00:49:08,730 ilk mübahisə sona çatdı; növbəti mübahisə başlamaq üçün edir. 599 00:49:08,730 --> 00:49:13,260 Iki o birləşdirmək yolu və ya Bağışlayın, bir mübahisəyə, 600 00:49:13,260 --> 00:49:18,510 quotes istifadə edir. 601 00:49:18,510 --> 00:49:29,560 Biz quotes qoydu və yenidən run Belə ki, indi, biz A. almaq 602 00:49:29,560 --> 00:49:38,780 Belə ki, yalnız recap üçün heç quotes, CS50, daş iki ayrı arqumentlər kimi ayrıştırılan olunur. 603 00:49:38,780 --> 00:49:45,320 Quotes, bu cəmi bir arqument kimi ayrıştırılan edir. 604 00:49:45,320 --> 00:49:53,070 >> Biz breakpoint bu görürük. 605 00:49:53,070 --> 00:49:54,920 İndiyə qədər biz proqram çalışan etdik və bu, çalışan edilmişdir 606 00:49:54,920 --> 00:49:58,230 ya bu çatışmazlıqlar və ya Xit səhv seg qədər 607 00:49:58,230 --> 00:50:05,930 və ya çıxış edib və bütün tamamilə gözəl kadar. 608 00:50:05,930 --> 00:50:08,360 Bəzən, çünki bu, mütləq ən faydalı şey deyil 609 00:50:08,360 --> 00:50:11,840 Siz proqram bir səhv var, ancaq bir seqmentasiya günah səbəb deyil. 610 00:50:11,840 --> 00:50:16,950 Bu dayandırmaq üçün proqram və ya bu kimi bir şey səbəb deyil. 611 00:50:16,950 --> 00:50:20,730 Proqram xüsusi bir nöqtədə fasilə gdb almaq yolu 612 00:50:20,730 --> 00:50:23,260 bir breakpoint müəyyən edir. 613 00:50:23,260 --> 00:50:26,520 Siz ya bir funksiya adı bir breakpoint qəbulu ilə bunu edə bilərsiniz 614 00:50:26,520 --> 00:50:30,770 və ya kodu müəyyən bir xətt üzrə breakpoint bilərsiniz. 615 00:50:30,770 --> 00:50:34,450 Yadda asan, - çünki mən, funksiyası adları breakpoints qurmaq istəyirəm 616 00:50:34,450 --> 00:50:37,700 və həqiqətən getmək və bir az qədər mənbə kodu dəyişdirmək əgər, 617 00:50:37,700 --> 00:50:42,020 sonra breakpoint həqiqətən, sizin kodu müddətində eyni yerdə olacaq. 618 00:50:42,020 --> 00:50:44,760 Halbuki siz xəttindən istifadə etdiyiniz və xətt nömrələri dəyişdirmək əgər 619 00:50:44,760 --> 00:50:51,740 bəzi kodu əlavə edin və ya silin, çünki sonra breakpoints bütün tamamilə qədər berbat olunur. 620 00:50:51,740 --> 00:50:58,590 Mən ən ümumi biri əsas funksiyası haqqında breakpoint müəyyən edilir. 621 00:50:58,590 --> 00:51:05,300 Tez-tez mən gdb qədər önyükleme lazımdır, mən Enter, b əsas yazın lazımdır ki, bir breakpoint ayarlarsınız 622 00:51:05,300 --> 00:51:10,630 yalnız deyir ki, əsas funksiyası haqqında, "tez çalışan başlamaq kimi proqram durdur" 623 00:51:10,630 --> 00:51:17,960 və bu yolla, mən CS50 qayalar, demək, mənim proqram çalıştırdığınızda iki arqumentlər 624 00:51:17,960 --> 00:51:24,830 və Enter düyməsini basın, bu, əsas funksiyası olur və doğru ilk xətti dayanır 625 00:51:24,830 --> 00:51:30,620 bu strcmp funksiyası qiymətləndirir sağ əvvəl. 626 00:51:30,620 --> 00:51:34,940 >> Mən durdurulmuş alıram-ci ildən, indi ətrafında mucking və nə görmeye başlamaq bilər 627 00:51:34,940 --> 00:51:40,250 mənim proqram keçdi ki, müxtəlif dəyişənlərin bütün. 628 00:51:40,250 --> 00:51:43,670 Burada argc çap və neler bilərsiniz. 629 00:51:43,670 --> 00:51:50,030 Bu 3 müxtəlif dəyərlər var çünki argc, 3 görürük. 630 00:51:50,030 --> 00:51:54,060 Bu proqram adı var, ilk dəlil və ikinci dəlil var. 631 00:51:54,060 --> 00:52:09,330 Biz argv baxaraq həmin çap edə bilərsiniz [0], argv [1], və argv [2]. 632 00:52:09,330 --> 00:52:12,030 Bu strcmp zəng uğursuz gedir niyə İndi siz də görə bilərsiniz 633 00:52:12,030 --> 00:52:21,650 Əgər bu iki ayrı-ayrı dəlilləri daxil CS50 və süxurların parçalamaq idi ki, çünki. 634 00:52:21,650 --> 00:52:27,250 Bir breakpoint edib sonra bu nöqtədə, sizin proqram gezinmek üçün davam edə bilər 635 00:52:27,250 --> 00:52:32,920 xətti ilə line kimi, yenə proqram başlayaraq qarşı çıxdı. 636 00:52:32,920 --> 00:52:35,520 Daha və yalnız proqram başlamaq istəmirəm Belə ki, buradan davam 637 00:52:35,520 --> 00:52:41,970 siz davam komanda istifadə edə bilərsiniz və davam sonuna proqramı davam edəcək. 638 00:52:41,970 --> 00:52:45,010 Sadece burada olduğu kimi. 639 00:52:45,010 --> 00:52:54,880 Mən proqram, CS50 süxurların yenidən başladın Lakin, bu, daha breakpoint edib 640 00:52:54,880 --> 00:52:59,670 və bu zaman, əgər mən, proqram qalan bütün yol yalnız getmək istəmirəm 641 00:52:59,670 --> 00:53:08,040 Mən də n qısaltmaq olan növbəti komanda istifadə edə bilərsiniz. 642 00:53:08,040 --> 00:53:12,960 Bu line proqram line vasitəsilə addım olacaq. 643 00:53:12,960 --> 00:53:17,530 Şeyi yerinə Beləliklə şeyi yenilənir almaq kimi, kimi dəyişənlərin dəyişiklik izləyə bilərsiniz. 644 00:53:17,530 --> 00:53:21,550 Hansı olduqca gözəldir. 645 00:53:21,550 --> 00:53:26,570 Digər sərin şey deyil, daha və üzərində eyni funksiyanı təkrar çox 646 00:53:26,570 --> 00:53:30,670 yalnız Enter əgər - belə ki, burada mən bir şey Yığdığınız deyil bax - 647 00:53:30,670 --> 00:53:33,780 Mən yalnız Enter, bu, əvvəlki komanda təkrar 648 00:53:33,780 --> 00:53:36,900 və ya əvvəlki gdb komanda Mən daxil qoymaq 649 00:53:36,900 --> 00:53:56,000 Mən Enter'a saxlamaq və xətti ilə mənim kodu xətt vasitəsilə gücləndirməklə davam edəcəyik. 650 00:53:56,000 --> 00:53:59,310 Mən sizə uşaqlar digər arabası proqramlar, eləcə kontrol getmək üçün tavsiye ederim. 651 00:53:59,310 --> 00:54:01,330 Biz onları bütün gün bölmə vasitəsilə almaq üçün vaxt yoxdur. 652 00:54:01,330 --> 00:54:05,890 Bu mənbə kodu yoxdur, belə ki, neler bax cür bilərsiniz 653 00:54:05,890 --> 00:54:07,730 Həqiqətən Zorlandığınız əgər pərdə arxasında, 654 00:54:07,730 --> 00:54:11,940 lakin ən azı, yalnız gdb qədər önyükleme təcrübə 655 00:54:11,940 --> 00:54:13,940 bu barədə pozur qədər, proqram çalışan 656 00:54:13,940 --> 00:54:18,260 ki, backtrace əldə qəza idi fəaliyyət nə həyata figuring 657 00:54:18,260 --> 00:54:24,450 nə line ki, bəzi dəyişən dəyərləri çap olub 658 00:54:24,450 --> 00:54:30,140 ki, həqiqətən, sizin irəli gedən kömək edəcək, çünki yalnız belə ki, bunun üçün bir fikir almaq. 659 00:54:30,140 --> 00:54:36,340 Bu nöqtədə, sizə q çıxmaq istifadə və ya sadəcə yoxdur ki, gdb həyata çıxmaq olacaq. 660 00:54:36,340 --> 00:54:40,460 Proqram hələ çalışan orta və bu, çıxış deyilsə, 661 00:54:40,460 --> 00:54:43,510 həmişə xahiş edəcək ", siz həqiqətən çıxmaq əminsinizmi?" 662 00:54:43,510 --> 00:54:48,770 Siz yalnız bəli hit bilər. 663 00:54:48,770 --> 00:54:55,250 >> İndi biz pişik proqramı olan biz növbəti problem baxmaq olacaq. 664 00:54:55,250 --> 00:54:59,880 Siz yönlendirme və borular haqqında qısa watch varsa, Tommy bu proqram istifadə görürsünüz 665 00:54:59,880 --> 00:55:07,540 ki, əsasən ekran bir fayl bütün çıxış görüntüler. 666 00:55:07,540 --> 00:55:12,660 Mən pişik run Belə ki, əgər bu cihaz həqiqətən daxili proqram, 667 00:55:12,660 --> 00:55:16,860 siz Mac varsa terminal açmaq əgər siz də Mac bunu edə bilərsiniz. 668 00:55:16,860 --> 00:55:25,630 Və biz - pişik, nin, cp.c deyək və Enter düyməsini basın. 669 00:55:25,630 --> 00:55:29,640 Bu nə, biz bir az yuxarı və biz line qaçdı yerləşir görürsünüzsə 670 00:55:29,640 --> 00:55:40,440 və ya biz pişik komanda qaçdı yerləşir, bu, sözün yalnız ekran cp.c məzmunu çap. 671 00:55:40,440 --> 00:55:44,140 Biz daha çalıştırabilirsiniz və birlikdə çox faylları bilər. 672 00:55:44,140 --> 00:55:49,880 Beləliklə, siz pişiyi cp.c edə bilərsiniz, sonra biz də cat.c fayl concatenate bilər 673 00:55:49,880 --> 00:55:53,250 ki, biz yazmaq etdiyiniz proqram 674 00:55:53,250 --> 00:55:58,140 və bu, bizim ekran geri geri həm faylları çap edəcəyik. 675 00:55:58,140 --> 00:56:05,490 Biz bir az yuxarı Belə ki, görürük ki, biz bu pişik cp.c, cat.c, qaçıb zaman 676 00:56:05,490 --> 00:56:17,110 ilk bu cp fayl çap və sonra aşağıda, sağ aşağı burada cat.c fayl çap. 677 00:56:17,110 --> 00:56:19,650 Biz yalnız bizim ayaqları yaş almaq üçün istifadə olacaq. 678 00:56:19,650 --> 00:56:25,930 Terminal üçün sadə çap ətrafında Play ki, necə işlədiyini görmək. 679 00:56:25,930 --> 00:56:39,170 Uşaqlar gedit cat.c ilə açmaq varsa, Enter 680 00:56:39,170 --> 00:56:43,760 Əgər yazmaq haqqında olduğunu proqram bilərsiniz. 681 00:56:43,760 --> 00:56:48,980 Biz bu gözəl qazan boşqab daxil sonra, biz bütün ki, yazmağa vaxt sərf etmək yoxdur belə. 682 00:56:48,980 --> 00:56:52,310 Biz də daxil keçdi arqumentlər sayı yoxlamaq 683 00:56:52,310 --> 00:56:56,910 Biz gözəl istifadə mesaj çap. 684 00:56:56,910 --> 00:57:00,950 >> Bu, təkrar kimi söhbət etdik ki, şey növ 685 00:57:00,950 --> 00:57:04,490 demək olar ki, əzələ yaddaş kimi. 686 00:57:04,490 --> 00:57:07,190 Just məhsulları eyni cür bunu saxlamaq unutmayın 687 00:57:07,190 --> 00:57:11,310 və həmişə faydalı mesajı bir növ həyata çap 688 00:57:11,310 --> 00:57:17,670 ki, insanların proqram run necə bilirik. 689 00:57:17,670 --> 00:57:21,630 Pişik, bu olduqca sadə, biz yalnız müxtəlif arqumentlər bütün vasitəsilə getmək olacaq 690 00:57:21,630 --> 00:57:24,300 ki, proqram qəbul edilmişdir və biz çap olacaq 691 00:57:24,300 --> 00:57:29,950 bir zamanda ekran biri onların məzmunu həyata. 692 00:57:29,950 --> 00:57:35,670 Ekran faylları çap etmək üçün, biz çox oxşar bir şey olacaq 693 00:57:35,670 --> 00:57:38,120 biz Yarışmanın sonunda nə etdi. 694 00:57:38,120 --> 00:57:45,350 Proqram işə ki, viktorina, sonunda biz bir fayl açmaq idi 695 00:57:45,350 --> 00:57:48,490 və sonra onu çap idi. 696 00:57:48,490 --> 00:57:54,660 Bu halda, bir fayl açmaq olacaq və biz əvəzinə oxu olacaq. 697 00:57:54,660 --> 00:58:00,630 Sonra əvəzinə bir fayl üçün, çap olacaq, biz ekran çap olacaq. 698 00:58:00,630 --> 00:58:05,830 Belə ki, bütün printf ilə əvvəl etdiyiniz ekran çap. 699 00:58:05,830 --> 00:58:08,290 Belə ki, çox crazy deyil. 700 00:58:08,290 --> 00:58:12,190 Amma bir fayl oxu qəribə növ edir. 701 00:58:12,190 --> 00:58:17,300 Biz bir zaman bir az keçmək lazımdır. 702 00:58:17,300 --> 00:58:20,560 Uşaqlar üçün viktorina, problem 33, ki, son problem geri getmək Əgər 703 00:58:20,560 --> 00:58:27,280 biz burada nə olacaq ki, ilk line, fayl açılması, biz nə idi çox oxşardır. 704 00:58:27,280 --> 00:58:36,370 Stella Beləliklə, biz bir fayl açmaq zaman kimi o xətt göz edir? 705 00:58:36,370 --> 00:58:47,510 [Stella] Capital Resim *, fayl - >> OK. >> - Fopen bərabərdir. >> Yup. 706 00:58:47,510 --> 00:58:55,980 Bu halda hansı? Bu şərhi var. 707 00:58:55,980 --> 00:59:06,930 >> Bu comment var? argv [i] və r? 708 00:59:06,930 --> 00:59:11,300 Məhz >>. Hüququ haqqında. Belə ki, Stella tamamilə doğru. 709 00:59:11,300 --> 00:59:13,720 Bu xətt kimi görünür. 710 00:59:13,720 --> 00:59:19,670 Biz bir fayl axın dəyişən almaq Resim * onu saxlamaq üçün gedir, belə ki, etdiyiniz bütün caps, 711 00:59:19,670 --> 00:59:25,720 Resim, * və bu dəyişən adı fayl olacaq. 712 00:59:25,720 --> 00:59:32,250 Biz istəyirəm nə zəng edə bilər. Biz istədiyiniz nə olursa olsun, bu first_file ya file_i zəng edə bilər. 713 00:59:32,250 --> 00:59:37,590 Və sonra fayl adı bu proqram üçün command line üzrə qəbul edilib. 714 00:59:37,590 --> 00:59:44,450 Belə ki, argv saxlanılan var [i], sonra oxumaq rejimində bu faylı açmaq olacaq. 715 00:59:44,450 --> 00:59:48,100 Biz fayl açmıştınız İndi ki, biz həmişə bunu unutmayın ki, bir şey 716 00:59:48,100 --> 00:59:52,230 biz bir fayl açmıştınız zaman? Bağlayın. 717 00:59:52,230 --> 00:59:57,220 Missy Belə ki, necə bir fayl yaxın edirsiniz? 718 00:59:57,220 --> 01:00:01,020 [Missy] fclose (fayl) >> fclose (fayl). Exactly. 719 01:00:01,020 --> 01:00:05,340 Böyük. Okay. Biz burada comment etmək üçün bu da baxsaq, 720 01:00:05,340 --> 01:00:11,940 o "Açıq argv [i] və stdout onun məzmunu çap." deyir 721 01:00:11,940 --> 01:00:15,460 >> Standard həyata qəribə adıdır. Stdout deyərək yalnız bizim yoldur 722 01:00:15,460 --> 01:00:22,880 biz terminal çap etmək istəyirik, biz standart output stream onu ​​çap etmək istəyirəm. 723 01:00:22,880 --> 01:00:26,450 Biz, həqiqətən, burada bu comment xilas edə bilər. 724 01:00:26,450 --> 01:00:36,480 Mən bunu seçin və biz nə olduğundan yapışdırıb gedirəm. 725 01:00:36,480 --> 01:00:41,290 Bu nöqtədə, indi bit ilə fayl bit oxumaq lazımdır. 726 01:00:41,290 --> 01:00:46,300 Biz oxu faylları yolları bir neçə müzakirə etdik. 727 01:00:46,300 --> 01:00:51,830 Hansı isə bu günə qədər Seçilmişlərə var? 728 01:00:51,830 --> 01:00:57,960 Hansı yolla siz görüldü və ya faylları oxumaq üçün xatırlayırsınız? 729 01:00:57,960 --> 01:01:04,870 [Daniel] fread? >> Fread? Belə fread biridir. Jimmy, hər hansı digər bilirik? 730 01:01:04,870 --> 01:01:12,150 [Jimmy] No >> OK. Xeyr. Charlotte? Aleksandr? Hər hansı digər? Okay. 731 01:01:12,150 --> 01:01:20,740 Belə ki, digər isə biz çox istifadə lazımdır ki, bir fgetc edilir. 732 01:01:20,740 --> 01:01:26,410 Də fscanf var; uşaqlar burada bir model görmək? 733 01:01:26,410 --> 01:01:29,170 Onlar bütün f ilə başlayır. Bir fayl ilə bir şey. 734 01:01:29,170 --> 01:01:35,260 Fread, fgetc, fscanf var. Bu oxu funksiyaları bütün var. 735 01:01:35,260 --> 01:01:49,120 Biz fwrite var yazılı, biz yerinə fgetc və fputc var. 736 01:01:49,120 --> 01:01:58,250 Biz də fprintf biz viktorina gördüm kimi var. 737 01:01:58,250 --> 01:02:01,680 Bu faylı oxu əhatə edən bir problem, ildən 738 01:02:01,680 --> 01:02:04,940 biz bu üç funksiyanı biri istifadə olacaq. 739 01:02:04,940 --> 01:02:10,890 Biz burada bu funksiyaların aşağı istifadə etmək fikrində deyilik. 740 01:02:10,890 --> 01:02:14,880 Bu funksiyaları bütün standart I / O kitabxana var. 741 01:02:14,880 --> 01:02:17,510 Bu proqram üst baxmaq, əgər 742 01:02:17,510 --> 01:02:24,110 biz artıq standart I / O kitabxana üçün header fayl daxil olduğunuz görə bilərsiniz. 743 01:02:24,110 --> 01:02:27,120 Biz anlamaq istəyirsinizsə, bir biz istifadə etmək istəyirsinizsə, 744 01:02:27,120 --> 01:02:29,690 biz həmişə man pages açmaq olar. 745 01:02:29,690 --> 01:02:34,350 Beləliklə, biz insan stdio yazın 746 01:02:34,350 --> 01:02:43,180 və C. ildə stdio giriş və çıxış funksiyaları haqqında bütün oxumaq 747 01:02:43,180 --> 01:02:49,870 Və biz artıq oh, baxmaq bilərsiniz. Bu fgetc qeyd edir ki, fputc qeyd edir. 748 01:02:49,870 --> 01:02:57,220 Beləliklə, siz fgetc bir az aşağı qazılması və baxmaq, demək olar 749 01:02:57,220 --> 01:03:00,060 və onun insan səhifə baxırıq. 750 01:03:00,060 --> 01:03:03,430 Siz digər funksiyaları bütün dəstə ilə yanaşı gedir ki, görmək olar: 751 01:03:03,430 --> 01:03:12,640 fgetc, fgets, getc, getchar, olur, ungetc və simvollar və strings onun girdi. 752 01:03:12,640 --> 01:03:19,180 Belə ki, bu, bizim standart daxil faylları olan simvol və strings oxumaq necə 753 01:03:19,180 --> 01:03:21,990 olan istifadəçi əhəmiyyətli deyil. 754 01:03:21,990 --> 01:03:24,780 Bu biz faktiki C. bunu necə 755 01:03:24,780 --> 01:03:30,850 Belə ki, bu GetString və GetChar funksiyaları istifadə edərək deyil 756 01:03:30,850 --> 01:03:36,840 biz CS50 kitabxana istifadə edir. 757 01:03:36,840 --> 01:03:39,710 Biz yolları bir neçə bu problem nə olacaq 758 01:03:39,710 --> 01:03:43,430 ki, siz bunu iki müxtəlif yollarla bilərsiniz. 759 01:03:43,430 --> 01:03:48,490 Bu fread Daniel qeyd funksiyası və fgetc həm bunu yaxşı yol. 760 01:03:48,490 --> 01:03:53,790 Yalnız çünki gördüyünüz kimi mən, fgetc bir az daha asan hesab 761 01:03:53,790 --> 01:03:59,660 bir dəlil, biz xarakter oxu çalışdığınız ki Resim * 762 01:03:59,660 --> 01:04:02,740 və onun qaytarılması dəyəri int edir. 763 01:04:02,740 --> 01:04:05,610 Bu doğru, bir az qarışıqdır? 764 01:04:05,610 --> 01:04:11,450 >> Biz bir xarakter əldə edirik, çünki nə bu qaytarılması bir char deyil? 765 01:04:11,450 --> 01:04:18,700 Siz uşaqlar bu char qayıtmaq bilər nə hər hansı bir fikir var? 766 01:04:18,700 --> 01:04:25,510 [Missy cavab anlaşılmaz] >> Bəli. Belə ki, Missy tamamilə doğru. 767 01:04:25,510 --> 01:04:31,570 Bu ASCII varsa, bu tam faktiki char eşlenen bilər. 768 01:04:31,570 --> 01:04:33,520 Bir ASCII xarakter ola ki, doğru bilmədi. 769 01:04:33,520 --> 01:04:36,220 Bu dəqiq nə var. 770 01:04:36,220 --> 01:04:39,190 Daha bit var sadəcə Biz int istifadə edirik. 771 01:04:39,190 --> 01:04:44,750 Bizim char yalnız 8 bit var, bizim 32-bit maşın 1 byte ki; bir char çox böyükdür. 772 01:04:44,750 --> 01:04:48,520 Və int alan bütün 4 bayt 'dəyər var. 773 01:04:48,520 --> 01:04:50,940 Və bu yol fgetc işləri çıxır ki, 774 01:04:50,940 --> 01:04:53,940 biz bu adam səhifə bir az bizim referat aşağıya fırladın əgər, 775 01:04:53,940 --> 01:05:05,000 bütün yol aşağı diyirləyin. Onlar EOF adlı bu xüsusi dəyər istifadə çıxır. 776 01:05:05,000 --> 01:05:09,640 Bu fgetc funksiyası qaytarılması dəyər kimi xüsusi daimi var 777 01:05:09,640 --> 01:05:14,570 Dosyayı sonunda basın və ya bir səhv almaq. zaman 778 01:05:14,570 --> 01:05:18,170 Və bu, düzgün EOF bu müqayisə etmək çıxır ki, 779 01:05:18,170 --> 01:05:24,060 bir int siz ki, informasiya ki, əlavə məbləğ olsun 780 01:05:24,060 --> 01:05:28,420 kimi char dəyişən istifadə edərək qarşı çıxdı. 781 01:05:28,420 --> 01:05:32,130 Fgetc səmərəli, bir faylı bir xarakter əldə baxmayaraq 782 01:05:32,130 --> 01:05:38,450 siz növü int var ki, bir şey qaytarılması olduğunu xatırlamaq istəyirəm. 783 01:05:38,450 --> 01:05:41,360 Bu istifadə etmək üçün kifayət qədər asandır, bildirib. 784 01:05:41,360 --> 01:05:44,960 Bu, bizim bir xarakter vermək olacaq; biz nə üçün bütün fayl tələb saxlamaq deyil, 785 01:05:44,960 --> 01:05:48,440 "Mənə növbəti xarakter vermək, mənə növbəti xarakter vermək, mənə növbəti xarakter verin" 786 01:05:48,440 --> 01:05:51,400 biz fayl sonuna almaq qədər. 787 01:05:51,400 --> 01:05:54,730 Və bu, bizim faylı bir zaman bir xarakteri çəkəcəyəm 788 01:05:54,730 --> 01:05:56,250 və sonra biz bu kimi nə edə bilərsiniz. 789 01:05:56,250 --> 01:06:00,160 Biz onu saxlaya bilərsiniz, biz bir string əlavə edə bilərsiniz, biz bunu çap edə bilərsiniz. 790 01:06:00,160 --> 01:06:04,630 Ki, hər hansı etməyin. 791 01:06:04,630 --> 01:06:09,600 >> Həyata geri yakınlaştırma və cat.c proqram geri gedir, 792 01:06:09,600 --> 01:06:16,170 biz fgetc istifadə etmək olacaq əgər, 793 01:06:16,170 --> 01:06:21,710 necə kodu bu növbəti line müraciət bilər? 794 01:06:21,710 --> 01:06:26,020 Biz istifadə olacaq - fread az fərqli bir şey olacaq. 795 01:06:26,020 --> 01:06:32,600 Və bu zaman, biz yalnız bir-bir xarakter üçün fgetc istifadə olacaq. 796 01:06:32,600 --> 01:06:40,910 Bütün fayl emal üçün, nə biz ola bilər? 797 01:06:40,910 --> 01:06:44,030 Bir fayl neçə simvol var? 798 01:06:44,030 --> 01:06:47,390 Bir çox var. Beləliklə, siz yəqin ki, bir almaq istəyirəm 799 01:06:47,390 --> 01:06:49,860 və sonra başqa bir almaq və digər almaq və digər almaq. 800 01:06:49,860 --> 01:06:53,330 Biz burada istifadə üçün ola bilər alqoritm hansı fikirdəsiniz? 801 01:06:53,330 --> 01:06:55,470 Ne tür - Loop üçün [Alexander] A? Məhz >>. 802 01:06:55,470 --> 01:06:57,500 Loop bir növü. 803 01:06:57,500 --> 01:07:03,380 Loop üçün bu halda, həqiqətən böyükdür. 804 01:07:03,380 --> 01:07:08,620 Siz bütün fayl ərzində loop istədiyiniz kimi Və deyirdilər kimi, bu səsləri 805 01:07:08,620 --> 01:07:11,820 bir anda bir xarakter əldə. 806 01:07:11,820 --> 01:07:13,850 Kimi baxmaq bilər ki, nə hər hansı təkliflər? 807 01:07:13,850 --> 01:07:22,090 [Aleksandr anlaşılmaz] 808 01:07:22,090 --> 01:07:30,050 >> OK, yalnız Siz çalışdığınız nə İngilis mənə? [Aleksandr anlaşılmaz] 809 01:07:30,050 --> 01:07:36,270 Biz yalnız bütün fayl üzərində loop çalışdığınız kimi bu halda, səslənir. 810 01:07:36,270 --> 01:07:45,330 [Alexander] Belə i > Həcmi - 811 01:07:45,330 --> 01:07:49,290 Mən, faylın ölçüsü tahmin? Ölçüsü - we'll yalnız bu kimi yazın. 812 01:07:49,290 --> 01:07:57,470 Vaxt üçün fayl ölçüsü olan, i + +. 813 01:07:57,470 --> 01:08:04,610 Belə ki, bu fgetc istifadə edərək, və nə şəkildə bu yeni çıxır ki, 814 01:08:04,610 --> 01:08:10,460 yalnız bir fayl ölçüsü üçün asan bir yol var ki, 815 01:08:10,460 --> 01:08:16,979 əvvəl gördüm ki, tikintisi bu "sizeof" tipli ilə. 816 01:08:16,979 --> 01:08:20,910 Biz fgetc funksiyasından istifadə edərkən, biz bir növ təqdim edirik 817 01:08:20,910 --> 01:08:29,069 loop üçün yeni, funky sintaksis, harada yerine bir əsas counter istifadə 818 01:08:29,069 --> 01:08:33,920 xarakteri ilə xarakter getmək üçün, biz, bir-bir xarakter çəkmək olacaq 819 01:08:33,920 --> 01:08:37,120 bir zamanda xarakter, və biz bilirik yolu biz sonunda edirik 820 01:08:37,120 --> 01:08:41,290 biz simvol müəyyən sayda sayılır etdik halda, 821 01:08:41,290 --> 01:08:49,939 lakin biz çıxarmaq karakter fayl xarakterli xüsusi sonu olur. 822 01:08:49,939 --> 01:08:58,689 Mən bu ch zəng və biz başlamaq olacaq - biz bu edə bilərsiniz 823 01:08:58,689 --> 01:09:08,050 fayl həyata ilk xarakter almaq üçün ilk zəngi ilə. 824 01:09:08,050 --> 01:09:14,979 Burada bu hissəsi Belə ki, bu faylın bir xarakter çıxmaq niyyətindədir 825 01:09:14,979 --> 01:09:20,840 və dəyişən ch onu saxlamaq. 826 01:09:20,840 --> 01:09:25,420 Biz fayl sonuna almaq qədər bunu saxlamaq olacaq, 827 01:09:25,420 --> 01:09:41,170 hansı ki, xüsusi EOF xarakter bərabər olmayan xarakter üçün test ilə ediləcək. 828 01:09:41,170 --> 01:09:48,750 Yerinə ch edir və sonra + +, olan yalnız, dəyəri arttırmayı ki, 829 01:09:48,750 --> 01:09:52,710 biz fayl A həyata, A, demək paytaxtı oxumaq, əgər 830 01:09:52,710 --> 01:09:56,810 ch + + Bookmark b verəcək, sonra biz c və sonra d almaq istiyorum. 831 01:09:56,810 --> 01:09:59,310 Yəni biz istədiyiniz nə aydın deyil. Biz burada istədiyiniz 832 01:09:59,310 --> 01:10:05,830 Bu son bit biz faylı növbəti xarakter almaq istəyirik. 833 01:10:05,830 --> 01:10:09,500 >> Belə ki, necə biz faylı növbəti xarakter ala bilər? 834 01:10:09,500 --> 01:10:13,470 Necə fayl ilk xarakter ala bilərəm? 835 01:10:13,470 --> 01:10:17,200 [Tələbə] fgetfile? >> Fgetc, və ya, sorry, siz tamamilə doğru idi. 836 01:10:17,200 --> 01:10:20,470 Mən orada yanlış yazılmış. Bəli belə. 837 01:10:20,470 --> 01:10:26,240 Burada yerinə ch edir + +, 838 01:10:26,240 --> 01:10:29,560 biz yalnız daha fgetc (fayl) zəng olacaq 839 01:10:29,560 --> 01:10:39,180 və eyni ch dəyişən nəticəsində saxlamayın. 840 01:10:39,180 --> 01:10:43,730 [Tələbə sual, anlaşılmaz] 841 01:10:43,730 --> 01:10:52,390 Bu Resim * uşaqlar xüsusi olduğu >> edir. 842 01:10:52,390 --> 01:10:59,070 Onlar iş yolu onlar - ilk açtığınızda - ilk ki fopen zəng zaman, 843 01:10:59,070 --> 01:11:04,260 fayl * səmərəli fayl əvvəlinə bir göstərici kimi xidmət edir. 844 01:11:04,260 --> 01:11:12,830 Və sonra fgetc zəng hər zaman, bu fayl vasitəsilə bir xarakter hərəkət edir. 845 01:11:12,830 --> 01:11:23,280 Bu zəng Belə olduqda, bir xarakteri ilə fayl göstərici incrementing edirik. 846 01:11:23,280 --> 01:11:26,210 Və yenə fgetc zaman, başqa bir xarakter hərəkət edirik 847 01:11:26,210 --> 01:11:28,910 və başqa xarakter və başqa xarakter və başqa xarakter. 848 01:11:28,910 --> 01:11:32,030 [Tələbə sual, anlaşılmaz] >> Və that's - Bəli. 849 01:11:32,030 --> 01:11:34,810 Bu başlıq altında bu sehrli növü var. 850 01:11:34,810 --> 01:11:37,930 Siz yalnız vasitəsilə incrementing saxlamaq. 851 01:11:37,930 --> 01:11:46,510 Bu nöqtədə, həqiqətən bir xarakter ilə işləmək istəyirik. 852 01:11:46,510 --> 01:11:52,150 Belə ki, necə biz indi, ekran bu çap bilər? 853 01:11:52,150 --> 01:11:58,340 Biz əvvəl istifadə etdiyiniz printf şey istifadə edə bilərsiniz. 854 01:11:58,340 --> 01:12:00,330 Biz bütün semestr istifadə etdiyiniz. 855 01:12:00,330 --> 01:12:05,450 Biz printf zəng edə bilərsiniz 856 01:12:05,450 --> 01:12:21,300 və biz yalnız belə xarakter keçə bilər. 857 01:12:21,300 --> 01:12:27,430 Bunu başqa bir yolu deyil, printf istifadə və bu format string nə olan çox 858 01:12:27,430 --> 01:12:29,490 biz də digər funksiyaları biri istifadə edə bilərsiniz. 859 01:12:29,490 --> 01:12:40,090 Biz ekran bir karakter yazdıran hansı fputc istifadə edə bilərsiniz 860 01:12:40,090 --> 01:12:52,580 biz fputc baxsaq axşamı - Mənə bir az kiçiltmək bildirin. 861 01:12:52,580 --> 01:12:56,430 Biz nə gözəl ki, biz fgetc istifadə edərək, oxumaq ki, xarakter alır görmək 862 01:12:56,430 --> 01:13:05,100 lakin sonra onu çap axın vermək lazımdır. 863 01:13:05,100 --> 01:13:11,850 Biz həmçinin standart həyata birbaşa qoymaq olan putchar funksiyası istifadə edə bilərsiniz. 864 01:13:11,850 --> 01:13:16,070 Belə ki, çap üçün istifadə edə bilərsiniz ki, müxtəlif variantları bütün dəstə var. 865 01:13:16,070 --> 01:13:19,580 Onlar standart I / O kitabxana, bütün edirik. 866 01:13:19,580 --> 01:13:25,150 Yazdırmak, istədiyiniz zaman - belə printf, ismarıcları, sel həyata xüsusi standart çap edəcək 867 01:13:25,150 --> 01:13:27,910 ki stdout olan. 868 01:13:27,910 --> 01:13:41,300 Belə ki, biz yalnız bu sehrli dəyəri, burada stdout növü kimi müraciət edə bilərsiniz. 869 01:13:41,300 --> 01:13:48,410 Üzr istəyirik. Kənarda nöqtəli vergül qoyun. 870 01:13:48,410 --> 01:13:52,790 >> Burada yeni, funky bir çox informasiya var. 871 01:13:52,790 --> 01:13:58,600 Bu bir çox bu kodu mənada ki, çox idiomatik edir 872 01:13:58,600 --> 01:14:05,700 ki, oxumaq üçün asan oxumaq təmiz yalnız çünki bu şəkildə yazılmışdır. 873 01:14:05,700 --> 01:14:11,520 Bunu çox fərqli yollarla istifadə edə bilərsiniz bir çox müxtəlif funksiyaları var 874 01:14:11,520 --> 01:14:14,680 lakin biz yalnız üzərində həmin nümunələri riayət edirlər. 875 01:14:14,680 --> 01:14:20,180 Daha və yenidən gələn bu kimi kodu görmək Belə ki təəccüb etməyin. 876 01:14:20,180 --> 01:14:25,690 Bütün hüquqlar. Bu nöqtədə, biz gün qırmaq lazımdır. 877 01:14:25,690 --> 01:14:31,300 Gəldiyiniz üçün təşəkkür edirik. Siz online olduğunuzda, əgər izləmək üçün təşəkkür edirik. Biz gələn həftə siz görəcəksiniz. 878 01:14:31,300 --> 01:14:33,890 [CS50.TV]