>> [MUZIKO Ludanta]
>> ROB Boden: Bone.
Do, unua afero unue, de video el familiara vizaĝo.
>> [VIDEO reprodukto]
>> -Bone.
Ĉi tio estas CS50, kaj ĉi tiu estas la komencon de semajno tri.
Mi bedaŭras, mi ne povis esti tie kun vi hodiaŭ, sed permesu al mi prezenti
CS50 propra Rob Boden.
>> [FINO VIDEO reprodukto]
>> [Aplaŭdo kaj gaja]
>> ROB Boden: La filmografía en ke la video estas fantazia.
Ĉiuj pravas.
Do unue, estas alia tagmanĝo.
Ĝi estas morgaŭ je 1:15.
Mankas tagmanĝo tiun vendredon.
Estas kun Quora.
Kaj Tommy ne ĉi tie ankoraŭ, sed unu el la homoj estas eksa estro CF,
Tommy McWilliam.
Li do estas amuza ulo.
Vi venu.
>> Ĉiuj pravas.
Do la lasta semajno, ni komencis rompi aparte pri kio ŝnuro vere estas.
Ni sciis ekde la komenco, ke ĝi estas vico de signoj.
Sed lastan semajnon, ni enprofundiĝis en la fakto ke kio vere estas vico de
karakterojn, bone, ni nun havas arrays de karakteroj.
Kaj ni scias, ke kordoj, ĝi estas tabelo de karakteroj, ke je la fino,
ni havas tiun specialan nulan bajto, tio backslash 0, kiu indikas la finon de
la kordo.
>> Kaj tia ĉeno estas tabelo de karakterojn, sed ni povas havi pli ol
nur tabelo de signoj, ni povas havi tabelon de iu ajn
tipo de afero, kiun ni volas.
Do, se vi memoras de lasta semajno, la Epokoj programo kiun David enkondukis
vere rapide.
Do unue ni tuj faros estas demandu al la uzanto por entjero, la
nombro de homoj en la ĉambro.
Iam ni havi tiun entjero, ni deklari tabelon.
Rimarku ĉi krampo sintakso.
Vi tuj kutimiĝi al tio.
>> Do ni deklari tabelon de entjeroj nomas aĝoj, kaj tie estas n
entjeroj en tiu tabelo.
Do tiu modelo, ĝuste ĉi tie, ĉi 4 int i egalas 0, i estas malpli ol n, i pli
alpago, kiu estas ankaŭ tuj estos mastron ke vi akiras tre uzata por.
Ĉar tio estas sufiĉe multe kiel vi estas irante ĉiam persisti super arrays.
Do memoru, ke n estas la longeco de nia tabelo.
Kaj do tie, ni ree demandas cxar la aĝon de persono i en la ĉambron.
>> Post ĉi tiu, ni iru malsupren, kaj por kio ajn arbitran kialo, ni do
presi Kian aĝon ili iras esti jaro de nun.
Kaj kurinte tiu programo, ni fari aĝoj, dot oblikvo aĝoj.
Do nombro de homoj en la ĉambron, diru tie estas tri.
Kaj diru, la unua persono estas 13, sekvanta estas 26, kaj la lasta estas 30.
Tial do tio devos persisti super tiuj tri homoj, presi 14, 27, kaj 31.
>> Do memoru, ke kiam ni deklaru tabelo de amplekso n, la indeksoj en tiu
tabelo, la tabelo havas valorojn kaj indeksoj 0, 1, 2, la tuta vojo
ĝis n minus 1.
Do kiam ni diris tie estis tri personoj en la ĉambro, kaj ni metu tien
la unua ripeto tra tiu buklo, i tuj esti 0.
Do en indekso 0.
Ni atribuante la unua kadukiĝi la uzanto eniras.
Tiam en la sekva, ni eniras la dua n la uzanto eniras, kaj en
apud du, la lasta n.
>> Do rimarkos ke tabelo de grandeco tri havas nenion
en la indekso la tri.
Tiu ne estas valida.
Ĉiuj pravas.
Do, irante reen tie.
Do nun, ke ni jam pritraktis sensilo, Ni havas kelkajn familiareco.
Nun ni tuj pluiri al komando linio argumentoj, kiuj estas tuj estos
bela rilatajn al tiu problemo aro.
>> Do ĝis nun, kiam vi havas deklaris via ĉefa funkcio, ni
diris int ĉefa malplenon.
Do malplenon simple signifas, ke ni ne pasante ajna
argumentojn por tiu funkcio.
Nun ni iras, por vidi ke la ĉefaj povas preni kelkajn argumentojn.
Jen ni nomas ilin int argc kaj ŝnuro argv krampoj.
La krampoj, refoje, indikante kiuj ni estas kontraktanta kun arrays.
Do jen, kordo argv krampoj, ni estas kontraktanta kun tabelo de kordoj.
Do argc, ke tuj indikos kiom da argumentoj ni
pasis al tiu programo.
Kaj vidi kion tio signifas, ni fermu.
>> OK.
Do ĝis nun, ni kuros ĉiu programo kiel skalara oblikvo aĝoj.
Ni povas ankaux, en la komandlinio, preter pasi argumentoj, tial la termino, ordono
linio argumentoj.
Do la unua argumento, saluton mondo.
Do jen, argc estus tri.
Ĝi estas la grafo de la argumentoj ĉe la komandlinio.
Argc estas ĉiam almenaŭ 1, ekde punkto oblikvo aĝoj, mem, rakontas kiel unu el
la komandlinio argumentoj.
>> Tiam saluton estas la unua.
Se skalara oblikvo aĝoj estas la nula, tiam saluton estas la unua, kaj la mondo estas la
dua komandlinia argumento.
Do la kordo argv, ni tuj vidos, Enhavas la kordoj, skalara oblikvo
aĝoj, saluton, kaj la mondo.
Kaj, per Davido peto, ni iras ludi video enkonduki tion.
>> [VIDEO reprodukto]
>> -Ĝis nun en programoj ni skribita, ni deklarus
ĉefa, kiel int ĉefa malplenon.
Kaj cxi tiu tuta tempo, tiu malplena havas simple estis preciziganta ke la
programo ne preni ajnan komandlinia argumentoj.
En aliaj vortoj, kiam uzanto kuras programon, li aŭ ŝi povas havigi komando
linio argumentoj por skribi aldonan vortoj aŭ frazoj post la programo
nomumi ĉe la prompto.
>> Nu, se vi ĉu vi volas, ke via programo por preni komandlinia argumentojn, unu aŭ
pli tiaj vortoj, ni devas anstataŭi vanigas kun paro da argumentoj.
Do ni faru tion.
Inkluzivi CS50.h.
Inkluzivi normo io.h.
Int main.
Kaj nun, anstataŭ malplenon, mi tuj specifi int nomata argc, kaj
tabelo de kordoj nomata argv.
Nun, argc kaj argv estas simple konvencioj.
>> Ni povis esti nomata tiuj argumentoj plej ion ni volas.
Sed kio gravas estas ke argc estas an int ĉar, laŭ difino, ĝi estas
tuj enhavos la argumento grafo, la nombro de vortoj en entute, ke la
uzanto tajpita en lia aŭ ŝia prompto.
argv, dume, argumento vektoro, estas tuj reale esti tabelo stokante
ĉiuj vortoj, kiujn la uzanto havas tajpitaj en lia aŭ ŝia prompto.
>> Ni plue agos ion nun kun unu aŭ pli el tiuj
komandlinia argumentoj.
En aparta, ni iru antaŭen kaj printi kion ajn vorto la uzanto tajpas
post la programon La nomo ĉe la prompto.
Malferma krampo.
Fermu krampo.
Printf procento s backslash kaj komo.
Kaj nun mi bezonas rakonti al printf kio valoro ŝtopi en tiun lokokupilo.
Mi volas la unua vorto, ke la uzanto havas tajpitaj post la programo la nomo
kaj do mi tuj specifi argv krampo 1, proksime
parentezo, punktokomo.
>> Nu, kial krampo 1 kaj ne krampo 0?
Nu, tio rezultas, aŭtomate stokitaj en argv 0 tuj estos la
programo realan nomon.
Do la unua vorto, ke la uzanto tajpas post la programon La nomo estas, por
kongreso, tuj estos stokita en argv 1.
Ni nun kompili kaj kuros ĉi programo.
>> Faru argv 0, skalara oblikvo argv 0.
Kaj nun unu vorton kiel saluton.
Eniru.
Kaj tie ni havas ĝin, saluton.
>> [FINO VIDEO reprodukto]
>> ROB Boden: Bone.
Fermu tio.
Do prenante rigardon al tiu programo kiu ni ĵus enkondukis nin, bone, nur
por montri, se ni presi argv 0, fari, nun kio ĝi estas, argv 0, skalara oblikvo argv 0.
Do, kiel atendita, ĝi estas la impreso el la nomo de la programo, ĉar argv 0 estas
ĉiam tuj estos la nomo de la programo.
Sed ni faru ion pli mordis pli interesa.
>> Do la problemo aro, vi estos prezentis al tiu funkcio, atoi.
Do kion ni uzas atoi por?
Tio okazas por konverti ŝnuro al entjero.
Do se mi pasas la kordoj, unu du tri, al atoi, kiuj devos konverti ke
al la entjero, unu du tri.
Do ni tuj konverti la unua komandlinia argumento por entjero,
kaj tiam ĝuste presi ke entjero.
>> Do esence, ni estas speco de reimplementing getint, nur la
entjero estas eniris en la komando linio anstataŭ en la programo
interage.
Tial do, farante argv 0, ni faru ĝin en ĉi tie, kaj fermos, ke.
Do kurante argv 0, kaj ni eniros en la entjero, unu du tri kvar unu du.
Do tio devos presi la entjero, unu du tri kvar unu du.
Estas iuj subtilaĵoj al atoi ke ĝi ĉesos zorgi pri io
preter valida numera karaktero, sed tio ne gravas.
>> Do, kion vi opinias okazas se mi faras tion?
Segmentación kulpo.
Do kial estas tio?
Se vi retrorigardas al nia programo, ni estas konvertanta argv 1, la unua argumento
post la programon nomon, por entjero.
Sed ne estas argumento pasis post la programo nomo.
Do jen, ni vidas, ke tiu estas kalesxo programo, ekde, se ni provas ruli ĝin
sen ajna argumentoj, tio estos nur frakasi.
>> Do alia komuna modelo, vi vidos Estas io kiel, se argc estas malpli
ol du, indikante ke ne estis almenaŭ la programo nomon kaj
unua argumento, tiam ni faros ion kiel printf, ne sufiĉas
komandlinia argumentoj.
Tio verŝajne ne estas bona por presi, ĝi estas probable io, kiel
vi devus entajpi entjeron ĉe la komandlinio.
Mi nur finos ĝin tie.
Kaj tiam revenu 1.
Do memoru, ke je la fino de nia programon, se ni revenos 0, ke ia
indikas sukceson.
Kaj ĉefa ankaŭ aŭtomate Revenas 0 se vi ne faras.
>> Do jen, ni retuning 1 indiki ke tio ne estas sukceso.
Kaj vi povas reveni, kion ajn vi volas, ĝuste, 0 indikas sukceson, kaj
io alia indikas fiaskon.
Do ni kuros ĉi versio de la aferoj.
Do nun, se ni ne enigi komandlinion argumento, gxi devos korekte diri
ni, ne sufiĉas komandlinio.
Ne finis la frazon.
Alie, se ni vere pasi ĝin unu, ĝi povas kompletigi la programon.
Do jen kiel vi uzus argc en Por validigi la nombro de
komandlinia argumentojn ke efektive pasis.
>> Do ni faru ĉi programo iom pli komplika, kaj rigardu la duan
ripeto de la aferoj.
Do nun, ni ne nur presi la unua komandlinia argumento.
Tie, ni ripetanta de int i egaluloj 0, i estas malpli ol argc, i pli
plus, kaj impreso argv, indekso i.
Do ĉi tiu ŝablono, denove, ĉi tiu estas la sama mastro kiel antaŭe, escepte anstataŭ
nomi la variablo n, ni uzas argc.
>> Do tiu estas ripetanta super ĉiu indekso en la tabelo, kaj presi ĉiu
elemento en tiu tabelo.
Kaj cxiufoje, kiam ni kuros ĉi programo, bone, Mi ne eniris ajnan komandlinia
argumentoj, do ĝi apenaŭ printaĵoj la programo nomo.
Se mi eniras faskon da aferoj, tio timige presi, ĉiu sur ĝia propra linio.
>> OK.
Do ni prenu plupaŝi.
Kaj anstataŭ presi ĉiun argumenton sur ĝia propra linio, ni presas ĉiu
karakteron de ĉiu argumento sur ĝia propra linio.
Do memoru, ke argv estas tabelo de kordoj.
Do kio estas ĉeno, sed tabelo de signoj?
Do tio signifas ke argv estas vere tabelo de tabelo de signoj.
Do utiligante ke, ni ignoras tion por nun.
Ni nur konsideri la kordo argv 0.
>> Do, se ni volas alporti ĉiu karaktero de argv 0 sur ĝia propra linio, tiam mi deziras
fari la ŝablono ni kutimis, i estas malpli ol la longo de la tabelo,
kiun ĉi tie, estas strlen de, tio estas ne estas kion mi volas fari, kordo
s egalas argv 0.
Do i estas malpli ol la longo de nia tabelo, kiu en ĉi tiu kazo estas tabelo
de karakteroj, i plus plus.
Kaj tiel, kiel ni vidis, pasintsemajne, estas idealo se ni movas ke strlen ekstere
de la kondiĉo, ekde n estos esti aldono la strlen de s ĉiu tempo ni iru
tra la ciklo, kaj ĝi estas ne tuj estos ŝanĝanta.
Do ni starigis ĝin egala al n ĉi tie.
>> OK.
Do nun, ni ripetanta super ĉiu indekso en la tabelo.
Kaj do, se ni deziras presi ĉiu karakteron en tiu tabelo, procento c estas
la flago oni volas uzi por gravuloj.
Kaj nun harpinglo i tuj estos la kordo, indekso karaktero i, do se la
kordo estis saluton.
Tiam S 0 tuj estos h, s krampo 1 estos e, kaj tiel plu.
>> Do nun ni volas kombini ĉi tiuj du aferoj.
Ni volas presi ĉiu karaktero de ĉiu komandlinia argumento.
Do ni tuj havos a nestitaj por buklo.
Kaj konvencie, la unua nombrilo Estas mi, la sekvanta tuj estos j, n
Estos la strlen de argv i, i estas malpli ol n, i plus plus.
Kaj nun, anstataŭ presi argv i, tiel argv krampo i tuj indekso -
ke tuj estos la i-a komandlinia argumento, argv i, j tuj
esti la jth karakteron de la i-a argumento.
Mi liveras de ĉi tien nun ĉar ni metis ĝin en tiun cirklon.
Do estas ekvivalento al kordo s egaluloj argv i, kaj tiam s krampo j.
>> Nu, ni ne bezonas por deklari ĉi variablo s.
Anstataŭe, ni nur kombini tiujn du en kio ni havis, argv i, j.
>> SPEAKER 1: [inaudibles].
>> ROB Boden: Bonan alvokon.
Do tiu estas rompita.
Se mi efektive kuris, ni farus rimarkis tion.
Do la nombrilo mi zorgas pri en tiu aparta por
buklo estas J, la iterator.
Do vi estus kolizii temoj, verŝajne malfinia ciklo, se ni
ne estis fiksita, ke.
Tial ni ankaux parolas pri elpurigi hodiaŭ.
>> OK.
Do ni kuros ĉi programo.
Kaj ni efektive aldonu apartan printf ĝuste ĉi tie, ke estos ĝuste presi
alia linio, ĉar tio signifas, kiam ni ruli la programon, tie estos malplenan
linio inter ĉiu karaktero de ĉiu komandlinia argumento.
Nu, ni vidos kion tio signifas.
OOP.
Got iun cimon.
Eraro implice deklarante biblioteko funkcio strlen.
>> Do reiri al nia programo, mi forgesis hash inkluzivi string.h.
Do string.h tuj estos la kaplinio dosiero kiu deklaras
la funkcio strlen.
OK, kompilas.
Nun, ni ruli ĝin.
Do ĝuste tion.
Ĝi tuj presi nian programo nomo, saluton mondo.
Ĝi tuj presi ĉiu aĵo, ĉiu karaktero, en lia propra linio.
OK.
>> Do ni reale preni ĉi unu paŝon plu.
Kaj anstataŭ uzi string.h, ni pensu pri kiel ni volus realigi nian propran
strlen funkcio.
Do mi devos tuj donu funkcio subskribon.
Do ni nomas en my_strlen, kaj ĝi estas tuj prenos kordo kiel argumento,
kaj ni atendas por reveni al la longeco de tiu ĉeno.
Do, kie estas tiu knabo?
Jes.
OK.
Do memoras el la pli frua slide ke Estis ankaŭ el pasintsemajne, ke
tabelo de signoj, bone, ŝnuro, do ni diru cxi tiu estas nia kordo s.
Do, se s estas la kordo, saluton, tiam, H-E-L-L-ho, en la memoro, ke tuj
esti, kaj tiam ĉi backslash 0 karaktero.
>> Do kiel ni ricevas la longeco de s?
Nu, la truko serĉas ĉi reagon 0 karaktero, tiu nula
finilo.
Do la algoritmo tuj esti io kiel malmultaj
sufiĉe karakteroj ke -
ni havas ĉi mano reprezenti iun nombrilo, ni nomas tiun int longeco.
Do, ekde super cxi tie, ni estas irante persisti super niaj kordo.
>> Do la unua signo, estas H, kaj ĝi ne estas reen oblikvo 0, tiel
la longo estas 1.
Persisti ĝis la venonta signo, E, kaj ĝi ne estas backslash 0.
Daŭro estas 2.
L, 3.
L, 4.
Ho, 5.
Kaj fine, ni atingas backslash 0, kaj tial, ke rimedoj, bone,
tiu cxeno estas finita.
Do ni revenu 5.
>> Do efektive apliki ke, unue, mia n longo egalas 0, mia dekstra mano.
Kaj ni iras persisti -
>> SPEAKER 1: [inaudibles]
>> ROB Boden: Ho, pafi.
Bonan alvokon.
Eksplodo.
Do n longo egalas 0.
Do nun, dum s longo ne egalaj kaj tiam, backslash 0.
Do memoru, ĉi backslash 0, ĝi estas efektiva karaktero, kaj gxi indikas
la finon de la ŝnuro.
Same kiel, ankaŭ, backslash n estas reala karaktero.
Backslash 0 tuj indikos la finon de nia kordo.
Mi ne volas meti tiun tie.
Kaj dum s indeksita per longo estas egala al la nula finilo, tiam
ni nur iri al pliigo longa.
Tial do, je la fino de nia programo, longeco estas eventuale tuj
estu 5 en tiu kazo.
Kaj ni vidos ĝuste redoni longa.
>> OK.
Do nun cxi tie, mi ne faras fari my_strlen.
Ni kompili gxin por certigi ĉio funkcias glate.
Ĉu mi faras en 2?
Aux estis, ke 1?
Tio devus fari.
Ĉiuj pravas.
Do tiu estas argv 2.
Laboras kiel anticipis, kvankam estis, ke la unu mi tion faris en?
Jes.
OK.
Ĉi tiu versio de aĵoj ne havas la printf novan linion post, sed
ne fari ian diferencon.
OK.
Do laboris kiel atendita.
>> Nun ni povas eĉ kombini ĉi tiu paŝo plui, kie avizo tie, bone,
unue, ni kaptante la strlen de argv i, kaj tiam ni ripetanta super
ĉiun karakteron en tiu kordo.
Do anstataŭ fari tion, kion, se ni nur kombini tiun logikon de atendis
gxis ni batis backslash 0 dekstra en ĉi tiun por buklo?
Do ankaŭ persisti dum argv i, j faras Ne egala backslash 0.
Do ni ruli ĝin unue.
>> Ĉiuj pravas.
Do ĉi tie, ĉi tiu kondiĉo estas jene -
ni purigi tion.
Do nun, cxi tio estu nia argv.
Do, kiam mi simple kuris tiu programo antaŭ, argv estas tabelo de kordoj.
Kaj tial, se mi kuras kun skalara oblikvo argv 2, saluton mondo, tiam la argv
sin estas longo 3, por argv nulo, saluton, kaj la mondo.
>> Kaj ene de ĉiu el tiuj indeksoj estas, mem tabelo, kie tio estos
streketo ĉi estos oblikvo, mi ne scias se tiu estis la ĝustan direkton, mi
ne pensu estis.
A-R-V haltostreko, bezonas pli da spaco.
Ni tranĉis en tiun tabelo.
A-R-V haltostreko 0, kaj tiam backslash 0.
Kaj tiam en malordo estos saluton.
Ni diru, H-E backslash 0.
Kaj fine, W-Ho backslash 0.
>> Do la algoritmo, ke ni nur skribis, la neston por masxojn, kio ili estas
fari estas, ni devas unue la kontraŭi i kaj tiam j.
Ĉi tiu estus pli facile kun kodo en la ekrano, Ni revenu al tio.
OK.
Do rimarkos ke mi estas la iterator tio ripetanta super ĉiu komando
linio argumento.
Kaj j estas la iterator ripetanta super ĉiu signo en tiu
komandlinia argumento.
Do kio estas tiu interna printf faras estas ni printf argv 0 0, printf
argv 0 1 printf argv 0 2, 0 3 0 4 0 5, 0 6, sed nun, argv 0 7 tuj
egala backslash 0.
>> Do tiam ni eliros ke por buklo, Kaj nun mi ripetas al 1.
Kaj nun ni iras al print argv 1 0, argv 1 1 -
nu, nun, kiam mi tranĉis saluton mallonga, argv 1 2 estas denove tuj estos
backslash 0.
Kaj do, pliigo i kaj daŭrigi, kaj tiel plu, ĝis ni presi ĉiuj
mondo, kaj tiuj estas tri komandlinia argumentoj, kaj ni devos eliri el
la plej ekstera iteracio, kaj fini nian programon.
OK.
>> Do ni revenu ĉi tien.
Do vi devos gajni iun familiareco kun komandlinia argumentojn sur tiu
apartan problemon agordi.
>> Nun, debugging.
Do vi probable jam devis fari iuj debugging kun via antaŭa
problemo metita.
Kaj unu tre facila vojo de debugging, unue, ni rigardu a buggy programo.
Nu, promenante tra tiu programo, ni iras, por demandi al la uzanto por
entjera, grab ke entjero, kaj tiam, arbitre, ni havas tempon buklo ke
estas ĝuste tuj dekremento i ĝis ĝi estas egala al 10.
Ni simple supozi ke mi eniri entjero pli granda ol 10.
Do dekremento i ĝis ĝi estas egala al 10.
>> Kaj tiam ni havos alian dum buklo ke, dum i ne egalas 0, ni estas
tuj dekremento i per 3.
Do, se vi vidos la intenco de la bug ĉi tie, estas ke tiu povos dekremento i al
estos 10, kaj tiam ĉi tio dum buklo volo dekremento i el 10, 7, 4, 1,
al negativa 2, al negativa 5, kaj tiel plu, al negativa malfinio, kiam mi volas,
neniam vere egalus 0.
Kaj poste, je la fino de tiu programo, ni havas la foo funkcio kiu estas
irante sur print ke i.
>> Do tiu estas mallonga kaj bagatela programo, kaj la eraro estas evidenta,
speciale post mi simple diris kion la cimon estis.
Sed la intenco ĉi tie estas, nu, tio eble efektive aspektas kiel kelkaj el viaj
solvojn de avidaj de la lasta problemo starigis, kaj eble vi ne havos
iuj senfina iteracio en vian programon, kaj vi ne havas ideon
kio kaŭzis ĝin.
Do tre utila debugging tekniko estas nur aldonu printfs
ĉie en via kodo.
>> Do ĉi tie mi deziras printf ekstere unue dum buklo.
Kaj tie mi volas printf, kaj mi nur presi i.
Mi eĉ fari unue dum buklo, i.
Ekstere, dua dum buklo.
Denove, presi interne el tie, la valoro i.
Kaj ni kuros ĉi.
>> Do dot oblikvo erarserĉilo.
Entajpu entjero.
Ni do 13.
Kaj eksplodo.
Ni vidas, ke ni estas senfinaj looping ene de la dua dum buklo.
Do nun ni scias kio estas la eraro estas.
Sed printf debugging estas perfekte granduloj, sed unufoje viaj programoj akiri
pli kaj pli komplikaj, esas pli kompleksajn solvojn al
getting aferoj laborante.
Do ni forigos ĉiujn tiujn printfs.
Kaj ni certigu mi ne rompi nenion.
OK.
>> Do la programo ni iras enkonduki nomiĝas
GDB, por GNU Debugger.
Nu, fakte, ni forigi erarserĉilo por duan, kaj fari elpurigi denove.
Nu, efektive la unua, bonan lecionon en komandlinio argumentoj.
Rimarku ke ĉi tin komando kiu estas kompili ĉio estas aprobotaj
ĉe la komandlinio, tiuj komandlinia argumentoj.
Do ĝuste kiel vi tuj uzos komandlinia argumentoj, kiel ni
faris antaŭe, kaj tiel vi havos en PSET 2, tiel estas kiel tin uzas ilin.
>> Do rimarki ke tiu unua flago, haltostreko ggdb3, kio tio estas diro, tin,
vi devas kompili tiun dosieron kun la intenco, ke ni volas eventuale
bezonas elpurigi ĝin.
Do tiel longe, kiel vi havas tiun flagon, tiam ni povas GDB erarserĉilo.
Kaj gxi donos malfermi la GNU Debugger.
>> Do tie estas multe da ordonoj ke vi devas alkutimiĝi al.
Unue oni ke vi probable Tuj bezonas estas Kuru.
Do kio estas Kuru tuj faros?
Ĝi tuj komencu nian programon.
Do kuru, komencante programo, la programo demandas nin por entjero, 13.
Kaj tiam estas malfinia looping kiel atendis, krom mi forigis la
printfs, do ni ne eĉ vidi tion.
Ĝi eliris normale.
Oh.
Estas ebla, ke ĝi envolvis la tutan vojo ĉirkaŭ, reen al - ignorante tion.
Alpreni ne eliri normale.
Tie estas komplika respondo al tiu.
>> Do nun, tio ne estas tre utila.
Do nur kurante nian programon ene de ĉi debugger ne helpas al ni en iu
maniero, ĉar ni povis jxus faris dot oblikvo elpurigi de ekstere GDB.
Do la ordono, ke Vi verŝajne -
kaj mi rezignis tion.
Kontrolo-d aŭ rezigni, ambaŭ laboras.
Do ni malfermu ĝin denove.
>> Alia komando kiu vi probable tuj volas
alkutimiĝi al estas Break.
Do ni rompos la ĉefa por nun, kaj tiam Mi klarigos tion.
Nu, jen ni vidas ni aperigos Haltpunkto en ĉi tiu linio en debug.c.
Do kio ripozon rimedoj estas ke kiam mi tajpi run, la programo tuj
daŭrigi kuri ĝis Mi trafi Haltpunkto.
Do kiam mi batis run, la programo komencas, kaj tiam ĝi rompas tuj kiam
Eniras la ĉefa funkcio.
Break ĉefa tuj estos io vi belan komune fari.
>> Kaj nun, por enkonduki vin iuj pli komandoj.
Rimarku ĉi tie, ke ĝi estas jene ni rompis ĉe linio 11, kiu estas
printf, eniru entjero.
Do la komando Sekva tuj estos kiel ni iru al la sekvanta linio de kodo.
Tiu tuj permesos ke ni tretas tra nia programo linio por linio.
Do sekvanta.
>> Nun la linio 12, ni iras por ricevi la entjero.
Sekva.
Kaj se vi ĵus batis Enskribu denove, ĝi malebligos refari la lastan aferon vi faris.
Do mi ne bezonas tajpi sekvanta ĉiufoje.
Do eniri entjero, 13.
Do nun, linio 14, dum i estas granda ol 10, kaj mi devos fari.
Kaj ni vidos ni tuj dekremento i.
Do ni tuj dekremento i denove.
>> Do nun, alia utila komando estas Print.
Do Presi tuj presi La valoro de la variablo.
Ni elirigi la valoro de variablo i.
Ni presas i.
Ĝi estas dironta i estas 11.
Nun ni Sekva denove dum i estas pli granda ol 10.
Do i estas ankoraŭ pli granda ol 10, ĉar ĝi estas 11.
i minus minus.
Ni presas i denove.
Kiel atendita, ĝi estas 10.
>> Do nun, proksima.
Ĝi okazas reen al la kondiĉo, i estas pli granda ol 10, sed i estas nun 10, tiel
ĝi ne estas pli granda ol 10, do ni atendas ĝin fali el la tempo buklo.
Kaj nun ni estas sub tiu linio de kodo.
Kaj alia ordono, Listo, estas nur irante por montri la antaŭa kaj sekva
paro de linioj de kodo, en kazo vi perdis vin.
Do ni simple ĝi eliris ĉi dum buklo, kaj nun ni jam eniris tiun
dum buklo, linio 18.
Do, dum mi ne egalas 0.
Kaj, tuj poste, i egalas i minus 3, kaj ni rimarki, ĉi devos nur plu iri.
Kaj ni povas presi i.
>> Ĉiu komando ia havas rektajn alirojn.
Do p estas mallonga por Print.
Do ni povas p i.
Nur gardu tenante n, aŭ daŭre fari Sekva.
Presi i denove.
Vi vidas nun ĝi estas negativa 167.
Do tio devos daŭrigi eterne, sed ne vere eterne, ĉar vi ĵus vidis, ke
efektive finos je iu punkto.
>> Do kiu estas Komencante GDB.
Sed ni faru pli aferon en GDB.
Uh, erarserĉilo.
Do, en tiu aparta kazo, la senfina iteracio okazis esti interne de
la ĉefa funkcio.
Kaj nuntempe, simple akcepti ke tio mi estas tuj movu la senfina iteracio en
la foo funkcio.
Nur memoru ke, ĉe la fino de tiu programo, nu, tiu estis originale
nomante foo, kiu estis nur tuj presi i.
Sed nun ni petas foo, kiu estas tuj dekremento i ĝis ĝi estas 0, kaj
tiam presi tiu variablo.
OK.
Savi.
Faru erarserĉilo.
Kaj nun, gdb erarserĉilo.
OK.
>> Do, se mi ĝuste Kuru do mi ne tuj povos reale step per mia
programo linio-per-linio.
Do ni rompos ĉe ĉefa, kaj tiam tajpi run.
Do iri tra ĉi tiu, printf, eniri entjera, akiru la entjero, 13.
Do ni tuj teni decrementing ĝis mi estas pli granda ol 10.
Tiam ni iras por fali tra la dum buklo, kaj instigi al la linio -
ni malfermas gxin en apartan fenestron.
Do ni decremented ĝis mi ne plu pli granda ol 10, kaj poste ni
vokis la funkcio, foo.
>> Do, kio okazis kiam mi trafis funkcio foo, bone, mi alvokis foo, kaj
tiam mi ne plu havis kontrolon super GDB.
Tuj, kiam mi batis Sekva ĉe ĉi tiu linio, tion sekvis ĝis tiu okazis,
kie la programo ĝi eliris, kiam -
supozi ne ekzistis iam.
Vi vidis lin paŭzi por iom kvankam.
Do, kial mi perdos la kontrolon super la programo je tiu punkto?
Nu, kiam mi tajpas proksima, kiu iras al la laŭvorta sekva linio de kodo ke
Mi faros.
Do post linio 21, la sekvanta linio de kodo ke estos ekzekuti estas linio 22,
kio estas, elirante el ĉefaj.
Do mi ne volas ĝuste iri al la sekvanta linio de kodo.
Mi volas iri en la funkcio, foo, kaj tiam ankaŭ treti tra
tiuj linioj de kodo.
>> Do pro tio, ni havas alternativon.
Ni lasis tion denove.
Break ĉefa.
Uh, 1, proksima, sekva, 13, proksima, proksima, sekvanta, zorgeme,
antaŭ ol ni batis linio foo.
OK.
>> Do nun, ni estas ĉe linio 21, kie ni nomas foo.
Ni ne volas tajpi proksima, char tio Mi simple vokas la funkcion foo, kaj
iri al la sekvanta linio de kodo.
Kion ni volas uzi estas Ŝtupo.
Do tie estas diferenco inter Ŝtupo kaj Venonta, kie Ŝtupo paŝas en la
funkcii, kaj Sekva iras super la funkcio.
Ĝi simple ekzekutu la tuteco de la funkcio kaj konservas iras.
>> Do Ŝtupo tuj venigi nin en la funkcio, foo.
Kaj ni vidas tie, nun, ni estas denove en tiu dum buklo tio, en teorio,
daŭros ĉiam.
Kaj se vi batis Ŝtupo, kiam tio estas eĉ ne funkcio por voki, ĉar ĝi estas
identa al Next.
Do estas nur kiam vi estas en linion kiu vokas funkcio kiu Ŝtupo
tuj diferencigas Sekva.
Do Ŝtupo venigos nin tien.
Paŝo, step, ŝtupo, paŝo, step, ŝtupo, kaj Ni simple senfina iteracio ĉiam.
>> Do vi povus alkutimiĝi al tio, kiel via manieron de identigo senfina masxojn, estas
nur tenante ĉi Eniga klavo por rigardu, kie vi akiras ŝtopita.
Esas bona manieroj por fari tion, sed cxar nun, tio estas perfekte sufiĉa.
Kaj stile, konformi Stilo 50, mi devus esti farinta tion.
OK.
>> Do unu lastan komandon enkonduki.
Nu, ni GDB elpurigi in
Do anstataux rompi en ĉefa, se mi konas la foo funkcio estas ankaŭ la
problemo, tiam mi povus havi nur diris, rompi ĉe foo, anstataŭe.
Diru Mi rompos cxe ambaŭ ĉefaj kaj foo.
Do vi povas difini kiel multaj breakpoints kiel vi volas.
Kiam mi tajpas kuri, tio okazas halti ĉe la -
ooh, ni rekompili, ekde Mi ŝanĝis tion.
Vi vidos ĉi linion, Warning, fonto dosiero estas pli freŝa ol plenumebla.
Do tio signifas ke mi nur envenis ĉi tien kaj sxangxis tiujn konformi Stilo
50, sed mi ne rekompili la programo.
Do GDB igas min konscias pri tio.
Mi rezignis, fari elpurigi denove, batis gdb erarserĉilo.
OK.
>> Do nun, reen al kion mi faras.
Break ĉefa, rompo foo.
Nun, se mi kuros al la programo, tiel ĝi estas tuj pluiri ĝis kolizias kun
Haltpunkto.
Tio Haltpunkto okazas al esti la unua en ĉefa.
Nun, anstataŭ fari proksima, sekvanta, sekva, proksima, sekvanta, ĝis mi trafis foo, mi
povas tajpi daŭrigi, kio sekvos ĝis vi batis la sekvanta Haltpunkto.
Mi devas eniri la entjera unue.
Daŭrigu daŭrigos ĝis mi trafis la sekvanta Haltpunkto, kio estas tio
funkcio de foo.
>> Do Run kuros, ĝis vi trafi Haltpunkto, sed vi nur tajpi run kiam
vi komenci la programon, kaj poste, de tiam, ĝi estas daŭrigi.
Se mi ĝuste faris rompi ĉefa kaj tiam kuris gxi rompos cxe
ĉefa, kaj tiam daŭrigu.
Ĉar mi ne havas ripozon punkto je foo, eniri la entjero, tiam nun mi estas
Ne tuj rompos ĉe foo.
Ĝi estas ĝuste tuj infinito buklo ĝis tiu.
OK.
>> Do jen Intro al GDB.
Vi devus ekuzi gxin en via problemo aroj.
Ĝi povas esti tre utila identigi cimojn.
Se vi fakte ĝuste, linio-per-linio, iru tra via kodo, kaj kompari kio estas
efektive okazas kun kion vi atendas okazi, tiam estas sufiĉe
malfacile perdi vian cimojn.
OK.
>> Do pasintsemajne David alportis tiun sekretajn-ŝlosila ĉifriko ajxojn la
unua fojo, kie ni ne volas pasvortojn nur esti stokita en nia
komputilo en iu simpla teksto-dosiero, kie iu povas veni kaj justa
malfermu ĝin supren kaj legi ilin.
Ideale, oni devus esti ĉifrita iel.
Kaj en Problemo Ara 2, vi estos kontraktanta kun unu metodo de ĉifrado,
aŭ, bone, du metodoj, sed ili ne estas tiom granda.
Se vi faras la hacker eldono, vi estas ankaŭ tuj estos kontraktanta kun
decrypting kelkaj aĵoj.
>> Do la demando nun estas, nu, eĉ se ni havas la plej fortan ĉifradon
algoritmo en la mondo, se vi elektos aparte malriĉaj pasvorton, tiam
ne helpos vin tre multe, ĉar la homo plu povos ekkompreni gxin.
Eĉ se vidante la ĉifrita kordo kaj ĝi aspektas kiel salato de rubo
tio signifas nenion al ili, se ili ankoraŭ devas nur provu kelkaj pasvortoj
ekkompreni gxin, tiam vi ne estas tre sekura.
Do rigardante video kiu faras tiun punkton.
>> [VIDEO reprodukto]
>> -Kasko, vi Fiend.
Kio okazas?
Kion vi faras kun mia filino?
>> -Permesu al mi prezenti la genian juna plasto kirurgo, D-ro Phillip
Schlotkin, la plej granda nazo job viro en la tuta
universo, kaj Beverly Hills.
>> -Via Moŝto.
>> -Nazo job?
Mi ne komprenas.
Ŝi jam havis nazon laboron.
Estis dolĉa dekses ĉeestas.
>> -No.
Ĝi ne estas kion vi pensas.
Ĝi estas multe, multe pli malbonaj.
Se vi ne donos al mi la kombino de la aero ŝildo, Dr Schlotkin volo
donu vian filinon reen sian malnovan nazo.
>> -No.
Kie vi trovis tion?
>> -Bone.
Mi diros.
Ne, paĉjo.
Ne, vi ne devas.
>> -Vi pravas, mia kara.
Mi mankos via nova nazo.
Sed mi ne diros al li la ĉifro, negrave kion.
>> -Tre bone.
Dr Schlotkin, faru vian malbonan.
>> -Mia plezuro.
>> [Iloj Estulo akrigita]
>> -No.
Atendu.
Mi diros.
>> -Mi sciis, ke tio funkcios.
Ĉiuj pravas.
Donu ĝin al mi.
>> -La kombinaĵo estas unu.
>> -Unu.
>> -Du.
>> -Tri.
>> -Kvar.
>> -Kvin.
>> -Do la kombino estas unu, du, tri, kvar, kvin.
Tio estas la stupidest kombinaĵo Mi iam aŭdis en mia vivo.
Tio estas la speco de afero idioto havus sur lian pakaĵon.
>> -Dankon, via Moŝto.
>> -Kion vi faras?
>> -Mi elŝaltis la muro.
>> -Ne vi ne faris tion.
Vi elŝaltis la tuta filmo.
>> -Mi devas premis malĝustan butonon.
>> -Nu, remetis ĝin sur.
Metu la filmon dorson.
>> -Jes, sinjoro.
Jes, sinjoro.
>> -Ni iru, Arnold.
Venu, Gretchen.
Kompreneble, vi konas min timige ankoraŭ devas fakturojn vi pro tio.
>> [FINO VIDEO reprodukto]
>> ROB Boden: Bone.
Do nun, ke ni jam parolas pri sekureco en kelkaj manieroj, agrablaj
iom movie poster, do en la lastaj tagoj, tiuj temoj kun la NSA
vigladon ĉion.
Ĝi povas esti malfacile sentas kiel vi havas ian intimecon en la
interreta mondo, kvankam mi ne povus diri vi plejparto de la detaloj de PRISM.
Do moviĝas preter PRISM, ni ne tuj por paroli pri tio, nun
pensas pri via tekkomputilo.
Do ĝis ĉi tie, mi volas ŝanĝi al mia aktuala konto,
kun mia eta pingveno.
Do mi havas pasvorton aro, kaj tiu pasvorto estas kion mi volas esti.
>> Sed memoru, ke kion mi ensalutante kun tiel ĉi ensaluto
prompto, estas iu programo.
Estas iuj programo kiu estis skribita de iu persono.
Kaj tiel, ke persono, se ili estas aparte malica, ili povis
ili diris: Tute bone, do se la pasvorto ke mi eniras estas egala al mia
reala pasvorton, aŭ ĝi estas egala iuj specialaj pasvorto -
David estas timinda aŭ io -
tiam tiuj, in
Do malica programisto povus havi aliro al cxio de via Mac, aŭ
Fenestroj, aŭ nenion.
>> Por ke ne estas multa de maltrankvilo, ekde, Mi volas diri, ĉi tiu estas ensaluto programo
tio estas senditaj kun OS X, centoj aŭ miloj da homoj havas
recenzis tiun kodon.
Kaj do, se, en via kodo ie, vi diri, se tiu linio egalas egaluloj
David estas timinda, ensalutu, tiam iu estas tuj estos, kiel, atendu.
Ĉi tio ne estas prava.
Tio ne devus esti tie.
Do jen unu maniero ni preni aĵojn esti speco de sekura.
>> Sed pensi eĉ programoj ke vi skribas.
Imagu ke vi verkis la ensaluto programo.
Do tiu ensaluto programo kiun vi skribis, do evidente, vi estas bona
programisto.
Vi ne tuj metu ajnan malica se x egalas egalas David estas timinda
en via kodo.
Sed tiu programo, kion fari vin uzi kompili tiun programon?
Io kiel tin.
Do kio okazos se la persono kiu okazis skribi tin specialaj cased en tin
io kiel, se mi estas kompili la ensaluti programon, do eniri ĉi kodo
en la saluta programo kiu diras, se x egalas egalas David estas timinda?
Do ne tute ankoraŭ, sed ni havas la saman ekspedi ĉi tie, kie tin bone,
milojn, se ne dekojn da miloj de homoj, kiuj rigardis tin havas
rigardis liajn liniojn de kodo kaj diris: ĉiuj pravas, nenio estas malbona ĉi tie.
Evidente, neniu estas faranta ion ĉi malica.
>> Sed kio estas tin mem, kiel, kio se mi kompilos tin?
Kio, se mi havas iun tradukilon ke kompilanto tin kiuj enmetas en tin
tiu speciala hack kiu diras, ĉiuj pravas, kiam mi kompilas tin, tiam la
plenumebla mi get devus speciale rigardu interne de la ensaluto programo kaj insert
tiun pasvorton, egalas egaluloj Dave estas timinda?
Do memoru, ke via tradukilo mem tio devas esti kompilita je iu punkto.
Do, se kion vi elektas por kompili tin kun, mem estas malica, tiam vi
povus esti ŝraŭbitaj la tuta lauxlonge de la linio.
>> Do jen, ni havas Ken Thompson kaj Dennis Ritchie.
Do tiu estas ikono foto.
Dennis Ritchie estas dekstre.
Li estas grava -
bela multe skribis C. Do vi povas danki lin por ĉi tiu klaso.
Ken Thomson estas maldekstre.
La du el ili esence skribis Unikso.
Nu, ili estis grandaj kontribuantoj en Unikso.
Tie estis iuj aliaj.
Do Ken Thompson, en iu punkto, li gajnas la Turing Award.
Kaj la Turing-premio, mi ĉiam aŭdis ĝi referencita tiamaniere, ĝi estas la
Nobel-Premio pri komputiko.
>> Do, je la Premio Turing, li devas donu lian paroladon.
Kaj ĝi donas ĉi tre fama parolado Nun, alvokis Reflections on Konfidante
Fidu, kion ni kunligis To je la kurso retejo.
Kaj en ĉi tiu parolado, li diras, ĉiuj pravas, do mi skribis UNIX, kaj nun ĉiuj
vi personoj uzas UNIX.
Nun, memoru nun, ke Linukso estas rekta posteulo de Unikso.
OS X rekte uzas UNIX.
Vindozo ne tiom multe, sed multe de ideoj estis prenitaj de Unikso.
>> Do li iros sur la scenejo kaj diras: Enorde, mi skribis Unikso.
Kaj ĝuste tial vi uloj scias, mi estas povos ensaluti en ĉiun
sola unu de viaj komputiloj.
Ekde mi metis unu el tiuj specialaj se x egalas egalas Ken Thomson estas timinda,
tiam mi rajtas ensaluti.
Do homoj estas kiel, tiel, Kiel vi faras tion?
Ni rigardis la ensaluto programo kaj nenio estas tie.
Li estas kiel, bone, mi modifis la tradukilo por ensaluti en la saluta programo
tiel ke la ensaluto programo nun havos ke x egalas egalas Ken Thompson
estas timinda.
>> Kaj oni diras, nu, tio ne estas vera.
Ni rigardis la tradukilo kaj la tradukilo ne havas ajnan liniojn de
kodo ŝatas tion.
Li estas kiel, nu bone, sed kio estas vi kompili la tradukilo per?
Kaj ili pensas, kaj li estas, kiel, tiel, Mi estas tiu, kiu donis al vi la tradukilo
vi uzas por kompili la tradukilo, tiel vi estas kompilante tradukilon, ke
sin estas malicaj, kaj volo rompi la ensaluto programo.
Do esence, je tiu punkto, estas neniel vi povus rigardi la fonto
kodo de la ensaluto programo por vidi, kio estas malbone.
Vi ecx ne povis rigardi en la fonta kodo de la tradukilo
por vidi, kio estas malbone.
>> Vi bezonus rigardi la maŝino kodo, la efektiva duuma de la
kompilita tradukilo por vidi, atendu, tiuj linioj de kodo ne devus esti tie.
Sed Ken Thompson prenis unu paŝo tie kaj diris: Bone, estas
tiujn specialajn programojn kiuj reale helpi vin legi la duuma de programoj,
kaj do se iu uzas tiun programon al legi la duuma, ili vidus tiujn
linioj de kodo.
Li modifita tiujn programojn diri, ĉiuj Bone, se vi rigardas la
tradukilo, mi ne montras tiun apartan aro de duuma.
>> Do tiam vi bezonos preni tiun ŝtupon pli kaj esence, kiu povis havi
prenitaj multaj niveloj de indirección, kaj en iu momento, neniu estas vere
tuj estos checking.
Do la moralo de la rakonto estas, vi estas Ne tuj skribos
Tin en ĉi tiu kategorio.
Vi tuj povas uzi grimpadon Tin multon en tiu klaso.
Por ĉiuj vi scias, tin estas malica programo kiu saboteando ĉiu
sola programo vi iam kompilitaj.
Kaj lasos vin sur tiu tre malbonaŭgura rimarku, vidi vin je merkredo.
>> [Aplaŭdo]
>> SPEAKER 2: En la sekvanta CS50.
>> SPEAKER 3: Ĉu vi ne kuraĝas diri, ke.
Vi povas fari ĉi tion.
Vi jam faris tion antaŭe, vi povas fari tion hodiaŭ, vi povas fari tion morgaŭ.
Ke vi estis faranta tion por jaroj.
Nur iru tie kaj fari tion.
Vi povas fari ĉi tion.
>> [MUZIKO Ludanta]