>> [Музика свира]
>> РОБ БОДЕН: У реду.
Дакле, прва ствар прво, од видео из познато лице.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> -У реду.
То је ЦС50, а ово је Почетак недеље три.
Жао ми је што нисам могао бити тамо са вама данас, али дозволите ми да представим
ЦС50 сопствене Роб Боден.
>> [КРАЈ ВИДЕО РЕПРОДУКЦИЈА]
>> [Аплауз и ЖИВЕЛИ]
>> РОБ БОДЕН: филмографија у да је видео је фантастичан.
У реду.
Дакле, прво, ту је још један ручак.
То је сутра у 1:15.
Нема Ручак овог петка.
Она је са Куора.
И Томи није овде још, али један од људи постоји бивши шеф ЦФ,
Томи МцВиллиам.
Дакле, он је забаван момак.
Требало би да дође.
>> У реду.
Тако је прошле недеље, почели смо разбијање о томе шта је заиста ниска.
Ми смо познати од почетка да то је низ знакова.
Али прошле недеље, понирао смо у чињеници да је оно што је заиста секвенца
карактера, па, сада имамо низови карактера.
А ми знамо да је ниска, то је низ знакова, на самом крају,
имамо ову специјалну нулл бајт, ово косих 0, која означава крај
ниска.
>> И тако ниска је низ карактера, али можемо имати више од
само низ знакова, можемо имати низ било ког
врста ствари желимо.
Дакле, ако се сећате из прошле седмице, Узраст програм који Давид уведен
стварно брзо.
Дакле, прва ствар коју ћемо да урадимо је да питати корисника за цео број,
број људи у соби.
Када имамо тај цео број, смо декларисање низ.
Обратите пажњу на ове носећег синтаксу.
Идеш да се навикне на то.
>> Тако смо декларисање низ целих бројева зове узраста, и н постоје
целих бројева у овом низу.
Дакле, тај модел овде, ово 4 инт И једнако 0, и је мање од н, и плус
плус, који је такође ће бити образац да сте веома навићи.
Јер то је прилично како сте Увек ће да вршите итерацију кроз низове.
Дакле, не заборавите да је н дужина нашег низа.
И тако овде, ми смо више пута тражећи за доба особа коју сам у соби.
>> Након тога, идемо доле, и за шта год произвољна разлог, онда
одштампати колико година они ће бити година од сада.
И ради тај програм, хајде да направити узраста, дот Сласх узраста.
Дакле, број људи у соби, рецимо да су три.
И кажу, прва особа је 13, следећи је 26, а последњи је 30.
Дакле, онда ћу поновити током та три људи, одштампати 14, 27 и 31.
>> Дакле, запамтите да када смо прогласити низ величине н, индекси у који
низ, низ има вредности и индекси 0, 1, 2, све
до н минус 1.
Дакле, када смо рекли да су три особе у соби, а ми смо ставили у ту
Прва итерација кроз ово петља, ја ће бити 0.
Дакле, у индексу 0.
Ми се додељивање први старимо корисник унесе.
Затим у следећи, улазимо Други н корисник унесе, а у
на два, последњег н следећи.
>> Дакле, приметите да низ величине три нема ништа
у индексу три.
Ово није важећа.
У реду.
Дакле, да се вратим овде.
Дакле, сада када смо бавили низовима, имамо фамилијарности.
Сада ћемо прећи на команду лине аргументи, који ће бити
прилично релевантан за овај проблем сету.
>> Дакле, до сада, сваки пут када сам прогласила своју основну функцију, имамо
рекао маин празнина.
Зато празнина само значи да ми се не пролази ниједан
Аргументи за ову функцију.
Сада ћемо да видимо да је главни може узети неке аргументе.
Овде их зовемо инт аргц и стринг аргв заграда.
Заграде, опет, указује да имамо посла са низовима.
Дакле овде, ниска аргв заграде, ми смо бави низом стрингова.
Дакле аргц, који ће указати колико аргумената имамо
прошло на овом програму.
И да видимо шта то значи, хајде да затворимо.
>> У реду.
Дакле, до сада, ми смо покренули сваки Програм као дот резним узраста.
Можемо такође, у командној линији, поред проћи аргументе, тако термин, команда
лине аргументе.
Дакле, први аргумент, здраво свет.
Дакле овде, аргц би три.
То је кол аргумената у командној линији.
Аргц је увек најмање 1, с дот сласх узраста, себе, рачуна се као један од
су аргументи командне линије.
>> Онда здраво је први.
Ако дот Сласх узраста је нулти, онда здраво је први, а свет је
Други аргумент командне линије.
Тако ниска аргв, идемо да видимо, садржи низове, тачка косу црту
узраста, здраво, и свет.
И, по захтеву Давида, идемо да играју видео уводи да.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> -До сада у програмима смо написано, ми смо прогласити
Главни као маин празнина.
И све ово време, да има празнина једноставно су прецизирајући да
Програм не преузима било аргументе командне линије.
Другим речима, када корисник покрене Програм, он или она може да обезбеди команду
лине аргументи по писању додатни речи или фразе након програма је
име на линији.
>> Па, ако не желите да ваш програм на узети аргументе командне линије, једна или
више таквих речи, морамо да заменимо воид са пар аргумената.
Дакле, хајде да урадимо то.
Укључи ЦС50.х.
Укључи стандардну ио.х.
Инт маин.
И сада, уместо празнина, ја ћу да одредите инт аргц, и зове
низ стрингова зове аргв.
Сада, аргц и аргв су једноставно конвенцијама.
>> Могли смо звали ови аргументи већина нешто желимо.
Али оно што је важно је да је аргц инт јер, по дефиницији, то је
ће садржати аргумент цоунт, број речи у укупно које
корисник је откуцан на његов или њен линији.
аргв, у међувремену, аргумент вектор, је ће заправо бити низ складиштење
све речи које корисник има откуцан на његов или њен линији.
>> Хајде да наставимо да радимо нешто сада са једним или више ових
аргументе командне линије.
Конкретно, идемо напред и штампање без обзира реч типови корисник
после имена програма на линији.
Отворена заграда.
Затвори носач.
Принтф одсто а обрнута коса црта и запета.
И сад ја треба да кажем шта принтф вредност да прикључите на тај чувар места.
Желим прву реч да корисник има откуцан после имена програма,
и тако ћу навести аргв носач 1, близу
заграда, тачка и зарез.
>> Сада, зашто конзола 1 и не конзола 0?
Па, испоставило се, аутоматски чувају у аргв 0 ће бити
Стварни име програма.
Дакле, прва реч која типови корисник после име програма је, по
конвенција, ће бити чувају у аргв 1.
Хајде да сада састављају и покренете овај програм.
>> Направите аргв 0, тачка уписали косу аргв 0.
А сада реч као здраво.
Унесите.
И ту је имамо, здраво.
>> [КРАЈ ВИДЕО РЕПРОДУКЦИЈА]
>> РОБ БОДЕН: У реду.
Затворите то.
Дакле, узимајући поглед на тај програм да ми смо само упознати са нама, добро, само
да покаже, ако штампате аргв 0, направити, сада шта је то, аргв 0, тачка сласх аргв 0.
Дакле, као што се очекивало, што је штампање назив програма, пошто је аргв 0
Увек ће бити назив програма.
Али, хајде да урадимо нешто што бит занимљивије.
>> Дакле, у сету проблема, бићеш упознати са овом функцијом, атои.
Дакле, шта ми користимо за атои?
То ће претворити стринг у цео број.
Дакле, ако ја проћи ниску, један два три, да атои, који ће претворити да
на цео број, један два три.
Тако ћемо претворити први командна линија аргумент цео број,
а онда само штампају тај цео број.
>> Дакле, у основи, ми смо некако реимплементинг Тонирана, само
цео број је ушао у команди линија уместо у програму
интерактивно.
Па онда, чинећи аргв 0, хајде да урадимо она овде, и то затворити.
Дакле, ради аргв 0, па хајде да унесете цео број, један два три четири један два.
Дакле, то ће одштампати цео број, један два три четири један два.
Постоје неке суптилности да атои да то ће престати бриге о било чему
изван важећег нумеричког карактера, али то није битно.
>> Дакле, шта мислите дешава ако урадим ово?
Сегментација кривица.
Дакле, зашто је то тако?
Ако погледате уназад на нашем програму, ми смо претварање аргв 1, први аргумент
после имена програма, на цео број.
Али нема аргумената прошао после назива програма.
Дакле, овде видимо да је луд Програм, јер, ако се трудимо да га покренете
без икаквих аргумената, само ће се срушити.
>> Дакле, још један заједнички образац ћете видети је нешто слично, ако је аргц мање
од два, што указује да није било барем име програм и
Први аргумент, онда ћемо учинити нешто као принтф, није довољно
аргументе командне линије.
То вероватно није добра за штампање, то је вероватно нешто, као
требало би да унесете цео број у командној линији.
Само ћу га завршити тамо.
А онда се вратите 1.
Дакле, не заборавите да на крају нашег Програм, ако се вратимо 0, та врста
указује на успех.
И главни такође аутоматски враћа 0 ако не урадите.
>> Дакле овде, ми смо преподешавање 1 за индикацију да то није успех.
И можете да се вратите шта год желите, Само, 0 указује на успех, и
било шта друго указује неуспех.
Па хајде да покренете ову верзију ствари.
Па сад, ако ми не унесете командну линију Аргумент, то исправно рећи ћу
нас, није довољно командне линије.
Зар не заврши реченицу.
Друго, ако заиста то прође један, она може да заврши програм.
Дакле, ово је како би користили аргц у како би се потврди број
аргументи командне линије који заправо прошло.
>> Дакле, хајде да овај програм мало више компликована, а погледајте секунди
итерација ствари.
Дакле, сада, ми не само штампање Први аргумент командне линије.
Ево, ми смо итератинг од инт и једнакима 0, и је мање од аргц, ја плус
плус, и штампање аргв, индекс ја.
Дакле овај образац, опет, то је исти образац као и раније, осим уместо тога
позивања променљиву н, користимо аргц.
>> Дакле, ово је итератинг преко сваког индекса у низу, и штампање сваки
елемент у том низу.
И тако, када смо покренули овај програм, па, Нисам унесете било командну линију
аргументи, тако да само отисци име програма.
Ако уђем у неку гомилу ствари, то ће принт један, сваки у свом реду.
>> У реду.
Дакле, хајде да искористим ову један корак даље.
И уместо да штампа сваки аргумент у свом реду, хајде да одштампате сваки
карактер сваког аргумента на сопственој линији.
Дакле, не заборавите да је аргв низ стрингова.
Дакле, шта је ниска, али низ знакова?
Дакле, то значи да је стварно аргв низ низа знакова.
Дакле, искористи то, хајде да игноришемо ово за сада.
Хајде да размотримо стринг аргв 0.
>> Дакле, ако желимо да донесе сваки карактер аргв 0 на својој линији, онда ја желим
да уради образац смо навикли, и је мање од дужине низа,
који овде, је стрлен од, то је не оно што ја желим да урадим, ниска
ова једнака аргв 0.
Тако да сам је мање од дужине нашег низ, који у овом случају је низ
карактера, и плус плус.
И тако, као што смо видели прошле недеље, то је идеално ако кренемо да стрлен ван
стања, јер н ће бити додати стрлен од с сваки пут идемо
кроз петљу, и то је неће да се мења.
Дакле, ми ћемо га једнак н овамо сет.
>> У реду.
Дакле, сада, ми смо преко итератинг сваки индекс у низу.
И тако, ако желимо да одштампате сваки карактер у том низу, посто је ц
застава желимо да користимо за карактере.
И сада сам носач ће бити ниска, индекс карактер сам, па ако
стринг су здраво.
онда с 0 ће бити ч, с конзола 1 ће бити Е, и тако даље.
>> Дакле, сада желимо да комбинујемо ове две ствари.
Ми желимо да одштампате сваки знак сваког аргумент командне линије.
Тако ћемо имати угнеждена за петљу.
И конвенционално, први бројач Ја се, поред ће бити ј, н
ће бити стрлен од аргв ја, ја је мања од н, ја плус плус.
И сада уместо штампања аргв И, тако аргв носач сам ће индекс -
који ће бити и-ти командне линије Аргумент, аргв И, Ј ће
бити ЈТХ карактер и-ти аргумент.
Ја ћу се отарасити ово овде сада јер смо га ставили у ту петљу.
Тако је еквивалент једнакима Стринг с аргв ја, а затим с конзола ј.
>> Па, ми не треба да се изјасни ова варијабла а.
Уместо тога, само ћемо комбиновати два у оно што смо имали, аргв И, Ј.
>> ПРЕДСЕДНИК 1: [ИНАУДИБЛЕ].
>> РОБ БОДЕН: Добра одлука.
Дакле, ово је покварен.
Ако ја то заправо водио, ми би су схватили ово.
Тако бројач ми је стало у ово посебно за
петља је ј, итератор.
Тако да би налетео на питања, вероватно бесконачан петља, ако
није фиксна то.
Зато смо и говоримо о дебуггинг данас.
>> У реду.
Па хајде да покренете овај програм.
И да заправо додати посебан принтф овде да управо ће штампати
други ред, јер то значи кад смо покренете програм, неће бити празно
линија између сваког карактера сваки аргумент командне линије.
Па, видећемо шта то значи.
Ооп.
Имам неку грешку.
Грешка имплицитно декларисање библиотека функција стрлен.
>> Дакле, да се вратим у наш програм, ја Заборавио да размотре укључују стринг.х.
Дакле стринг.х ће бити хеадер фајл који изјављује
Функција стрлен.
У реду, то саставља.
Сада, хајде да га покренете.
Дакле, само то.
То ће одштампати наш назив програма, здраво свет.
То ће одштампати сваку ствар, сваки карактер, у посебном реду.
У реду.
>> Дакле, хајде да ствари узме ово један корак даље.
И уместо да користите стринг.х, хајде размишљамо о томе како ћемо имплементирати наше
стрлен функцију.
Тако ћу одмах дати функција потпис.
Па хајде да зовемо у ми_стрлен, и то је одржаће стринг као аргумент,
и очекујемо да се врати Дужина тог низа.
Па, где је тај момак?
Да.
У реду.
Дакле, запамтите из ранијег слајда који био је такође од прошле недеље, да
низ знакова, па, ниска, па рецимо да је ово наша ниска а.
Дакле, ако с је ниска, здраво, онда, Х-е-л-Л-О, у меморији, који ће
бити, а онда ово бацксласх 0 карактер.
>> Дакле, како ћемо добити дужину с?
Па, трик је у потрази за ово бичевање 0 карактера, овај нулл
терминатор.
Дакле, алгоритам Да ли ће да буде нешто као мало
довољно карактера да -
хајде да ово рука представљају неке бројач, назовимо ову дужину инт.
Дакле, почев од овде, ми смо ће да вршите итерацију кроз наше ниске.
>> Дакле, први карактер, то је Х, и то не врати сласх 0, тако
дужина је 1.
Поновити на следећи знак, Е, па то није бацксласх 0.
Дужина је 2.
Л, 3..
Л, 4.
О, 5.
И на крају, долазимо до обрнуту косу црту 0, и тако то значи, добро,
Овај стринг се преко.
Па хајде да се врати 5.
>> Тако заправо спроводи да, прво, мој н дужина износи 0., моја десна рука.
И ми ћемо поновити -
>> ПРЕДСЕДНИК 1: [ИНАУДИБЛЕ]
>> РОБ БОДЕН: О, пуцај.
Добар избор.
Бум.
Дакле н дужина износи 0..
Дакле, сада, док дужина с не једнаки и онда, обрнута коса црта 0.
Дакле запамтите, ово обрнуту косу црту 0, то је стварни карактер, и то указује на
крај стринга.
Баш као и, такође, обрнута коса црта н је стварни карактер.
Обрнута коса црта 0 ће да укаже крај наше ниске.
Ја не желим да се стави да постоји.
И док с индексирани по дужини није једнак нулл терминатор, онда
ми ћемо само да повећате дужину.
Па онда, на крају нашег програма, Дужина је на крају ће
бити 5 у овом случају.
И само ћемо се вратити дужину.
>> У реду.
Дакле, сада овде, ја не радим уради ми_стрлен.
Хајде да га саставе да се уверите све тече глатко.
Сам радио у 2?
Или је то 1?
То би требало да уради.
У реду.
Дакле, ово је аргв 2.
Ради као очекивани, мада је да је један сам то урадио у?
Да.
У реду.
Ова верзија ствари није имао принтф нови ред после, али је
не чини никакву разлику.
У реду.
Тако је радио као што је очекивано.
>> Сада можемо чак могу комбиновати овај један корак даље, где обавештење овде, добро,
Прво, ми смо хватајући стрлен од аргв ја, а онда смо преко итератинг
сваки лик у том стрингу.
Дакле, уместо да то раде, шта ако смо само комбинују ову логику чекања
док смо погодили бацксласх 0 право у ово за петљу?
Тако поновити док аргв И, Ј не није једнако 0 бацксласх.
Дакле, хајде да прво покренути.
>> У реду.
Дакле овде, ово стање се каже -
хајде да обришете.
Па сад, нека ово буде наш аргв.
Дакле, када сам трчао тај програм пре, аргв је низ стрингова.
И тако, ако сам га покренете са дот сласх аргв 2, здраво свет, онда аргв
Сама је дужина 3, за аргв нула, здраво, и свет.
>> И унутар сваког од ових индекса је, Сам низ, где ће ово бити
тачка, то ће бити коса црта, не знам ако је то у правом смеру, ја
не мислим да је то.
-Р-В црта, потребно више простора.
Пређимо у овом низу.
-Р-В црта 0, а затим бацксласх 0.
А онда у расулу ће бити здраво.
Рецимо, Д-Е обрнуту косу црту 0.
И коначно, Ш-О обрнута коса црта 0.
>> Дакле, алгоритам који смо управо написали, угњеждене петље, за шта су они
раде је, прво морамо супротстави и и затим ј.
Ово би било лакше са кодом на екран, Хајде да се вратимо на ово.
У реду.
Тако приметити да сам је итератор који је итератинг преко сваке команде
линија аргумент.
И ј је итератор итератинг преко сваког знака у који
Аргумент командне линије.
Дакле, шта се ради ово најдубљи принтф је, ми смо принтф аргв 0 0, принтф
аргв 0 1, иф аргв 0 2, 0 3, 4 0, 0 5, 6 0, али сада, аргв 0 7 ће
једнак 0 бацксласх.
>> Онда смо изашли да за петљу, и сада сам Примењује се 1.
А сада идемо у штампи аргв 1 0, аргв 1 1 -
па, сад, пошто сам кратко исећи здраво, аргв 1 2 поново ће бити
бацксласх 0.
И тако, ја и повећавати наставе, и тако даље, све док се одштампати све
свет, а то су три командне линије аргументи, а ми ћемо изађете из
спољни петља, и завршимо наш програм.
У реду.
>> Па хајде да се врати овде.
Тако ћете добити мало упознати са аргументи командне линије на ово
Посебан проблем сет.
>> Сада, отклањање грешака.
Дакле, вероватно сте већ морали да ураде неки отклањање грешака са ваш претходни
Проблем сет.
И један врло једноставан начин отклањање грешака, Прво, хајде да погледамо бугги програма.
Па, шетњу кроз овај програм, ћемо да пита корисника за
цео, зграби тај цео број, а затим, произвољно, имамо вхиле који
је само да декрементирати И док је једнак 10.
Хајде да претпоставимо да улазим цео број већи од 10..
Дакле декрементирати сам док је једнак 10.
>> И онда имамо још једну вхиле да, док сам није једнако 0, ми смо
ја ћу декрементирати са 3..
Дакле, ако видите намеру буг овде, то је да ће ово декрементирати сам да
бити 10, а онда то док петља воља Смањи и од 10, до 7, до 4, до 1,
на негативан 2, на негативан 5, и тако даље, до негативног бесконачности, јер сам ће
никада заправо једнака 0.
И онда на крају овог програма, имамо фоо функцију која је
дешава штампи да сам.
>> Дакле, ово је кратак и тривијално програма, а буба је очигледан,
поготово након што сам управо рекао шта је била грешка.
Али намера овде је, добро, ово можда заправо изгледају као неки од ваших
решења из похлепни од прошле Проблем сет, а можда немате
неки бесконачна петља у вашем програму, а ви немате појма
шта је узрок.
Дакле, веома корисна за отклањање грешака техника је да се само додати принтфс
свуда кода.
>> Дакле, овде желим принтф напољу прво док петља.
И овде желим принтф, и ја ћу одштампати и.
Чак ћу урадити први док петља, ја.
Напољу, док други петља.
Још једном, принт унутра одавде, вредност ја.
И хајде да покренете ово.
>> Дакле, тачка коса црта дебуг.
Унесите цео број.
Хајде да урадимо 13.
И бум.
Ми видимо да смо бесконачно петље унутар другог вхиле.
Дакле, сада знамо шта је буба.
Али иф отклањање грешака је савршено сјајно, али када ваши програми се
дужи и компликованији, постоје више софистициране решења
узимајући ствари раде.
Дакле, хајде да уклонимо све те принтфс.
И хајде да се уверите да нисам бреак ништа.
У реду.
>> Дакле, програм ћемо да се уведе се зове
ГДБ, за ГНУ Дебуггер.
Па, у ствари, хајде да уклоните дебуг за други, и да поново дебуг.
Па, у ствари прво, добра лекција у аргументе командне линије.
Обратите пажњу да је ово Цланг команда која је састављање све се прошло
у командној линији, ови аргументе командне линије.
Дакле, тачно како ћете да користите аргументи командне линије, као што смо
урадио пре, а како ћете у псет 2, тако Цланг их користи.
>> Дакле, приметите да је ово прва застава, црта ггдб3, шта да је рекао, Цланг,
требало би да саставе овај фајл са намера да се на крају ће
треба да га дебуг.
Дакле, докле год имате ту заставу, онда можемо гдб дебуг.
И то ће отворити ГНУ Дебуггер.
>> Дакле, постоји много команди да треба да се навикнете на.
Прво онај који ћете вероватно одмах треба је Покрени.
Дакле, шта је Покрени да уради?
То ће почети наш програм.
Дакле покренете, полазећи програм, програм пита нас за цео број, 13.
И онда је то бесконачно петље као Очекује, осим сам уклонио
принтфс, тако да чак и не видим то.
Изашао нормално.
О.
Могуће је да је то све увијено обрнуто, назад на - игнорисање то.
Претпоставимо да није нормално изашли.
Ту је компликован одговор на то.
>> Тако сада, то није веома корисно.
Дакле, само ради свој програм унутар то дебагер не помаже нам ни у једном
начин, јер смо могли обавити дот сласх дебуг споља ГДБ.
Дакле, једна команда која Вероватно ћете -
и ја ћу престати ово.
Контрола-Д или отказ, обоје раде.
Дакле, хајде да отворимо поново.
>> Друга команда да ћете вероватно одмах желе да
навикнути на е Пауза.
Тако ћемо прекинути главни за сада, а онда ћу објаснити то.
Па, овде видимо поставимо тачку прекида на овој линији у дебуг.ц.
Дакле, шта је то пауза значи када сам откуцајте рун, програм ће
наставити са радом до Ја ударио тачку прекида.
Дакле, када сам ударио рун, програм почиње, а онда се разбија чим њега
улази у основну функцију.
Бреак главни ће бити нешто ви прилично обично урадите.
>> А сада, да вас упознам да још неких команди.
Приметимо овде, да ми каже прекинуо ред 11, која је
иф, унесите цео број.
Дакле, команда Следећа ће бити како идемо на следећу линију кода.
Ово ће нам омогућити да корак кроз наш програм линију по линију.
Дакле, следећи.
>> Сада линија 12, идемо да се цео број.
Даље.
А ако сте управо ударио опет Ентер, то ће редо последња ствар сте урадили.
Тако да не треба да се упишете следећи сваки пут.
Дакле, унесите цео број, 13.
Па сад, линија 14, а ја је већа од 10, а ја ћу учинити следећи.
И видимо да ћемо ја декрементирати.
Тако ћемо опет декрементирати.
>> Тако сада, још један користан команда је Принт.
Дакле Штампа ће да одштампате вредност променљиве.
Хајде да изведеш вредност променљиве и.
Хајде да одштампате и.
То ће рећи да је 11.
Сада смо поново Следећа док и је већи од 10.
Дакле, ја и даље је већи од 10, пошто је 11.
И минус минус.
Хајде опет да штампам.
Као што се очекивало, што је 10.
>> Тако да сада, поред.
То да се вратим у стање, и је већи од 10, али ја је сада 10, па
није већа од 10, тако да очекујемо је да падне ван вхиле петље.
И сад смо испод те линије кода.
И још једна команда, листа, је само иде да бисте приказали претходну и следећу
пар линија кода, у случају да се изгубио.
Дакле, ми смо само изашао овај вхиле, а сада смо ушли ово
док петља, линија 18.
Дакле, док сам није једнако 0.
И, поред, ја једнако И минус 3, а ми ћемо приметити, ово ће само наставите.
И можемо да штампам.
>> Свака команда врста има пречице.
Дакле, п је кратак за штампу.
Дакле, можемо п и.
Само настави да држи н, или наставим да радим на Нект.
Штампање сам поново.
Сада видим да је то негативан 167.
Тако ће ово трајати заувек, али не стварно заувек, јер сте управо видели, она
ће заправо завршити у неком тренутку.
>> Тако да је Почев ГДБ.
Али, хајде да урадимо још једну ствар у ГДБ.
Ух, дебуг.
Дакле, у овом конкретном случају, бесконачна петља се десило да се унутар
главна функција.
А за сада, само прихватите да је сам прећи бесконачну петљу у
трла функција.
Само запамтите да, на крају овог Програм, добро, то је било првобитно
позивајући фоо, који је управо ће да штампам.
Али сада смо зове фоо, који је ће декрементирати И док је 0, и
затим одштампате ту променљиву.
У реду.
Сачувај то.
Маке дебуг.
А сада, гдб дебуг.
У реду.
>> Дакле, ако сам Покрени онда нећу да бити у стању да заправо корак кроз мој
програм линија-по-линија.
Па хајде да се пробије на главни, а затим откуцајте рун.
Тако пролазе кроз ово, иф, унесите цео број, добити цео број, 13.
Тако ћемо задржати децрементинг док сам је већи од 10.
Онда ћемо пасти кроз док петља, и доћи до линије -
хајде да отворимо у посебном прозору.
Тако смо умањен док сам била више већи од 10, а онда
зове функцију, трла.
>> Дакле, шта се десило чим сам ударио Функција трла, добро, позвао сам фоо, и
онда ја више нисам имао контролу над ГДБ.
Дакле, чим сам ударио Даље на овој линији, ствари наставио док ово десило,
где програм изашао када -
Претпостављам да није на крају постоји.
Видели сте га паузирате за мало ипак.
Па зашто сам изгубити контролу над Програм у том тренутку?
Па, када сам упишите следећи, да иде на буквално следећа линија кода који
ће извршити.
Дакле, после 21 линија, следећа линија кода који ће извршити је линија 22,
која је, од изласка главни.
Дакле, ја не желим да идем само на следећу линију кода.
Желим да идем у функцију, фоо, а затим и корак кроз
те линије кода.
>> Дакле, за то, имамо алтернативу.
Идемо опет да отказ.
Бреак главни.
Ух, 1, следећи, следећи, 13, следећи, следећи, следећи, пажљиво,
пре него што погодио линију фоо.
У реду.
>> Дакле, сада, ми смо на линији 21, где ми зовемо фоо.
Ми не желимо да откуцате следећу, јер то ће само позвати функцију фоо, и
идите на следећу линију кода.
Оно што желимо да користимо је корак.
Дакле, постоји разлика између кораку и Даље, где корак кораке у
функционишу, и иде Следеци преко функцију.
То само извршава целину функција и тако наставља.
>> Дакле, корак ће нам донети у функцији, трла.
А ми овде видимо, сада, вратили смо се на ово док петља то је, у теорији,
ће заувек наставити.
А ако ударио корак, када то није чак ни функција за позивање, онда је то
идентичан Нект.
Дакле, то је само кад си на линији која позива функцију том кораку
ће се разликовати од Нект.
Дакле, корак ће нам донети овде.
Корак, корак, корак, корак, корак, корак, и ћемо само бесконачна петља заувек.
>> Дакле, можда ћете се навићи на то како ваше начин идентификовања бесконачне петље, је
Само држи овај тастер Ентер да види где ти се заглави.
Постоје бољи начини да се то уради, али за сада, то је савршено довољан.
И стилски, да у складу са стилом 50, требало да уради ово.
У реду.
>> Дакле, једна задња команда да се уведе.
Па, хајде да гдб дебуг ин
Дакле, уместо разбијање на главни, ако ја знате фоо функцију је такође
Проблем, онда бих могао да имам само рекао је, пауза у ФОО, уместо тога.
Рецимо да се пробије у и главни и трла.
Дакле, можете да подесите онолико тачака прекида колико желите.
Када укуцам рун, то ће да се заустави на -
ох, хајде да компајлирате, пошто Променио сам ствари.
Видећете ову линију, упозорење, извор датотека је новија од извршне.
Дакле, то значи да сам отишао у ту и променио ово да одговара стилу
50, али нисам рекомпајлирате Програм.
Дакле ГДБ ме чини свесни тога.
Ја ћу одустати, направити поново дебуг, ударио гдб дебуг.
У реду.
>> Тако сада, назад на оно што сам радио.
Бреак главни, брејк фоо.
Сада ако покренете програм, тако да је ће се наставити све док хитс
Бреакпоинт.
То се дешава на Бреакпоинт бити први у главни.
Сада, уместо да ради следећи, следећи, следећи, следећи, следећи, док сам ударио фоо, ја
да упишете наставити, што ће наставити док не удари следећи прекида.
Морам прво да унесете цео број.
Наставити ће се наставити све док сам погодио поред тачка прекида, а то је да
функција ФОО.
>> Дакле Покрени ће покренути док не удари тачка прекида, али ви само куцате рун када
ви стартовања програма, а затим, од тада, то је и даље.
Ако сам само урадио сломити главни и тада водио, то ће разбити у
Главни, а затим наставите.
Пошто ја немам брејк у ФОО, унесите цео број, онда сада сам
неће сломити на ФОО.
То само иде на бескрајни петља док то.
У реду.
>> Дакле, то је Увод у ГДБ.
Требало би да почнете да га користите у својим проблематичним сетовима.
То може бити веома корисно да се идентификују грешке.
Ако сте заиста само, линија-по-линија, иди кроз свој код, и упоредите шта је
заправо дешава са оним што сте очекивали да се деси, онда је то прилично
тешко да пропустите своје грешке.
У реду.
>> Тако је прошле недеље Дејвид извео ово тајни кључ-криптографија ствари за
Први пут, где ми не желимо Лозинке само да се складишти на нашој
компјутер у неком обичном текстуалном фајлу, где неко може доћи и само
отворите га и читати их.
У идеалном случају, они ће бити шифрована на неки начин.
И у Проблем Сет 2, бићете посла са једним методом шифровања,
или, и, два метода, али они нису толико велики.
Ако то урадите хакера издање, ти си такође ће се бавити
дешифровање неке ствари.
>> Дакле, питање је сад, па, чак и ако имамо најјачу енкрипцију
алгоритам у свету, ако се одлучите Посебно лоша лозинка, онда је то
неће вам много помоћи, јер људи ће и даље бити у могућности да га схватим.
Чак и ако види шифровану стринг и изгледа као неред смећа
то ништа не значи за њих, ако они још само треба да испробате неколико лозинки
да га схватим, онда нису баш сигурна.
Дакле, гледате видео који чини ту тачку.
>> [ВИДЕО РЕПРОДУКЦИЈА]
>> -Шлем, ти манијак.
Шта се дешава?
Шта радиш са мојом ћерком?
>> -Дозволите ми да представим бриљантан млада пластични хирург, др Филип
Сцхлоткин, највећи нос човек посао у целокупном
Универсе, и Беверли Хилс.
>> -Ваше височанство.
>> -Носе посао?
Не разумем.
Већ је имао нос.
То је слатко шеснаест поклон.
>> -Не.
То није оно што мислите.
То је много, много горе.
Ако ми не дају комбинацију за ваздух штит, Др Сцхлоткин ће
дати своју кћер натраг свој стари нос.
>> -Не.
Одакле ти то?
>> -У реду.
Ја ћу рећи.
Не, тата.
Не, не смете.
>> -У праву си, драга моја.
Ја ћу пропустити свој нови нос.
Али нећу му рећи комбинацију, без обзира на све.
>> -Врло добро.
Др Сцхлоткин, урадите ваш најгори.
>> -Било ми је задовољство.
>> [Средства која се заоштрила]
>> -Не.
Чекај.
Ја ћу рећи.
>> -Знао сам да ће радити.
У реду.
Дај ми га.
>> -Комбинација је једна.
>> -Један.
>> -Два.
>> -Три.
>> -Четири.
>> -Пет.
>> -Дакле, комбинација је један, два, три, четири, пет.
То је најглупља комбинација Сам икада чуо у животу.
То је врста ствари идиот ће имати на свом пртљагу.
>> -Хвала, ваша висости.
>> -Шта си урадио?
>> -Ја искључио зид.
>> -Не ниси.
Окренуо си ван цео филм.
>> -Мора да сам притиснуо погрешно дугме.
>> -Па, вратите га на.
Ставите филм назад на.
>> -Да, господине.
Да, господине.
>> -Идемо, Арнолд.
Дођи, Гретцхен.
Наравно, ти знаш да ћу увек да ти рачун за ово.
>> [КРАЈ ВИДЕО РЕПРОДУКЦИЈА]
>> РОБ БОДЕН: У реду.
Дакле, сада смо већ говоримо о безбедност на неки начин, лепо
мали филм плакат, па у недавном дана, ова питања са НСА
праћење све.
То може бити тешко да се осећају као ти имају неку врсту приватности у
онлајн свет, иако нисам могао да кажем Ви већину детаља призме.
Дакле, креће изнад ПРИЗМУ, не идемо да се говори о томе, сада
размислите о вашем лаптопу.
Дакле овде, желим да се пребаците у мом стварном рачуну,
са мојим малим пингвина.
Дакле, имам сет лозинку, и да лозинка је све што желим да буде.
>> Али запамтите да оно што ја логовање у са, тако да је ово пријава
брз, је неки програм.
То је неки програм који је написао неке особе.
И тако, та особа, ако су нарочито злонамерни, они могу
су рекли, у реду, па ако лозинка да унесем једнака мој
стварна лозинка, или је једнака на неки посебан лозинку -
Дејвид је супер или нешто -
онда их пусти унутра
Дакле, злонамерни програмер могао имати приступ свим вашим Мац, или
Прозори, или било шта.
>> Дакле, то није неки забринутост, јер, Мислим, ово је пријаву програма
који је испоручен са ОС Кс, стотине или хиљаде људи имају
прегледао овај код.
И тако, ако, у вашем коду негде, ви кажу да ако ово ниска једнака екуалс
Давид је страшан, пријава, онда је неко ће бити, као, чекај.
Ово није у реду.
Ово не би требало да буде овде.
Дакле, то је један од начина да се ствари да се некако сигурна.
>> Али размислите чак програмима да пишете.
Рецимо да сте писали пријаву програма.
Дакле, ово пријављивање програм који сте написали, тако очигледно, ти си добар
програмер.
Нећеш да се стави било који злонамерни ако к једнака једнака Дејвид је страшан
у свом коду.
Али овај програм, шта радите користе за састављање овај програм?
Нешто као јека.
Па шта ако је особа која је се десило писати цланг посебним цасед у звека
нешто слично, ако сам састављању логин програм, а затим унесите овај код
у програм за пријављивање да каже, ако к једнако једнако Дејвид је страва?
Дакле, још увек није сасвим, али имамо исти издаје овде, где Цланг, добро,
хиљаде, ако не и десетине хиљада људи, су гледали звека, имају
погледао својих редова кода и рекао, све у реду, нема ништа лоше овде.
Очигледно, нико не ради ништа ово злонамеран.
>> Али оно што је сама звека, као, шта ако сам саставити звека?
Шта ако имам неки компајлер који саставља цланг да убацује у звека
овај посебан хацк то каже, у реду, када сам саставити звека, онда
извршна сам се требало посебно погледати унутар програма и пријављивања уметком
ова лозинка, једнако екуалс Дејв је страшан?
Дакле, не заборавите да је ваш компајлер сама треба да буде израђен у неком тренутку.
Дакле, ако се одлучите шта да састави звека са, сама је злонамеран, онда
могла бити пијан цео начин низ линију.
>> Дакле, овде имамо Кен Тхомпсон и Деннис Ритцхие.
Дакле, ово је икона слика.
Денис Ричи је на десној страни.
Он је велики -
прилично је написао Ц. Тако можете хвала му за ову класу.
Кен Томсон је на левој страни.
Двојица од њих у основи је написао УНИКС.
Па, они су били главни учесници у УНИКС.
Било је неких других.
Дакле Кен Томпсон, у неком тренутку, осваја награду Туринг.
И награда Тјуринг, увек сам чуо то упућује на овај начин, то је
Нобелова награда за компјутерске науке.
>> Дакле, на Туринговом награду, он мора да дати свом говору.
И он даје овом веома познати говор Сада, под називом Размишљања о верујући
Поверење, које смо повезани Да бисте на сајту курса.
И у овом говору, каже он, у реду, па сам написао УНИКС, а сада све
ти људи користе УНИКС.
Сада, запамтите данас да је Линук директан потомак УНИКС.
ОС Кс директно користи УНИКС.
Виндовс не толико, али много идеја је узета из УНИКС.
>> Дакле, он иде на бину и каже: У реду, ја написао УНИКС.
И само тако момци знају, ја сам могућности да се пријавите у сваки
ниједан од ваших рачунара.
Пошто сам ставио једну од ових специјалних ако је к једнак једнак Кен Томсон је супер,
онда ми је дозвољено да се пријавите.
Дакле, људи су као, добро, Како си то урадио?
Гледали смо на логин програма и ништа је тамо.
Он је као, добро, ја модификовани компајлер да се пријавиш за пријављивање програма
тако да пријављивање програма сада ће имати да је к једнако једнако Кен Тхомпсон
је супер.
>> И они кажу, добро, то није истина.
Гледамо у компајлера, и компајлер нема линије
код тако.
Он је као, у реду, али шта си ти састављања компајлер са?
И они мисле, и он је, као, добро, Ја сам тај који ти је дао компајлер
користите да састави компајлер, тако ви састављању компајлер, који
Сама је злонамерни, и да ће сломити пријављивање програма.
Дакле, у основи, у том тренутку, ту је постоји начин можете да погледате на извору
шифра за пријављивање програма да види шта није у реду.
Ниси могао ни гледати у изворни код компајлера
да види шта није у реду.
>> Ви би требало да погледате на машини код, стварна бинарни од
саставио компајлер да види, чекај, ови линија кода не би требало да буде овде.
Али Кен Томпсон га је један корак даље и рекао, добро, постоје
ови посебни програми који заправо да вам помогне да прочитате бинарну програма,
па ако неко користи тај програм за прочитајте бинарну, видели би они
линија кода.
Он је модификован оне програме да кажу, све право, ако сте у потрази на
компајлер, не показују овај сет бинарни.
>> Дакле, онда морате да се то корак даље и у основи, да би могао имати
узети више нивоа индиректности, и у неком тренутку, нико је заправо
ће бити провере.
Тако Поука приче је, ти си неће писати
Цланг у овој класи.
Идеш да се користи пењање Цланг много у овој класи.
За све што знате, Цланг је злонамерни програм који се саботира сваки
један програм који сте икада саставили.
И да те оставим на то врло злокобно уму, видимо се у среду.
>> [Апплаусе]
>> ПРЕДСЕДНИК 2: На следећем ЦС50.
>> ПРЕДСЕДНИК 3: Да се ​​ниси усудио рећи да.
То можете да урадите.
Урадио си ово раније, можете да урадите данас, ви можете да урадите сутра.
Ви сте то радили годинама.
Само иди тамо и уради то.
То можете да урадите.
>> [Музика свира]