1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [Музички] 3 00:00:11,210 --> 00:00:12,100 >> Роб BODEN: Во ред. 4 00:00:12,100 --> 00:00:15,620 Значи, прво нешто што прво, на видео од познато лице. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [Видео репродукција] 7 00:00:22,560 --> 00:00:23,370 >> -Во ред. 8 00:00:23,370 --> 00:00:27,150 Ова е CS50, а тоа е почетокот на три недела. 9 00:00:27,150 --> 00:00:29,980 Жал ми е што не може да биде таму со вас денес, но дозволете ми да се воведе 10 00:00:29,980 --> 00:00:32,880 Сопствени Роб CS50 е Боден. 11 00:00:32,880 --> 00:00:33,872 >> [Крај видео репродукција] 12 00:00:33,872 --> 00:00:39,340 >> [Аплауз и овации] 13 00:00:39,340 --> 00:00:41,277 >> Роб BODEN: На филмографија во дека видеото е фантастично. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Во ред е. 16 00:00:47,770 --> 00:00:50,960 Значи прво, има уште еден ручек. 17 00:00:50,960 --> 00:00:52,330 Тоа е утре во 01:15. 18 00:00:52,330 --> 00:00:54,480 Нема ручек овој петок. 19 00:00:54,480 --> 00:00:55,810 Тоа е со Quora. 20 00:00:55,810 --> 00:01:00,190 И Томи се уште не е тука, но еден од на луѓето таму е поранешниот CF главата, 21 00:01:00,190 --> 00:01:01,530 Томи McWilliam. 22 00:01:01,530 --> 00:01:02,730 Па тој е забавно дечко. 23 00:01:02,730 --> 00:01:04,819 Треба да дојде. 24 00:01:04,819 --> 00:01:05,900 >> Во ред е. 25 00:01:05,900 --> 00:01:11,360 Па минатата недела, почнавме да се распадне за тоа што низа навистина е. 26 00:01:11,360 --> 00:01:14,830 Ние сме познати од почетокот дека тоа е низа од карактери. 27 00:01:14,830 --> 00:01:18,130 Но, минатата недела, ние delved во фактот дека она што е навистина низа од 28 00:01:18,130 --> 00:01:22,110 карактери, добро, ние сега имаме низи од карактери. 29 00:01:22,110 --> 00:01:26,450 И знаеме дека низа, тоа е низа на ликовите, на самиот крај, 30 00:01:26,450 --> 00:01:30,920 имаме оваа специјална null бајт, овој обратна коса црта 0, тоа го означува крајот на 31 00:01:30,920 --> 00:01:32,230 стрингот. 32 00:01:32,230 --> 00:01:36,970 >> И така низа е низа од ликови, но можеме да имаме повеќе од 33 00:01:36,970 --> 00:01:39,530 само низа од карактери, можеме да имаме низа од ниту 34 00:01:39,530 --> 00:01:40,890 тип на работа што го сакаме. 35 00:01:40,890 --> 00:01:51,570 Значи, ако се сеќавате од минатата недела, Возраст програма која Дејвид воведе 36 00:01:51,570 --> 00:01:53,560 навистина брзо. 37 00:01:53,560 --> 00:01:57,010 Па првото нешто ние ќе треба да направите е да побара од корисникот за цел број, 38 00:01:57,010 --> 00:01:58,800 број на луѓе во собата. 39 00:01:58,800 --> 00:02:01,260 Откако ќе го имаат тоа цел број, ние сме прогласување низа. 40 00:02:01,260 --> 00:02:02,890 Забележите оваа заградата синтакса. 41 00:02:02,890 --> 00:02:04,540 Сте ќе треба да се навикнеш на тоа. 42 00:02:04,540 --> 00:02:09,430 >> Па ние сме прогласување на низа од цели броеви наречен возрасти, и постојат n 43 00:02:09,430 --> 00:02:12,080 броеви во оваа низа. 44 00:02:12,080 --> 00:02:16,480 Значи овој модел токму тука, ова 4 int i изнесува 0, i е помал од n, јас плус 45 00:02:16,480 --> 00:02:20,580 плус, кој е, исто така, ќе биде шемата дека ќе добиете многу навикнати. 46 00:02:20,580 --> 00:02:24,000 Затоа што тоа е доста како сте секогаш ќе iterate преку низи. 47 00:02:24,000 --> 00:02:26,330 Па се сеќавам дека n е должината на нашите низа. 48 00:02:26,330 --> 00:02:32,120 И така тука, ние сме постојано бара за возраста на лицето јас во собата. 49 00:02:32,120 --> 00:02:36,640 >> По ова, ние одиме надолу, и за она што произволни причина, тогаш ние 50 00:02:36,640 --> 00:02:40,220 печатење колку години тие ќе да биде една година од сега. 51 00:02:40,220 --> 00:02:49,980 И работи таа програма, ајде да направи возрасти, точка црта возрасти. 52 00:02:49,980 --> 00:02:53,010 Па бројот на луѓе во собата, да речеме постојат три. 53 00:02:53,010 --> 00:02:59,880 И да каже, првиот човек е 13, Следниот е 26, а последниот е 30. 54 00:02:59,880 --> 00:03:05,080 Па тогаш тоа ќе iterate преку овие три луѓе, печати од 14, 27, и 31. 55 00:03:05,080 --> 00:03:16,060 >> Па се сеќавам дека кога ќе се изјаснат за спектар на големина n, индексите во таа 56 00:03:16,060 --> 00:03:19,950 низа, низа има вредности и индексите 0, 1, 2, сите начин 57 00:03:19,950 --> 00:03:21,680 до n минус 1. 58 00:03:21,680 --> 00:03:26,255 Па кога ќе рече дека има три лица во соба, и ќе стави тука 59 00:03:26,255 --> 00:03:29,850 првиот повторување преку овој јамка, јас ќе биде 0. 60 00:03:29,850 --> 00:03:31,650 Па во индекс 0. 61 00:03:31,650 --> 00:03:34,540 Ние сме давање на прва возраст на корисникот влегува во собата. 62 00:03:34,540 --> 00:03:38,870 Потоа, во следните една, ние сме влегуваат во Вториот N корисникот ќе влезе, и во 63 00:03:38,870 --> 00:03:40,580 до две, последните n. 64 00:03:40,580 --> 00:03:44,200 >> Така забележите дека низа од големината три нема ништо 65 00:03:44,200 --> 00:03:46,040 во индексот три. 66 00:03:46,040 --> 00:03:49,036 Ова не е валиден. 67 00:03:49,036 --> 00:03:50,250 Во ред е. 68 00:03:50,250 --> 00:03:55,136 Значи, ќе се вратам овде. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Па сега дека ние сме се занимаваа со низи, имаме некои блискост. 71 00:04:01,590 --> 00:04:03,780 Сега ние ќе треба да се движи кон команда линија аргументи, кои ќе бидат 72 00:04:03,780 --> 00:04:05,890 прилично релевантни за овој проблем во собата. 73 00:04:05,890 --> 00:04:09,670 >> Па до сега, секогаш кога сте прогласена вашиот главен функција, ние сме 74 00:04:09,670 --> 00:04:11,230 рече int главната неважечки. 75 00:04:11,230 --> 00:04:14,070 Па празнина само значи дека ние не сме ги донесе 76 00:04:14,070 --> 00:04:16,440 аргументи на оваа функција. 77 00:04:16,440 --> 00:04:19,190 Сега ние ќе се види дека главната може да потрае неколку аргументи. 78 00:04:19,190 --> 00:04:22,470 Еве ние ги нарекуваме int argc и гудачки argv голема заграда. 79 00:04:22,470 --> 00:04:26,930 Во загради, уште еднаш, што укажува на дека ние сме се занимаваат со низи. 80 00:04:26,930 --> 00:04:31,850 Значи тука, стринг argv загради, ние сме се занимаваат со низа на стрингови. 81 00:04:31,850 --> 00:04:35,360 Па argc, што се случува за да се покаже колку аргументи ние сме 82 00:04:35,360 --> 00:04:37,580 предадена на оваа програма. 83 00:04:37,580 --> 00:04:46,050 И да видиме што тоа значи, ајде да се затвори ова. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Па до сега, ние сме се кандидира секој програма како точка црта возрасти. 86 00:04:50,790 --> 00:04:55,250 Ние исто така може, на командната линија, минатото помине аргументи, на тој начин терминот, команда 87 00:04:55,250 --> 00:04:56,550 линија аргументи. 88 00:04:56,550 --> 00:04:59,760 Така, првиот аргумент, Здраво светот. 89 00:04:59,760 --> 00:05:03,350 Па еве, argc ќе биде три. 90 00:05:03,350 --> 00:05:07,720 Тоа е пребројувањето на аргументи на командната линија. 91 00:05:07,720 --> 00:05:12,840 Argc е секогаш најмалку 1, бидејќи точка сека возрасти, сама по себе, се брои како една од 92 00:05:12,840 --> 00:05:14,490 на командната линија аргументи. 93 00:05:14,490 --> 00:05:17,010 >> Тогаш здраво е прв. 94 00:05:17,010 --> 00:05:20,460 Ако точка црта возрасти е 0., тогаш здраво е прв, и светот е 95 00:05:20,460 --> 00:05:22,830 Вториот по командата. 96 00:05:22,830 --> 00:05:29,490 Па низа argv, ние ќе треба да се види, содржи стрингови, точка црта 97 00:05:29,490 --> 00:05:33,830 возраст, здраво, и светот. 98 00:05:33,830 --> 00:05:38,945 И, по барање на Давид, ние ќе да игра видео воведување тоа. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [Видео репродукција] 101 00:05:43,890 --> 00:05:46,240 >> -До сега во програмите ние сме напишани, ние се изјасни 102 00:05:46,240 --> 00:05:48,500 Главната како int главната неважечки. 103 00:05:48,500 --> 00:05:51,170 И сето ова време, таа празнина има едноставно се определи, 104 00:05:51,170 --> 00:05:54,430 програмата не презема командната линија аргументи. 105 00:05:54,430 --> 00:05:57,750 Со други зборови, кога корисникот води програма, тој или таа може да обезбеди команда 106 00:05:57,750 --> 00:06:01,710 линија аргументи со пишување дополнителни зборови или фрази, откако на програмата 107 00:06:01,710 --> 00:06:03,000 именува во конзолата. 108 00:06:03,000 --> 00:06:06,550 >> Па, ако не сакате вашата програма да се аргументите од командната линија, една или 109 00:06:06,550 --> 00:06:10,540 повеќе такви зборови, ние треба да го замени поништат со неколку аргументи. 110 00:06:10,540 --> 00:06:12,200 Па ајде направите тоа. 111 00:06:12,200 --> 00:06:15,750 Вклучуваат CS50.h. 112 00:06:15,750 --> 00:06:19,360 Вклучуваат стандардни io.h. 113 00:06:19,360 --> 00:06:20,760 Int главната. 114 00:06:20,760 --> 00:06:26,330 И сега, наместо на празнината, јас ќе одам да наведете int наречен argc, и 115 00:06:26,330 --> 00:06:28,780 низа на стрингови наречен argv. 116 00:06:28,780 --> 00:06:31,820 Сега, argc и argv се едноставно конвенции. 117 00:06:31,820 --> 00:06:34,000 >> Би можеле да се нарече овие аргументи повеќето нешто што сакаме. 118 00:06:34,000 --> 00:06:37,630 Но, она што е важно е дека argc е на int затоа што, по дефиниција, тоа е 119 00:06:37,630 --> 00:06:41,360 ќе содржи аргумент брои, број на зборови во вкупните дека 120 00:06:41,360 --> 00:06:43,380 корисник го има отчукува во неговата или нејзината линија. 121 00:06:43,380 --> 00:06:47,910 argv, пак, аргументот за векторот, е ќе всушност се низа складирање 122 00:06:47,910 --> 00:06:52,020 сите зборови дека корисникот има внесе во неговата или нејзината линија. 123 00:06:52,020 --> 00:06:54,500 >> Ајде да се продолжи да се направи нешто сега со една или повеќе од овие 124 00:06:54,500 --> 00:06:55,660 командната линија аргументи. 125 00:06:55,660 --> 00:07:00,070 Особено, да одиме напред и печати она што зборот на корисникот видови 126 00:07:00,070 --> 00:07:03,960 по името на програмата во конзолата. 127 00:07:03,960 --> 00:07:04,730 Отворена заграда. 128 00:07:04,730 --> 00:07:06,240 Блиску заграда. 129 00:07:06,240 --> 00:07:10,510 Printf проценти на обратна коса црта и запирка. 130 00:07:10,510 --> 00:07:14,550 И сега јас треба да кажам printf она што вредност да го приклучиш во кои случаеви. 131 00:07:14,550 --> 00:07:18,600 Сакам првиот збор што корисникот има внесе по името на програмата, 132 00:07:18,600 --> 00:07:23,130 и така јас ќе одам да се определи argv заградата 1, во близина 133 00:07:23,130 --> 00:07:24,830 заграда, точка-запирка. 134 00:07:24,830 --> 00:07:27,290 >> Сега, зошто заградата 1 и не заградата 0? 135 00:07:27,290 --> 00:07:30,990 Па, што се испоставува, автоматски се чуваат во argv 0 се случува да биде 136 00:07:30,990 --> 00:07:32,620 вистински име програмата. 137 00:07:32,620 --> 00:07:36,180 Така, првиот збор што корисникот видови по името на програмата е, 138 00:07:36,180 --> 00:07:38,990 конвенција, ќе биде се чуваат во argv 1. 139 00:07:38,990 --> 00:07:42,380 Ајде сега се компајлира и ја извршите оваа програма. 140 00:07:42,380 --> 00:07:47,780 >> Направи argv 0, точка црта argv 0. 141 00:07:47,780 --> 00:07:50,520 И сега зборот како здраво. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 И ние го имаме, здраво. 144 00:07:53,520 --> 00:07:55,750 >> [Крај видео репродукција] 145 00:07:55,750 --> 00:07:57,000 >> Роб BODEN: Во ред. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Затвори тоа. 148 00:08:01,230 --> 00:08:16,730 Па Гледано во таа програма што ние само воведен за нас, добро, само 149 00:08:16,730 --> 00:08:24,710 да се покаже, ако ние печати argv 0, да, сега што е тоа, argv 0, точка црта argv 0. 150 00:08:24,710 --> 00:08:30,440 Значи, како што се очекуваше, тоа е печатење на името на програмата, бидејќи argv 0 е 151 00:08:30,440 --> 00:08:32,970 секогаш ќе биде името на програмата. 152 00:08:32,970 --> 00:08:35,640 Но, ајде да се направи нешто малку поинтересна. 153 00:08:35,640 --> 00:08:42,080 >> Па во проблемот сет, ќе биде воведен на оваа функција, atoi. 154 00:08:42,080 --> 00:08:44,440 Значи она што ние ги користиме atoi за? 155 00:08:44,440 --> 00:08:48,550 Што се случува да го конвертирате низа на цел број. 156 00:08:48,550 --> 00:08:53,280 Значи, ако јас го положат низа, еден два три, да atoi, дека ќе ја конвертираме таа 157 00:08:53,280 --> 00:08:56,910 на број, еден два три. 158 00:08:56,910 --> 00:09:01,480 Па ние ќе да се конвертира прв командата на цел број, 159 00:09:01,480 --> 00:09:05,690 а потоа само печати дека цел број. 160 00:09:05,690 --> 00:09:09,680 >> Значи, во основа, ние сме вид на reimplementing getint, само 161 00:09:09,680 --> 00:09:12,350 цел број е внесен во командната линија наместо во програмата 162 00:09:12,350 --> 00:09:14,560 интерактивно. 163 00:09:14,560 --> 00:09:23,170 Па тогаш, што argv 0, ајде да направиме тоа овде, и затворете тоа. 164 00:09:23,170 --> 00:09:27,670 Па трчање argv 0, и ајде да влезат во цел број, еден два три четири една две. 165 00:09:27,670 --> 00:09:30,840 Па тоа ќе печати број, еден два три четири една две. 166 00:09:30,840 --> 00:09:35,500 Постојат некои суптилностите да atoi дека тоа ќе престане да се грижат за ништо 167 00:09:35,500 --> 00:09:39,040 надвор валидна нумерички карактер, но тоа не е важно. 168 00:09:39,040 --> 00:09:42,870 >> Па што мислите што се случува ако го направам ова? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Сегментација вина. 171 00:09:47,050 --> 00:09:50,410 Значи, зошто е тоа? 172 00:09:50,410 --> 00:09:56,060 Ако се погледне назад во нашата програма, ние сме конвертирање argv 1, првиот аргумент 173 00:09:56,060 --> 00:09:59,610 по името на програмата, да биде цел број. 174 00:09:59,610 --> 00:10:03,350 Но, не постои аргумент проследен по името на програмата. 175 00:10:03,350 --> 00:10:08,060 Па еве, ние се види дека ова е грешка програма, бидејќи, ако ние се обидуваме да го стартувате 176 00:10:08,060 --> 00:10:10,530 без никакви аргументи, тоа само ќе несреќата. 177 00:10:10,530 --> 00:10:16,950 >> Значи уште една заедничка шема ќе видите е нешто како, ако argc е помалку 178 00:10:16,950 --> 00:10:21,100 од две, што покажува дека немало најмалку името на програмата и 179 00:10:21,100 --> 00:10:29,100 Првиот аргумент, тогаш ние ќе се направи нешто како printf, не е доволно 180 00:10:29,100 --> 00:10:31,190 командната линија аргументи. 181 00:10:31,190 --> 00:10:33,170 Тоа е најверојатно не е добра да се печати, тоа е веројатно нешто, како 182 00:10:33,170 --> 00:10:35,440 треба да внесете цел број на командната линија. 183 00:10:35,440 --> 00:10:37,450 Јас само ќе го заврши тука. 184 00:10:37,450 --> 00:10:39,600 А потоа се врати 1. 185 00:10:39,600 --> 00:10:44,740 Па се сеќавам дека на крајот на нашата програма, ако се вратиме 0, тој вид на 186 00:10:44,740 --> 00:10:47,060 покажува успех. 187 00:10:47,060 --> 00:10:50,940 И главните исто така автоматски се враќа 0 ако не се направи. 188 00:10:50,940 --> 00:10:55,800 >> Па еве, ние сме retuning 1 за да се покаже дека тоа не е успех. 189 00:10:55,800 --> 00:11:01,000 И може да се врати она што го сакате, само, 0 означува успех, и 190 00:11:01,000 --> 00:11:03,390 ништо друго укажува неуспех. 191 00:11:03,390 --> 00:11:04,855 Па ајде да ја извршите оваа верзија на нештата. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Па сега, ако ние не влезе во командната линија аргумент, тоа правилно ќе ти каже 194 00:11:16,600 --> 00:11:18,290 нас, не е доволно командната линија. 195 00:11:18,290 --> 00:11:20,610 Не заврши реченицата. 196 00:11:20,610 --> 00:11:24,950 Друго, ако ние всушност го положи еден, тоа може да заврши програмата. 197 00:11:24,950 --> 00:11:27,920 Значи ова е како ќе се користи argc во цел да се провери бројот на 198 00:11:27,920 --> 00:11:30,630 командната линија аргументи кои се всушност помина. 199 00:11:30,630 --> 00:11:39,360 >> Па ајде направи оваа програма е малку повеќе комплицирано, и се погледне на вториот 200 00:11:39,360 --> 00:11:42,180 повторување на нештата. 201 00:11:42,180 --> 00:11:46,310 Па сега, ние не само за печатење на Првиот командата. 202 00:11:46,310 --> 00:11:51,210 Тука, ние сме процесирањето од int i изнесува 0, i е помала argc, јас плус 203 00:11:51,210 --> 00:11:55,280 плус, и печатење argv, индексот i. 204 00:11:55,280 --> 00:11:59,300 Значи овој модел, повторно, ова е иста модел како и досега, освен наместо 205 00:11:59,300 --> 00:12:02,600 на повикување на променливата n, ние сме со користење argc. 206 00:12:02,600 --> 00:12:09,520 >> Значи ова е процесирањето над секоја индекс во низа, и печатење на секоја 207 00:12:09,520 --> 00:12:11,910 елемент во таа низа. 208 00:12:11,910 --> 00:12:20,300 И така, кога ќе ја извршите оваа програма, добро, Јас не влезат во кои било командната линија 209 00:12:20,300 --> 00:12:22,540 аргументи, па тоа само отпечатоци името на програмата. 210 00:12:22,540 --> 00:12:26,053 Ако јас внесете еден куп работи, тоа ќе печати една, секој на свој линија. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Па ајде да ја искористам оваа еден чекор понатаму. 214 00:12:34,770 --> 00:12:38,890 И наместо печатење секој аргумент на сопствената линија, ајде да се печати секоја 215 00:12:38,890 --> 00:12:42,590 карактер на секој аргумент по сопствена линија. 216 00:12:42,590 --> 00:12:46,700 Па се сеќавам дека argv е низа на стрингови. 217 00:12:46,700 --> 00:12:50,960 Значи она што е стринг, но низа на карактери? 218 00:12:50,960 --> 00:12:57,140 Па тоа значи дека argv е навистина низа од низа на карактери. 219 00:12:57,140 --> 00:13:04,920 Па земајќи предност на тоа, ајде да се игнорира овој за сега. 220 00:13:04,920 --> 00:13:08,190 Ајде да се разгледа на низа argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Значи, ако сакаме да се донесе секој карактер на argv 0 по сопствена линија, тогаш сакам 222 00:13:14,170 --> 00:13:19,500 да го стори модел ние сме навикнати, i е помала од должината на низата, 223 00:13:19,500 --> 00:13:23,990 кои тука се strlen на, тоа е не она што сакате да го направите, стринг 224 00:13:23,990 --> 00:13:26,450 Кликнете ОК еднаква argv 0. 225 00:13:26,450 --> 00:13:30,390 Па јас е помал од должината на нашите низа, која во овој случај е низа 226 00:13:30,390 --> 00:13:34,410 на карактери, јас плус плус. 227 00:13:34,410 --> 00:13:41,040 И така, како што видовме минатата недела, тој е идеален ако се движиме дека strlen надвор 228 00:13:41,040 --> 00:13:45,210 на состојбата, бидејќи n ќе биде додавањето на strlen на коментарите дека секој пат кога одам 229 00:13:45,210 --> 00:13:47,720 низ јамката, а тоа е нема да се менува. 230 00:13:47,720 --> 00:13:50,230 Па ние ќе го еднаква на n овде во собата. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Па сега, ние сме процесирањето над секој индекс во низа. 234 00:14:01,320 --> 00:14:05,630 И така, ако сакаме да се печати секоја карактер во таа низа, проценти c е 235 00:14:05,630 --> 00:14:06,880 знамето сакаме да се користи за карактери. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 И сега заградата јас се случува да биде низа, индексот карактер i, па ако 238 00:14:19,770 --> 00:14:20,970 низа беа здраво. 239 00:14:20,970 --> 00:14:27,530 тогаш е 0 ќе биде h, s држач 1 ќе биде Е, и така натаму. 240 00:14:27,530 --> 00:14:30,800 >> Па сега ние сакаме да се комбинираат овие две работи. 241 00:14:30,800 --> 00:14:35,440 Ние сакаме да се печати секој карактер на секоја командна линија аргумент. 242 00:14:35,440 --> 00:14:38,950 Па ние ќе мора вгнезден за телефонска линија. 243 00:14:38,950 --> 00:14:47,480 И конвенционално, првиот контра е јас, следниот ќе биде ѕ, n 244 00:14:47,480 --> 00:14:54,450 ќе биде strlen на argv јас, јас е помал од n, јас плус плус. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 И сега наместо печатење argv јас, па argv заградата јас се случува да индекс - 247 00:15:06,870 --> 00:15:14,280 дека ќе биде на i-тиот командната линија аргумент, argv i, j ќе 248 00:15:14,280 --> 00:15:16,925 биде jth карактер на аргументот i-тата. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Јас ќе се ослободи од овој тука сега бидејќи ние го стави во таа јамка. 251 00:15:24,810 --> 00:15:33,900 Така е еквивалентно на низа на еднаквите argv i, а потоа на заградата ѕ. 252 00:15:33,900 --> 00:15:36,980 >> Па, ние не треба да се изјасни оваа променлива е. 253 00:15:36,980 --> 00:15:44,530 Наместо тоа, ние само ќе се комбинираат овие две во она што го имавме, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> ЗВУЧНИК 1: [нечујни]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> Роб BODEN: Добар повик. 257 00:15:49,680 --> 00:15:52,936 Значи ова е скршен. 258 00:15:52,936 --> 00:15:55,510 Ако јас всушност го имаше, ние би се реализира ова. 259 00:15:55,510 --> 00:16:01,210 Па контра Јас се грижат за во овој особено за 260 00:16:01,210 --> 00:16:05,410 јамка е ј, на iterator. 261 00:16:05,410 --> 00:16:08,560 Па ќе се кандидира во проблеми, веројатно бескрајна јамка, ако ние 262 00:16:08,560 --> 00:16:09,540 доколку не фиксна тоа. 263 00:16:09,540 --> 00:16:12,220 Тоа е причината зошто ние сме, исто така, зборува денес за дебагирање. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Па ајде да ја извршите оваа програма. 266 00:16:15,240 --> 00:16:21,200 И ајде да всушност додадете посебен printf токму тука дека само ќе печати 267 00:16:21,200 --> 00:16:27,480 друга линија, бидејќи тоа значи кога ќе стартувате програмата, ќе има празно 268 00:16:27,480 --> 00:16:31,830 линија помеѓу секој карактер на секој командата. 269 00:16:31,830 --> 00:16:33,448 Па, ќе видиме што значи тоа. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 OOP. 272 00:16:37,790 --> 00:16:39,870 Добив некои бубачки. 273 00:16:39,870 --> 00:16:42,860 Грешка имплицитно наведува библиотека функција strlen. 274 00:16:42,860 --> 00:16:51,630 >> Па ќе се вратам во нашата програма, јас заборавив да хаш вклучуваат string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Па string.h се случува да биде хедер датотека, кој се декларира 277 00:16:57,730 --> 00:16:58,980 функцијата strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 Добро, го компајлира. 280 00:17:06,060 --> 00:17:09,109 Сега, ајде да го работи. 281 00:17:09,109 --> 00:17:10,930 Па токму тоа. 282 00:17:10,930 --> 00:17:17,790 Тоа се случува да се печати нашите име на програмата, Здраво светот. 283 00:17:17,790 --> 00:17:23,510 Тоа се случува да се печати секоја работа, секој карактер, на посебна линија. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Па ајде всушност ја искористам оваа еден чекор понатаму. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 И наместо користење string.h, ајде да размислуваат за тоа како ние би се имплементираат нашите сопствени 288 00:17:39,700 --> 00:17:41,420 strlen функција. 289 00:17:41,420 --> 00:17:45,600 Па јас веднаш ќе даде функција потпис. 290 00:17:45,600 --> 00:17:52,900 Па ајде јавете се во my_strlen, а тоа е случува да се земе низа како аргумент, 291 00:17:52,900 --> 00:17:57,220 и ние очекуваме да се врати должината на стрингот. 292 00:17:57,220 --> 00:18:03,430 Значи, каде е тој тип? 293 00:18:03,430 --> 00:18:04,990 Да. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Значи се сеќавам од претходниот слајд дека беше, исто така, од минатата недела, дека 296 00:18:12,900 --> 00:18:18,890 низа од карактери, добро, стринг, па да речеме ова е нашата низа s. 297 00:18:18,890 --> 00:18:29,870 Значи, ако на е стринг, здраво, а потоа, H-Е-Л-Л-О, во меморијата, кој се случува да 298 00:18:29,870 --> 00:18:35,610 биде, а потоа тоа обратна коса црта 0 лик. 299 00:18:35,610 --> 00:18:39,170 >> Па како можеме да станеме должината на ОК? 300 00:18:39,170 --> 00:18:43,190 Па, трикот е во потрага по овој реакции 0 лик, ова null 301 00:18:43,190 --> 00:18:44,380 терминатор. 302 00:18:44,380 --> 00:18:50,270 Па на алгоритмот се случува да биде нешто како неколку 303 00:18:50,270 --> 00:18:51,510 доволно карактери тоа - 304 00:18:51,510 --> 00:18:56,180 ајде да ја имаат оваа страна претставуваат некој шанкот, да ја наречеме оваа int должина. 305 00:18:56,180 --> 00:19:00,060 Значи, почнувајќи од овде, ние сме ќе iterate преку нашиот стринг. 306 00:19:00,060 --> 00:19:04,100 >> Така, првиот карактер, тоа е H, и тоа не е се врати намали на 0, така 307 00:19:04,100 --> 00:19:05,170 должината е 1. 308 00:19:05,170 --> 00:19:08,050 Iterate на следниот знак, Е, и тоа не е обратна коса црта 0. 309 00:19:08,050 --> 00:19:09,630 Должина е 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 О, 5. 313 00:19:13,050 --> 00:19:16,690 И, конечно, ќе ја достигнеме обратна коса црта 0, и така што средства, и, 314 00:19:16,690 --> 00:19:17,780 овој стринг е завршена. 315 00:19:17,780 --> 00:19:20,130 Па ајде врати 5. 316 00:19:20,130 --> 00:19:33,630 >> Така всушност спроведување дека, прво, мојата n должина е еднаква на 0, мојата десна рака. 317 00:19:33,630 --> 00:19:36,088 И ние ќе iterate - 318 00:19:36,088 --> 00:19:38,000 >> ЗВУЧНИК 1: [нечујни] 319 00:19:38,000 --> 00:19:38,640 >> Роб BODEN: О, пука. 320 00:19:38,640 --> 00:19:39,870 Добар повик. 321 00:19:39,870 --> 00:19:42,680 Бум. 322 00:19:42,680 --> 00:19:44,140 Па n должина е еднаква на 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Па сега, должина, додека S не еднакви и тогаш, обратна коса црта 0. 325 00:19:58,310 --> 00:20:04,660 Значи се сеќавам, ова обратна коса црта 0, тоа е вистински карактер, и тоа покажува 326 00:20:04,660 --> 00:20:05,820 на крајот на низа. 327 00:20:05,820 --> 00:20:09,850 Исто како и, исто така, обратна коса црта n е вистински карактер. 328 00:20:09,850 --> 00:20:14,040 Обратна коса црта 0 се случува да се покаже на крајот од нашиот стринг. 329 00:20:14,040 --> 00:20:15,414 Не сакам да се стави дека постои. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 И додека на индексирани од должина не е еднаква на нула терминатор, а потоа 332 00:20:25,620 --> 00:20:27,130 ние сме само ќе за зголемување должина. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Па тогаш, на крајот на нашата програма, должина на крајот ќе 335 00:20:34,880 --> 00:20:37,610 биде 5 во овој случај. 336 00:20:37,610 --> 00:20:39,210 А ние само ќе се вратат должина. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Па сега овде, јас не направи my_strlen. 340 00:20:48,290 --> 00:20:50,700 Ајде да се собере за да бидете сигурни сè тече непречено. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Беше правам во 2? 343 00:20:58,210 --> 00:21:00,565 Или беше тоа 1? 344 00:21:00,565 --> 00:21:01,940 Што треба да се направи. 345 00:21:01,940 --> 00:21:02,690 Во ред е. 346 00:21:02,690 --> 00:21:08,490 Значи ова е argv 2. 347 00:21:08,490 --> 00:21:11,585 Работи како што се очекуваше, иако беше дека оној што тоа го правеше во? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Да. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Оваа верзија на нештата не треба на printf нова линија по него, но тоа 352 00:21:21,820 --> 00:21:22,910 не прават разлика. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Така работеше како што се очекува. 355 00:21:25,780 --> 00:21:34,750 >> Сега ние дури и може да се комбинираат овој уште еден чекор понатаму, каде најава тука, добро, 356 00:21:34,750 --> 00:21:38,920 Прво, ние сме грабање на strlen на argv Јас, а потоа ние сме процесирањето над 357 00:21:38,920 --> 00:21:41,450 секој лик во таа низа. 358 00:21:41,450 --> 00:21:47,480 Па наместо тоа да го направам, што ако ние само се комбинираат оваа логика на чекање 359 00:21:47,480 --> 00:21:50,740 додека ние хит обратна коса црта 0 право во тоа за јамка? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Па iterate додека argv i, j не не се еднакви обратна коса црта 0. 362 00:22:07,490 --> 00:22:10,680 Па ајде да се кандидира во прв план. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Во ред е. 365 00:22:21,180 --> 00:22:27,655 Па еве, оваа состојба е велејќи - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 ајде да се расчисти тоа. 368 00:22:40,060 --> 00:22:49,140 Па сега, нека ова биде наш argv. 369 00:22:49,140 --> 00:22:55,290 Значи, кога јас само се стрча таа програма пред, argv е низа од стрингови. 370 00:22:55,290 --> 00:23:03,100 И така, ако јас го стартувате со точка црта argv 2, Здраво светот, тогаш argv 371 00:23:03,100 --> 00:23:07,650 сам по себе е должина 3, за argv нула, здраво, и светот. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> И во внатрешноста на секоја од овие индексите е, себе низа, каде што ова ќе биде 374 00:23:19,660 --> 00:23:23,780 точка, ова ќе биде коса црта, не знам ако тоа беше вистинската насока, јас 375 00:23:23,780 --> 00:23:25,680 не мислам дека тоа беше. 376 00:23:25,680 --> 00:23:30,110 А-Р-V цртичка, треба повеќе простор. 377 00:23:30,110 --> 00:23:32,570 Ајде да се намали во оваа низа. 378 00:23:32,570 --> 00:23:38,230 A-R-V израмнување 0, а потоа обратна коса црта 0. 379 00:23:38,230 --> 00:23:43,160 А потоа во неред ќе биде здраво. 380 00:23:43,160 --> 00:23:45,910 Да речеме, H-Е обратна коса црта 0. 381 00:23:45,910 --> 00:23:51,130 И, конечно, W-О обратна коса црта 0. 382 00:23:51,130 --> 00:23:59,730 >> Па на алгоритмот дека ние само напишав, на вгнездени јамки, што тие се 383 00:23:59,730 --> 00:24:07,321 прави е, ние прво треба на се спротивстави на i и j тогаш. 384 00:24:07,321 --> 00:24:15,206 Ова ќе биде полесно со кодот на екран, Да се ​​вратиме на ова. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Така забележите дека јас е на iterator тоа е процесирањето над секоја команда 387 00:24:24,600 --> 00:24:25,610 линија аргумент. 388 00:24:25,610 --> 00:24:28,870 И ѕ е iterator процесирањето над секој лик во таа 389 00:24:28,870 --> 00:24:30,410 командата. 390 00:24:30,410 --> 00:24:46,755 Па што оваа најскриената printf прави е, имаме printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2, 0 3, 0 4, 0 5, 0 6, но сега, argv 0 7 ќе 392 00:24:58,680 --> 00:25:00,670 еднакви обратна коса црта 0. 393 00:25:00,670 --> 00:25:05,730 >> Па тогаш ние излезете дека за јамка, и сега јас iterates до 1. 394 00:25:05,730 --> 00:25:10,910 И сега ние ќе печати argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 Па, сега, бидејќи јас ги намалат здраво кратко, argv 1 2 повторно ќе биде 396 00:25:17,040 --> 00:25:18,170 обратна коса црта 0. 397 00:25:18,170 --> 00:25:25,050 И така, прираст I и продолжи, а така натаму, додека не се печати од сите 398 00:25:25,050 --> 00:25:28,580 светот, а тоа се три командната линија аргументи, а ние ќе излезете надвор од 399 00:25:28,580 --> 00:25:31,670 најоддалечените јамка, како и завршиме нашата програма. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Па ајде да се врати тука. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Па ќе се здобијат со некои блискоста со командната линија аргументи на овој 406 00:25:52,370 --> 00:25:54,460 Посебен проблем во собата. 407 00:25:54,460 --> 00:25:56,630 >> Сега, дебагирање. 408 00:25:56,630 --> 00:26:01,680 Па најверојатно веќе мораше да го направи некои грешки со вашиот претходен 409 00:26:01,680 --> 00:26:03,120 проблем во собата. 410 00:26:03,120 --> 00:26:08,420 И еден многу лесен начин за дебагирање, прво, да се погледне во кабриолет програма. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Па, шетање низ оваа програма, ние ќе побара од корисникот за 413 00:26:23,830 --> 00:26:29,350 број, се фати дека цел број, а потоа, произволно, имаме време јамка дека 414 00:26:29,350 --> 00:26:32,280 е само ќе Decrement Јас се додека не е еднаква на 10. 415 00:26:32,280 --> 00:26:35,820 Ајде само да се претпостави Јас сум влегуваат цел број поголем од 10. 416 00:26:35,820 --> 00:26:38,700 Па јас Намалување додека не е еднаква на 10. 417 00:26:38,700 --> 00:26:42,630 >> А потоа имаме уште додека јамка дека, додека јас не се еднакви на 0, ние сме 418 00:26:42,630 --> 00:26:44,540 ќе ми Decrement со 3. 419 00:26:44,540 --> 00:26:49,790 Па ако видите намерата на бубачки тука, тоа е дека ова ќе Намалување i за 420 00:26:49,790 --> 00:26:57,010 биде 10, а потоа тоа додека јамка волја декриминирачките i од 10, до 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 на негативните 2, на негативни 5, и така натаму, да негативна бесконечност, бидејќи јас ќе 422 00:27:02,880 --> 00:27:05,920 всушност никогаш не се изедначи 0. 423 00:27:05,920 --> 00:27:08,610 А потоа на крајот на оваа програма, имаме foo функција која е 424 00:27:08,610 --> 00:27:12,130 случува испечатите дека јас. 425 00:27:12,130 --> 00:27:16,520 >> Значи ова е краток и тривијални програма, и бубачка е очигледно, 426 00:27:16,520 --> 00:27:18,790 особено откако јас само рече она бубачка беше. 427 00:27:18,790 --> 00:27:24,840 Но намерата тука е, добро, ова може да всушност изгледа како некои од вашите 428 00:27:24,840 --> 00:27:30,040 решенија од алчен од последниот Проблемот наместена, а можеби немаат 429 00:27:30,040 --> 00:27:32,800 некои бесконечна јамка во вашата програма, и немате идеја 430 00:27:32,800 --> 00:27:34,100 што е тоа што предизвикува. 431 00:27:34,100 --> 00:27:38,690 Така многу корисен за дебагирање техника е само да додадете printfs 432 00:27:38,690 --> 00:27:40,180 сите над вашиот код. 433 00:27:40,180 --> 00:27:49,200 >> Па еве јас сакам printf надвор првиот додека јамка. 434 00:27:49,200 --> 00:27:53,155 И тука сакам printf, и јас само ќе ми се печати. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Јас дури и ќе се направи првата додека јамка, јас. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Надвор, секунда, додека јамка. 439 00:28:09,040 --> 00:28:12,170 Уште еднаш, печати внатре од тука, вредноста i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 И ајде да ја извршите оваа. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Па дот коса црта дебагирање. 444 00:28:24,800 --> 00:28:25,610 Внесете цел број. 445 00:28:25,610 --> 00:28:28,150 Ајде да направиме 13. 446 00:28:28,150 --> 00:28:28,760 И бум. 447 00:28:28,760 --> 00:28:33,300 Можеме да видиме дека ние сме бесконечно looping внатрешноста на вториот додека јамка. 448 00:28:33,300 --> 00:28:36,305 Па сега ние знаеме што бубачка е. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Но printf дебагирање е совршено одлично, но штом вашите програми се 451 00:28:45,610 --> 00:28:50,560 повеќе и повеќе комплицирано, постојат повеќе софистицирани решенија за 452 00:28:50,560 --> 00:28:51,705 Прв работите работа. 453 00:28:51,705 --> 00:28:52,955 Значи, да се отстранат сите овие printfs. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 И ајде да бидете сигурни дека јас не се скрши нешто. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Па на програмата ние ќе да се воведе се нарекува 458 00:29:14,180 --> 00:29:16,715 GDB, за ГНУ дебагерот. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Па, всушност, да се отстрани за дебагирање за второ, и да debug повторно. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Па, всушност, прво, добра лекција во командната линија аргументи. 463 00:29:34,440 --> 00:29:37,780 Забележете дека ова ѕвекот команда која е составувањето сè е тоа што поминал 464 00:29:37,780 --> 00:29:41,300 во командната линија, овие командната линија аргументи. 465 00:29:41,300 --> 00:29:46,250 Па токму онака како што се случува да биде со користење на командната линија аргументи, како што 466 00:29:46,250 --> 00:29:51,500 направи пред, и како што ќе во PSET 2, тоа е како ѕвекот ги користи. 467 00:29:51,500 --> 00:30:00,070 >> Па се забележи дека оваа прва знаме, цртичка ggdb3, што тоа зборува е, ѕвекот, 468 00:30:00,070 --> 00:30:03,790 треба да се состави оваа датотека со Намерата дека ние на крајот ќе 469 00:30:03,790 --> 00:30:05,380 треба да го debug. 470 00:30:05,380 --> 00:30:13,840 Толку колку што имате тоа знаме, тогаш можеме да GDB дебагирање. 471 00:30:13,840 --> 00:30:17,380 И тоа ќе се отвори на ГНУ дебагерот. 472 00:30:17,380 --> 00:30:22,920 >> Па така постојат многу команди што треба да се навикнеш на. 473 00:30:22,920 --> 00:30:27,100 Првиот што ќе веројатно веднаш треба е Run. 474 00:30:27,100 --> 00:30:28,200 Значи она што е Стартувај случува да се направи? 475 00:30:28,200 --> 00:30:30,910 Тоа се случува да се започне нашата програма. 476 00:30:30,910 --> 00:30:36,180 Значи се кандидира, почнувајќи програмата, програмата бара од нас за цел број, 13. 477 00:30:36,180 --> 00:30:39,170 И тогаш тоа е бесконечна looping како се очекува, освен јас отстрани 478 00:30:39,170 --> 00:30:40,500 printfs, па ние дури и не се види тоа. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Излезе нормално. 481 00:30:44,600 --> 00:30:45,850 Ох. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Можно е дека тоа завиткани сите обратно, да се вратиме - игнорирајќи тоа. 484 00:30:53,640 --> 00:30:55,170 Се претпостави дека не ја напуштил нормално. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Има комплициран одговор на тоа. 487 00:31:03,370 --> 00:31:07,890 >> Па сега, тоа не е многу корисно. 488 00:31:07,890 --> 00:31:11,480 Па само трчање нашата програма внатрешноста на овој дебагерот не ни помогне во било која 489 00:31:11,480 --> 00:31:15,610 начин, бидејќи ние би можеле да имаат само направено точка го намали дебагирање надвор gdb. 490 00:31:15,610 --> 00:31:21,250 Па една команда која Ќе веројатно - 491 00:31:21,250 --> 00:31:22,970 и јас ќе престанам ова. 492 00:31:22,970 --> 00:31:25,850 Контрола-D или да престанам, и работа. 493 00:31:25,850 --> 00:31:29,550 Па ајде да се отвори повторно. 494 00:31:29,550 --> 00:31:31,130 >> Друга команда која најверојатно ќе веднаш сакате да 495 00:31:31,130 --> 00:31:33,600 се користи за да се скрши. 496 00:31:33,600 --> 00:31:37,120 Па ние ќе се скрши на главниот сега за сега, а потоа јас ќе објаснам тоа. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Добро, тука гледаме дека постави точка на прекин во оваа линија во debug.c. 499 00:31:46,370 --> 00:31:50,160 Па што пауза значи дека кога ќе внесете ден, на програмата ќе 500 00:31:50,160 --> 00:31:53,560 продолжи да работи додека не Јас хит точка на прекин. 501 00:31:53,560 --> 00:31:59,390 Значи, кога ќе се погоди се кандидира, програмата започнува, а потоа го скрши штом тоа 502 00:31:59,390 --> 00:32:01,940 влегува во главната функција. 503 00:32:01,940 --> 00:32:06,930 Се скрши главна ќе биде нешто прилично често се направи. 504 00:32:06,930 --> 00:32:11,340 >> И сега, да те запознаам некои повеќе команди. 505 00:32:11,340 --> 00:32:14,330 Се забележи, дека тоа е велејќи дека ние скрши на линијата 11, која е 506 00:32:14,330 --> 00:32:16,230 printf, внесете цел број. 507 00:32:16,230 --> 00:32:21,260 Па команда Следна ќе биде како ние одиме на следната линија код. 508 00:32:21,260 --> 00:32:24,810 Ова се случува да ни овозможи да се повлече преку нашата програма линија по линија. 509 00:32:24,810 --> 00:32:26,260 Значи следниот. 510 00:32:26,260 --> 00:32:29,820 >> Сега линија 12, ние ќе за да се добие број. 511 00:32:29,820 --> 00:32:30,450 Следната. 512 00:32:30,450 --> 00:32:34,290 И ако едноставно притиснете Ентер, тоа ќе Повтори последното нешто што го направи. 513 00:32:34,290 --> 00:32:36,480 Па јас не треба да напишеш Следниот секој пат. 514 00:32:36,480 --> 00:32:40,100 Па внесете број, 13. 515 00:32:40,100 --> 00:32:46,940 Па сега, линија 14, а јас е поголема од 10, а јас ќе направам следно. 516 00:32:46,940 --> 00:32:48,685 И гледаме дека се случува да се з намалување. 517 00:32:48,685 --> 00:32:50,210 Па ние ќе да се з Намалување повторно. 518 00:32:50,210 --> 00:32:53,620 >> Па сега, уште една корисна команда е Print. 519 00:32:53,620 --> 00:32:55,750 Па Печати ќе испечатите вредноста на променлива. 520 00:32:55,750 --> 00:32:57,825 Ајде да го изнесам вредност на променливата i. 521 00:32:57,825 --> 00:32:58,705 Ајде да се печати i. 522 00:32:58,705 --> 00:33:00,910 Тоа се случува да се каже дека е 11. 523 00:33:00,910 --> 00:33:03,330 Сега ние Следна повторно додека i е поголема од 10. 524 00:33:03,330 --> 00:33:05,590 Па јас сеуште поголема од 10, бидејќи тоа е 11. 525 00:33:05,590 --> 00:33:06,920 Јас минус минус. 526 00:33:06,920 --> 00:33:08,250 Ајде јас печати повторно. 527 00:33:08,250 --> 00:33:10,950 Како што се очекуваше, тоа е 10. 528 00:33:10,950 --> 00:33:12,510 >> Па сега, следната. 529 00:33:12,510 --> 00:33:16,250 Тоа е се вратам на состојба, i е поголема од 10, но јас сега е 10, па 530 00:33:16,250 --> 00:33:20,040 тоа не е поголема од 10, така што очекуваме тоа да падне од додека јамка. 531 00:33:20,040 --> 00:33:22,220 А сега ние сме под таа линија на кодот. 532 00:33:22,220 --> 00:33:28,750 И друга команда, листа, е само ќе за да се прикаже Претходната и следната 533 00:33:28,750 --> 00:33:31,240 неколку линии на код, во случај да се изгуби. 534 00:33:31,240 --> 00:33:35,420 Па ние само излезе ова додека јамка, и сега ние се влезени во оваа 535 00:33:35,420 --> 00:33:37,080 додека јамка, линија 18. 536 00:33:37,080 --> 00:33:39,860 Така, додека јас не се еднакви 0. 537 00:33:39,860 --> 00:33:46,570 И, веднаш, јас сум минус 3 еднакво, а ние ќе забележите, ова само ќе продолжи да оди. 538 00:33:46,570 --> 00:33:48,270 И ние може да се з печати. 539 00:33:48,270 --> 00:33:49,990 >> Секоја команда вид на има кратенки. 540 00:33:49,990 --> 00:33:51,720 Така што p е краток за печатење. 541 00:33:51,720 --> 00:33:53,400 Значи можеме да p i. 542 00:33:53,400 --> 00:33:57,550 Само држете n, или да прави Next. 543 00:33:57,550 --> 00:33:58,340 Печати јас повторно. 544 00:33:58,340 --> 00:34:00,380 Гледаш сега е негативен 167. 545 00:34:00,380 --> 00:34:06,030 Па ова ќе трае вечно, но не навистина засекогаш, затоа што само виде, тоа 546 00:34:06,030 --> 00:34:09,330 всушност, ќе заврши во некоја точка. 547 00:34:09,330 --> 00:34:15,699 >> Така што почнува gdb. 548 00:34:15,699 --> 00:34:19,504 Но ајде да направиме уште една работа во gdb. 549 00:34:19,504 --> 00:34:20,754 Ух, дебагирање. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Значи, во овој конкретен случај, бесконечна јамка се случи да биде во внатрешноста на 552 00:34:28,534 --> 00:34:30,050 главната функција. 553 00:34:30,050 --> 00:34:35,779 И сега за сега, само прифати дека јас сум случува да се движат на бесконечна јамка во 554 00:34:35,779 --> 00:34:37,029 на foo функција. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Само сети се дека, на крајот од овој програма, добро, ова беше првично 557 00:34:43,730 --> 00:34:46,210 повикувајќи foo, која беше само ќе ми се печати. 558 00:34:46,210 --> 00:34:51,880 Но сега ние сме повикувајќи foo, што е ќе Намалување i додека не е 0, и 559 00:34:51,880 --> 00:34:54,548 а потоа печати таа променлива. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Спаси. 562 00:34:57,970 --> 00:35:00,175 Направи дебагирање. 563 00:35:00,175 --> 00:35:03,310 И сега, gdb дебагирање. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Значи, ако јас само се кандидира, тогаш јас не одам да да биде во можност да всушност чекор низ моите 566 00:35:10,580 --> 00:35:11,730 Програмата линија по линија. 567 00:35:11,730 --> 00:35:19,820 Па ајде да се скрши во главните, и потоа внеси ја стартувате. 568 00:35:19,820 --> 00:35:28,160 Така одат преку овој, printf, внесете цел број, да добијат цел број, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Па ние ќе да се задржи, намалување до i е поголема од 10. 571 00:35:37,490 --> 00:35:42,840 Тогаш ние ќе треба да падне преку додека јамка, и да се на линија - 572 00:35:42,840 --> 00:35:44,364 ајде да се отвори во посебен прозорец. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Па ние decremented додека јас веќе не бев поголема од 10, а потоа ние 575 00:35:53,300 --> 00:35:55,700 нарекува функцијата, foo. 576 00:35:55,700 --> 00:36:01,340 >> Значи она што се случи веднаш штом ќе се погоди функција foo, добро, се јавив foo, и 577 00:36:01,340 --> 00:36:04,030 тогаш јас веќе не имал контрола над gdb. 578 00:36:04,030 --> 00:36:10,230 Па штом ќе се погоди Следна на оваа линија, работи продолжи до тоа се случи, 579 00:36:10,230 --> 00:36:12,400 каде што на програмата постоеле кога - 580 00:36:12,400 --> 00:36:14,450 се претпостави дека не постои крајот. 581 00:36:14,450 --> 00:36:16,390 Видовте што пауза за малку иако. 582 00:36:16,390 --> 00:36:22,040 Па зошто да не го изгуби контрола над програмата во тој момент? 583 00:36:22,040 --> 00:36:27,540 Па, кога ќе напишеш следниот, што оди до буквалното следната линија на кодот кој 584 00:36:27,540 --> 00:36:28,850 ќе се изврши. 585 00:36:28,850 --> 00:36:35,950 Па по линија 21, на следната линија код што ќе го изврши е линија 22, 586 00:36:35,950 --> 00:36:38,520 што е, излегувањето од главната. 587 00:36:38,520 --> 00:36:43,810 Па јас не сакам да се оди само на следната линија код. 588 00:36:43,810 --> 00:36:48,170 Сакам да одам во функција, foo, а потоа, исто така, чекор по чекор 589 00:36:48,170 --> 00:36:49,830 оние линии на код. 590 00:36:49,830 --> 00:36:53,726 >> Па за тоа, имаме алтернатива. 591 00:36:53,726 --> 00:36:56,770 Ајде да престанам дека повторно. 592 00:36:56,770 --> 00:36:58,020 Се скрши главната. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Ух, 1, следната, следниот, 13, следната, следната, следниот, внимателно, 595 00:37:06,370 --> 00:37:09,820 пред да удри линија foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Па сега, ние сме на линија 21, каде што ние го нарекуваме foo. 598 00:37:13,700 --> 00:37:17,100 Ние не сакаме следната да напишеш, затоа што само ќе се јавите на функција foo, и 599 00:37:17,100 --> 00:37:18,710 оди на следното линија код. 600 00:37:18,710 --> 00:37:20,840 Она што сакаме да го користите е чекор. 601 00:37:20,840 --> 00:37:25,690 Па постои разлика помеѓу Чекор и Следно, каде Чекор чекори во 602 00:37:25,690 --> 00:37:28,190 функционираат, и Следна оди во текот на функција. 603 00:37:28,190 --> 00:37:32,830 Тоа само ги извршува интегритет на функцијата и го задржува оди. 604 00:37:32,830 --> 00:37:37,210 >> Па чекор ќе ни донесе во функција, foo. 605 00:37:37,210 --> 00:37:41,160 И гледаме тука, сега, ние сме назад во ова додека јамка тоа е, во теорија, 606 00:37:41,160 --> 00:37:44,190 ќе продолжи засекогаш. 607 00:37:44,190 --> 00:37:50,420 И ако го погоди чекор, кога тоа не е дури и функција да се јавите, тогаш тоа е 608 00:37:50,420 --> 00:37:51,720 идентична со Next. 609 00:37:51,720 --> 00:37:55,320 Па тоа е само кога сте на линија која е повик функција која Чекор 610 00:37:55,320 --> 00:37:56,970 се случува да се разликуваат од Next. 611 00:37:56,970 --> 00:37:57,930 Па чекор ќе ни донесе тука. 612 00:37:57,930 --> 00:38:02,100 Чекор, чекор, чекор, чекор, чекор, чекор, и ние само ќе бесконечна јамка засекогаш. 613 00:38:02,100 --> 00:38:06,810 >> Па можеби ќе се навикнеш на тоа како вашиот начин на идентификување на бесконечна петелки, е 614 00:38:06,810 --> 00:38:08,960 само држи овој Enter копчето за да види каде ќе заглавиш. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Постојат подобри начини да го направите тоа, но За сега тоа е совршено доволно. 617 00:38:14,780 --> 00:38:17,967 И стилски, за да одговара на стилот 50, јас треба да се направи ова. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Така што едно последната команда да се воведе. 621 00:38:28,400 --> 00:38:30,810 Добро, ајде да gdb дебагирање внатре 622 00:38:30,810 --> 00:38:35,580 Така, наместо на кршење на главната, ако јас знае foo функција е, исто така, 623 00:38:35,580 --> 00:38:39,230 проблем, тогаш јас би можеле да имаат само рече, се скрши на foo, наместо. 624 00:38:39,230 --> 00:38:42,310 Да речеме јас се скрши на двете главни и foo. 625 00:38:42,310 --> 00:38:45,390 Така можете да го поставите како многу поминувања како сакате. 626 00:38:45,390 --> 00:38:49,230 Кога ќе внесете ден, тоа се случува да застане на - 627 00:38:49,230 --> 00:38:52,180 ooh, ајде да прекомпајлирате, бидејќи Ја променив работи. 628 00:38:52,180 --> 00:38:55,950 Ќе видите оваа линија, Предупредување, извор датотека е понова од онаа извршна. 629 00:38:55,950 --> 00:38:59,680 Па тоа значи дека јас само отиде во тука и го смени овие да се во согласност со Стил 630 00:38:59,680 --> 00:39:03,100 50, но јас не прекомпајлирате програмата. 631 00:39:03,100 --> 00:39:04,870 Па GDB ме прави свесни за тоа. 632 00:39:04,870 --> 00:39:10,130 Јас ќе престанам, да debug повторно, хит gdb дебагирање. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Па сега, да се вратиме на она што го правев. 635 00:39:12,800 --> 00:39:15,720 Се скрши главната, пауза foo. 636 00:39:15,720 --> 00:39:20,680 Сега, ако јас ја стартувате програмата, така што е ќе продолжи се додека хитови 637 00:39:20,680 --> 00:39:21,320 точка на прекин. 638 00:39:21,320 --> 00:39:24,680 Дека прекин се случува да да биде првиот во главните. 639 00:39:24,680 --> 00:39:28,630 Сега, наместо за правење на следната, следниот, следната, следната, следниот, се додека не го погоди foo, јас 640 00:39:28,630 --> 00:39:35,230 да напишете продолжи, која ќе продолжи додека не го погоди следната точка на прекин. 641 00:39:35,230 --> 00:39:37,200 Морам да влезат во цел број во прв план. 642 00:39:37,200 --> 00:39:40,570 Продолжи ќе продолжи се додека не го погоди следната точка на прекин, а тоа е дека 643 00:39:40,570 --> 00:39:43,320 функција на foo. 644 00:39:43,320 --> 00:39:50,130 >> Па Стартувај ќе трае до го погоди точка на прекин, но ти само внесете ден кога 645 00:39:50,130 --> 00:39:54,060 ти си почеток на програмата, а потоа, од тогаш па натаму, тоа е продолжи. 646 00:39:54,060 --> 00:40:01,950 Ако јас само се скрши главни и потоа истрча, тоа ќе се скрши на 647 00:40:01,950 --> 00:40:03,670 Главната, а потоа продолжи. 648 00:40:03,670 --> 00:40:10,050 Бидејќи јас не имаат брејк на foo, влезе во цел број, тогаш сега сум 649 00:40:10,050 --> 00:40:11,380 нема да се скрши на foo. 650 00:40:11,380 --> 00:40:16,318 Тоа е само ќе да бесконечна јамка се додека тоа. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Па тоа е Вовед во gdb. 654 00:40:24,420 --> 00:40:27,790 Треба да почнете да го користите во твојот проблем комплети. 655 00:40:27,790 --> 00:40:30,550 Тоа може да биде многу корисна да се идентификуваат грешки. 656 00:40:30,550 --> 00:40:35,280 Ако, всушност, само, линија по линија, одете преку вашиот код, и споредба на она што е 657 00:40:35,280 --> 00:40:39,740 всушност, се случува со она што се очекува да се случи, тогаш тоа е прилично 658 00:40:39,740 --> 00:40:41,060 тешко да го изгубиле Вашиот бубачки. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Па минатата недела Дејвид израснати овој тајна-клуч криптографија работи за 663 00:40:54,040 --> 00:40:59,350 прв пат, каде што ние не сакаме лозинки само да се чуваат на нашите 664 00:40:59,350 --> 00:41:03,210 компјутер во некои обичен текст фајл, каде некој може да дојдат и само 665 00:41:03,210 --> 00:41:04,660 отворете го и прочитајте нив. 666 00:41:04,660 --> 00:41:07,530 Идеално, тие ќе бидат криптирани на некој начин. 667 00:41:07,530 --> 00:41:13,340 И во проблем во собата 2, ќе се занимаваат со еден метод на енкрипција, 668 00:41:13,340 --> 00:41:16,520 или, добро, два методи, но тие не се толку големи. 669 00:41:16,520 --> 00:41:20,050 Ако го направите на хакерите издание, ти си исто така ќе треба да се занимаваат со 670 00:41:20,050 --> 00:41:22,150 дешифрира некои работи. 671 00:41:22,150 --> 00:41:29,770 >> Значи прашањето сега е, добро, дури и ако имаме најсилните енкрипциски 672 00:41:29,770 --> 00:41:34,830 алгоритам во светот, ако изберете особено сиромашните лозинка, тогаш тоа 673 00:41:34,830 --> 00:41:37,720 нема да ви помогнат многу, бидејќи луѓето се уште ќе биде во можност да го дознаам. 674 00:41:37,720 --> 00:41:41,530 Дури и ако гледањето на шифрирана стринг и личи на хаос на ѓубре 675 00:41:41,530 --> 00:41:44,760 што не значи ништо за нив, ако тие уште само треба да се обиде на неколку лозинки 676 00:41:44,760 --> 00:41:50,560 да го дознаам, а потоа ќе не се многу безбеден. 677 00:41:50,560 --> 00:41:55,890 Па гледајќи видео дека прави таа точка. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [Видео репродукција] 680 00:42:00,970 --> 00:42:02,100 >> -Каска, можете демон. 681 00:42:02,100 --> 00:42:03,370 Што се случува? 682 00:42:03,370 --> 00:42:05,170 Што ви се прави за да се ќерка ми? 683 00:42:05,170 --> 00:42:09,910 >> -Дозволете ми да се воведе брилијантен млади пластичен хирург, д-р Филип 684 00:42:09,910 --> 00:42:13,730 Schlotkin, најголемиот нос работа човек во целиот 685 00:42:13,730 --> 00:42:16,080 вселената, и Беверли Хилс. 686 00:42:16,080 --> 00:42:17,210 >> -Ваше Височество. 687 00:42:17,210 --> 00:42:18,070 >> -Нос работа? 688 00:42:18,070 --> 00:42:18,670 Јас не ги разбирам. 689 00:42:18,670 --> 00:42:20,090 Таа веќе имаше нос работа. 690 00:42:20,090 --> 00:42:21,910 Тоа беше слатка шеснаесет присутни. 691 00:42:21,910 --> 00:42:22,140 >> -Не. 692 00:42:22,140 --> 00:42:23,690 Тоа не е она што мислите. 693 00:42:23,690 --> 00:42:25,420 Тоа е многу, многу полошо. 694 00:42:25,420 --> 00:42:30,300 Ако не ми даде комбинација на воздухот штит, д-р Schlotkin ќе 695 00:42:30,300 --> 00:42:34,226 даде својата ќерка назад нејзината стара носот. 696 00:42:34,226 --> 00:42:35,476 >> -Не. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Од каде ти е тоа? 699 00:42:40,516 --> 00:42:41,440 >> -Во ред. 700 00:42:41,440 --> 00:42:42,180 Јас ќе кажам. 701 00:42:42,180 --> 00:42:43,381 Јас ќе кажам. 702 00:42:43,381 --> 00:42:44,263 Не, тато. 703 00:42:44,263 --> 00:42:45,590 Не, вие не мора. 704 00:42:45,590 --> 00:42:46,860 >> -Ти си во право, драга моја. 705 00:42:46,860 --> 00:42:48,450 Јас ќе го изгубиле Вашиот нов нос. 706 00:42:48,450 --> 00:42:52,090 Но јас нема да му кажам на комбинација, без разлика што. 707 00:42:52,090 --> 00:42:53,680 >> -Многу добро. 708 00:42:53,680 --> 00:42:55,685 Д-р Schlotkin, дали вашето најлошото. 709 00:42:55,685 --> 00:42:56,914 >> -Ми беше задоволство. 710 00:42:56,914 --> 00:43:00,690 >> [Алатки СЕ наострен] 711 00:43:00,690 --> 00:43:01,910 >> -Не. 712 00:43:01,910 --> 00:43:02,520 Чекаат. 713 00:43:02,520 --> 00:43:03,836 Чекаат. 714 00:43:03,836 --> 00:43:05,300 Јас ќе кажам. 715 00:43:05,300 --> 00:43:06,880 Јас ќе кажам. 716 00:43:06,880 --> 00:43:09,130 >> -Знаев дека тоа ќе работат. 717 00:43:09,130 --> 00:43:09,900 Во ред е. 718 00:43:09,900 --> 00:43:12,850 Дај ми го. 719 00:43:12,850 --> 00:43:16,918 >> -Комбинацијата е еден. 720 00:43:16,918 --> 00:43:17,406 >> -Една. 721 00:43:17,406 --> 00:43:18,382 >> -Една. 722 00:43:18,382 --> 00:43:19,358 >> -Два. 723 00:43:19,358 --> 00:43:19,846 >> -Два. 724 00:43:19,846 --> 00:43:20,822 >> -Два. 725 00:43:20,822 --> 00:43:21,310 >> -Три. 726 00:43:21,310 --> 00:43:21,798 >> -Три. 727 00:43:21,798 --> 00:43:22,774 >> -Три. 728 00:43:22,774 --> 00:43:23,262 >> -Четири. 729 00:43:23,262 --> 00:43:23,750 >> -Четири. 730 00:43:23,750 --> 00:43:26,150 >> -Четири. 731 00:43:26,150 --> 00:43:27,010 >> -Пет. 732 00:43:27,010 --> 00:43:27,670 >> -Пет. 733 00:43:27,670 --> 00:43:29,010 >> -Пет. 734 00:43:29,010 --> 00:43:34,770 >> -Значи комбинацијата е еден, два, три, четири, пет. 735 00:43:34,770 --> 00:43:37,460 Тоа е stupidest комбинација Што некогаш сум го слушнал во мојот живот. 736 00:43:37,460 --> 00:43:39,710 Тоа е вид на нешто идиот ќе има врз неговиот багаж. 737 00:43:39,710 --> 00:43:42,000 >> -Благодарам, Ваше Височество. 738 00:43:42,000 --> 00:43:43,530 >> -Што направи? 739 00:43:43,530 --> 00:43:44,490 >> -Го исклучив ѕидот. 740 00:43:44,490 --> 00:43:45,420 >> -Не ти не. 741 00:43:45,420 --> 00:43:45,840 Ќе се исклучи на целиот филм. 742 00:43:45,840 --> 00:43:46,930 >> -Јас мора да се притисне погрешна копче. 743 00:43:46,930 --> 00:43:48,265 >> -Па, го стави назад. 744 00:43:48,265 --> 00:43:49,110 Стави филмот назад. 745 00:43:49,110 --> 00:43:49,510 >> -Да, г-дине. 746 00:43:49,510 --> 00:43:49,917 Да, господине. 747 00:43:49,917 --> 00:43:50,324 >> -Да одиме, Арнолд. 748 00:43:50,324 --> 00:43:51,140 Дојди, Гречен. 749 00:43:51,140 --> 00:43:53,060 Се разбира, ти знаеш дека јас ќе уште треба да ви сметка за ова. 750 00:43:53,060 --> 00:43:53,440 >> [Крај видео репродукција] 751 00:43:53,440 --> 00:43:54,690 >> Роб BODEN: Во ред. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Па сега дека ние сме веќе зборуваме за безбедноста на некој начин, убаво 754 00:44:08,430 --> 00:44:16,050 малку филм постер, така што во последниве дена, овие прашања со зимскиот 755 00:44:16,050 --> 00:44:17,300 следење сè. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Тоа може да биде тешко да се чувствуваат како тебе имаат некој вид на приватноста во 758 00:44:26,930 --> 00:44:34,540 онлајн светот, иако не можел да кажам можете поголемиот дел од деталите на призма. 759 00:44:34,540 --> 00:44:42,130 Па движат надвор призма, ние нема да се зборува за тоа, сега 760 00:44:42,130 --> 00:44:44,030 се размислува за вашиот лаптоп. 761 00:44:44,030 --> 00:44:48,360 Значи тука, сакам да се префрлат на мојот вистински профил, 762 00:44:48,360 --> 00:44:50,370 со моето мало пингвинче. 763 00:44:50,370 --> 00:44:57,310 Па имам лозинка сет, и дека лозинка е она што го сакате да биде. 764 00:44:57,310 --> 00:45:02,430 >> Но запомнете дека она што јас сум влезете во со, така што ова најава 765 00:45:02,430 --> 00:45:04,850 брза, некои програма. 766 00:45:04,850 --> 00:45:07,910 Тоа е некој програма со која беше напишано од страна на некои лице. 767 00:45:07,910 --> 00:45:13,250 И така, тоа лице, ако тие се особено штетен, тие би можеле да 768 00:45:13,250 --> 00:45:17,780 реков, во ред, па ако лозинката дека влегувањето ми е еднаква на мојата 769 00:45:17,780 --> 00:45:22,800 вистински лозинка, или тоа е еднаква за некои посебни лозинка - 770 00:45:22,800 --> 00:45:25,550 Давид е одличен или нешто - 771 00:45:25,550 --> 00:45:27,190 потоа да ги споделите внатре 772 00:45:27,190 --> 00:45:33,760 Така малициозен програмер би можеле да имаат пристап до сите на вашите Macs, или 773 00:45:33,760 --> 00:45:36,150 Прозорци, или ништо. 774 00:45:36,150 --> 00:45:41,980 >> Така што не е многу на загриженост, бидејќи, Мислам, ова е најава на програмата 775 00:45:41,980 --> 00:45:48,720 тоа е транспортирана со OS X, стотици или илјадници луѓе имаат 776 00:45:48,720 --> 00:45:50,020 разгледа овој код. 777 00:45:50,020 --> 00:45:55,330 И така, ако, во вашиот код некаде, каже дали овој стринг е еднаква на еднаквите 778 00:45:55,330 --> 00:45:58,860 Дејвид е страшно, најава, тогаш некој е ќе биде, како, чекај. 779 00:45:58,860 --> 00:45:59,800 Ова не е во право. 780 00:45:59,800 --> 00:46:01,790 Ова не треба да биде тука. 781 00:46:01,790 --> 00:46:06,650 Значи тоа е еден начин ние се работи да биде вид на безбеден. 782 00:46:06,650 --> 00:46:10,300 >> Но, мислам за дури и програми што ќе пишувам. 783 00:46:10,300 --> 00:46:13,000 Да речеме сте го напишале за логирање програма. 784 00:46:13,000 --> 00:46:20,440 Значи ова најава програма со која го напиша, па очигледно, сте добар 785 00:46:20,440 --> 00:46:21,210 програмер. 786 00:46:21,210 --> 00:46:25,610 Вие нема да се стави било малициозни ако x е еднаква еднаква на Давид е одличен 787 00:46:25,610 --> 00:46:27,860 во вашиот код. 788 00:46:27,860 --> 00:46:31,930 Но оваа програма, она што го го користите да ги собере на оваа програма? 789 00:46:31,930 --> 00:46:34,180 Нешто како ѕвекот. 790 00:46:34,180 --> 00:46:38,460 Па што ако лицето кое се случило со пишува ѕвекот посебен латински во ѕвекот 791 00:46:38,460 --> 00:46:44,310 нешто како, ако сум составувањето на Влезот програма, а потоа внесете го овој код 792 00:46:44,310 --> 00:46:49,720 во најава програма со која вели дека, ако x е еднаква еднаква на Давид е страшно? 793 00:46:49,720 --> 00:46:59,890 Па не сосема уште, но ние имаме иста Прашањето овде, каде ѕвекот, добро, 794 00:46:59,890 --> 00:47:03,790 илјадници, ако не и десетици илјади луѓе, го погледна ѕвекот, имаат 795 00:47:03,790 --> 00:47:07,160 погледна својот линии на код и рече: Во ред е, нема ништо лошо тука. 796 00:47:07,160 --> 00:47:10,680 Очигледно, никој не прави ништо овој малициозен. 797 00:47:10,680 --> 00:47:15,780 >> Но она што е самата ѕвекот, како, што ако јас ги собере ѕвекот? 798 00:47:15,780 --> 00:47:20,900 Што ако имам некои компајлерот дека собира ѕвекот дека внесува во ѕвекот 799 00:47:20,900 --> 00:47:25,610 оваа специјална hack кој се вели дека, во ред, кога ќе ги собере ѕвекот, а потоа 800 00:47:25,610 --> 00:47:31,290 извршна јас се специјално треба да изгледа внатрешноста на логирање програма и вметнете 801 00:47:31,290 --> 00:47:34,230 оваа лозинка, е еднаква на еднаквите Дејв е страшно? 802 00:47:34,230 --> 00:47:37,990 Па се сеќавам дека вашиот компајлер себе треба да се состави во некоја точка. 803 00:47:37,990 --> 00:47:42,810 Значи, ако што ќе изберат да ги собере ѕвекот со, сам по себе е злопамтило, тогаш ќе 804 00:47:42,810 --> 00:47:45,580 може да се зезнав на целиот начин одредување на линија. 805 00:47:45,580 --> 00:47:49,630 >> Па еве, ние имаме Кен Томпсон и Денис Ричи. 806 00:47:49,630 --> 00:47:53,780 Значи ова е иконски сликата. 807 00:47:53,780 --> 00:47:55,470 Денис Ричи е на вистинскиот. 808 00:47:55,470 --> 00:47:58,740 Тој е голем - 809 00:47:58,740 --> 00:48:03,640 доста напиша C. Значи можете да благодарам него за оваа класа. 810 00:48:03,640 --> 00:48:04,840 Кен Томсон е на левата страна. 811 00:48:04,840 --> 00:48:07,780 Две од нив во основа напиша на UNIX. 812 00:48:07,780 --> 00:48:10,140 Па, тие беа главните соработници во UNIX. 813 00:48:10,140 --> 00:48:11,310 Имаше некои други. 814 00:48:11,310 --> 00:48:16,240 Па Кен Томпсон, во одреден момент, тој победи на Тјуринговата награда. 815 00:48:16,240 --> 00:48:20,860 И наградата Туринг, јас сум секогаш слушнале тоа референцирани овој начин, тоа е 816 00:48:20,860 --> 00:48:23,100 Нобеловата награда на компјутерските науки. 817 00:48:23,100 --> 00:48:27,500 >> Па на Тјуринговата награда, тој мора да даде својот говор. 818 00:48:27,500 --> 00:48:31,790 И тој го дава овој многу познат говор сега, наречен Рефлексии на верувајќи 819 00:48:31,790 --> 00:48:35,620 Доверба, која ние сме поврзани да на вебсајт разбира. 820 00:48:35,620 --> 00:48:41,670 И во овој говор, вели тој, во ред, па напишав на UNIX, а сега сите на 821 00:48:41,670 --> 00:48:43,320 Вие луѓе сте користење на UNIX. 822 00:48:43,320 --> 00:48:46,960 Сега, сетете денес дека Линукс е директен потомок на UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X директно користи на UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows не толку многу, но многу на идеи беа земени од UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Па тој оди до сцената и вели: Во ред е, сум го напишала на UNIX. 826 00:48:59,220 --> 00:49:03,940 И само така вие момци знам, јас сум можете да се најавите во секој 827 00:49:03,940 --> 00:49:05,590 еден од вашите компјутери. 828 00:49:05,590 --> 00:49:14,280 Откако го поставив една од овие специјални ако x еднакво еднаква на Кен Томсон е страшно, 829 00:49:14,280 --> 00:49:16,350 тогаш јас сум дозволено да се најавите. 830 00:49:16,350 --> 00:49:18,370 Па луѓето се како, добро, Како го направи тоа? 831 00:49:18,370 --> 00:49:21,090 Ги свртевме погледите кон логирање програма и ништо не е таму. 832 00:49:21,090 --> 00:49:24,700 Тој е како, добро, јас изменета на компајлерот да се логирате во најава програма 833 00:49:24,700 --> 00:49:30,490 така што за логирање програма сега ќе имаат дека x е еднаква еднаква на Кен Томпсон 834 00:49:30,490 --> 00:49:31,700 е неверојатна. 835 00:49:31,700 --> 00:49:33,120 >> И тие велат, добро, тоа не е точно. 836 00:49:33,120 --> 00:49:35,740 Ние сме во потрага на компајлерот, и компајлерот не имате било какви линии на 837 00:49:35,740 --> 00:49:36,400 кодот слично. 838 00:49:36,400 --> 00:49:40,540 Тој е како, во ред, но она што сте составувањето на компајлер со? 839 00:49:40,540 --> 00:49:44,810 И тие мислат, и тој е, како, добро, Јас сум оној кој ти дал компајлерот 840 00:49:44,810 --> 00:49:50,580 сте со користење да ги собере на компајлерот, па сте составувањето на компајлер, дека 841 00:49:50,580 --> 00:49:56,390 сам по себе е злопамтило, и ќе се скрши на страната за логирање програма. 842 00:49:56,390 --> 00:49:59,360 Значи, во основа, во тој момент, постои постои начин може да се погледне на изворот 843 00:49:59,360 --> 00:50:02,450 кодот на најавниот програма за да го видиш она што не е во ред. 844 00:50:02,450 --> 00:50:04,220 Ти дури и не може да се погледне во Изворниот код на компајлерот 845 00:50:04,220 --> 00:50:06,790 за да го видиш она што не е во ред. 846 00:50:06,790 --> 00:50:11,940 >> Ќе треба да се погледне на машина код, вистинските бинарната датотека на 847 00:50:11,940 --> 00:50:16,760 Составувач компајлерот за да ја видите, чекај, овие линии на код не треба да биде тука. 848 00:50:16,760 --> 00:50:22,130 Но Кен Томпсон го зеде еден чекор понатаму и вели, добро, постојат 849 00:50:22,130 --> 00:50:25,980 овие посебни програми кои, всушност, да ви помогне да го прочитате бинарни програми, 850 00:50:25,980 --> 00:50:29,340 и така, ако некој се користи таа програма за чита бинарни, тие ќе ги видите овие 851 00:50:29,340 --> 00:50:30,490 линии на код. 852 00:50:30,490 --> 00:50:34,020 Тој пат е изменета овие програми е да се каже, сите право, ако сте во потрага по 853 00:50:34,020 --> 00:50:38,460 компајлерот, не покажуваат ова особено сет од бинарни. 854 00:50:38,460 --> 00:50:42,830 >> Па тогаш ќе треба да се земе дека еден чекор понатаму и, во основа, што би можеле да имаат 855 00:50:42,830 --> 00:50:46,210 преземат повеќе нивоа на околни, и во одреден момент, никој не е всушност 856 00:50:46,210 --> 00:50:47,990 ќе треба да се проверува. 857 00:50:47,990 --> 00:50:52,590 Па Поуката од оваа приказна е, ти си нема да се пишува 858 00:50:52,590 --> 00:50:54,340 Ѕвекот во оваа класа. 859 00:50:54,340 --> 00:50:57,020 Сте ќе биде со користење на качување Ѕвекот многу во оваа класа. 860 00:50:57,020 --> 00:51:00,490 За сите што знаете, ѕвекот е злопамтило програма која е саботирање на секој 861 00:51:00,490 --> 00:51:03,520 единствена програма некогаш сте состави. 862 00:51:03,520 --> 00:51:08,206 И да те оставам на тој застрашувачки се напомене дека, ќе се видиме во среда. 863 00:51:08,206 --> 00:51:10,030 >> [Аплауз] 864 00:51:10,030 --> 00:51:12,935 >> ЗВУЧНИК 2: На следната CS50. 865 00:51:12,935 --> 00:51:14,580 >> ЗВУЧНИК 3: Не се осмелуваат да се каже. 866 00:51:14,580 --> 00:51:15,930 Можете да го направите тоа. 867 00:51:15,930 --> 00:51:19,440 Сте го направиле тоа порано, можете да го направите ова денес, можете да го направите ова утре. 868 00:51:19,440 --> 00:51:20,930 Што сте го правеле со години. 869 00:51:20,930 --> 00:51:22,790 Само оди до таму и го правиме ова. 870 00:51:22,790 --> 00:51:24,310 Можете да го направите тоа. 871 00:51:24,310 --> 00:51:26,102 >> [Музички]