>> [MUSIC Playing]
>> ROB Boden: Rendben.
Tehát, az első dolog az első, videó egy ismerős arc.
>> [VIDEÓ LEJÁTSZÁS]
>> -Rendben.
Ez CS50, és ez a kezdete három hét.
Sajnálom, nem tudtam ott lenni veletek ma, de engedje meg, hogy bemutassam
CS50 saját Rob Boden.
>> [END VIDEÓ LEJÁTSZÁS]
>> [Taps és éljenzés]
>> ROB Boden: A filmográfia ben , hogy a videó fantasztikus.
Rendben van.
Tehát először is, van még egy ebédet.
Ez holnap 01:15.
Nincs ebéd pénteken.
Ez a Quora.
És Tommy még nincs itt, de az egyik az emberek ott egykori vezetője CF,
Tommy McWilliam.
Tehát ő egy jó ember.
El kellene jönnöd.
>> Rendben van.
Így a múlt héten kezdtük törés egymástól arról, hogy mi a szöveg valójában.
Már ismert, hiszen az elején, hogy ez egy karaktersor.
De a múlt héten sokat foglalkoztunk az a tény, hogy ami valóban sorozata
karakter, nos, most már tömbök karaktereket.
És tudjuk, hogy a szöveg, ez egy sor A karakter, a legvégén,
itt van ez a speciális NULL byte, ez visszaper 0, amely azt jelzi, a végén a
a húr.
>> És így a string tömb karakter, de lehet több, mint
csak egy sor karakter, mi lehet egy sor olyan
a fajta dolog, amit szeretnénk.
Tehát, ha felidézni a múlt héten, a Ages program, David bevezette
nagyon gyorsan.
Tehát az első dolog, amit meg fogunk tenni a kéri a felhasználót egy egész szám, az
több ember a szobában.
Ha megvan, hogy egész, mi van érvényben, amely tömb.
Figyeljük meg ezt a zárójeles formával.
Meg fogod szokni ezt.
>> Szóval nyilvánította egy sor egész nevezett korosztály, és van n
egész számok ebben a tömbben.
Szóval, ez a minta itt, ez a 4-int i értéke 0, i kisebb, mint n, i és
Plusz, hogy szintén lesz egy mintát hogy Önnek nagyon régen.
Mert elég sok, hogy te mindig lesz iterációkhoz tömbök.
Úgy emlékszem, hogy n hossza a tömb.
És itt vagyunk, többször kérte a kor a személy, a szobában.
>> Ezután megyünk le, és bármilyen önkényes ok, akkor majd
nyomtassa ki, mennyi idős mennek , hogy egy év múlva.
És fut a program, most hogy a kor, pont perjel korosztály számára.
Így több ember a szobában, mondjuk három.
És azt mondják, az első, aki 13, a következő 26, és az utolsó 30 perc.
Tehát akkor majd végighaladni a három emberek, nyomtassa ki a 14., 27., és 31..
>> Úgy emlékszem, hogy amikor kijelentjük egy tömb mérete n, az indexek, hogy az
tömb, a tömb értékeit és indexek 0, 1, 2, egészen
n-ig mínusz 1.
Tehát, amikor azt mondta, hogy három ember a szobában, és tesszük itt
Az első iteráció ezen keresztül hurok, én lesz 0-ra.
Így a mutató 0-ra.
Mi hozzárendelése az első kor a felhasználó belép.
Aztán a következő, mi belépő második n a felhasználó belép, és
mellett két, az utolsó n.
>> Tehát észre, hogy egy sor méretű három, nem kell semmit
Az index három.
Ez nem érvényes.
Rendben van.
Szóval, megy vissza.
Most, hogy már foglalkozott tömbök, van néhány ismerős.
Most fogunk lépni a parancs paramétereket, melyek lesznek
elég releváns erre a problémára készlet.
>> Tehát eddig, amikor már kijelentette, a fő funkciója, most már
mondta int main semmis.
Így érvénytelen csak azt jelenti, hogy az mi nem halad olyan
érvek ezt a funkciót.
Most fogjuk látni, hogy a fő eltarthat egy érvet.
Itt hívjuk őket int argc és karakterlánc argv zárójelben.
A konzolok, ismét, jelezve hogy van dolgunk tömbök.
Tehát itt, karakterlánc argv konzolok, vagyunk foglalkozó egy sor húrok.
Tehát argc, hogy fog, jelezve, Hány érv voltunk
át ezt a programot.
És látni, hogy ez mit jelent, Zárjuk ezt.
>> OK.
Tehát eddig, most már fut minden programot, mint a dot perjel korosztály számára.
Azt is, meg a parancssorban, múlt át érveket, így a kifejezés, parancs
paramétereket.
Így az első érv, hello world.
Tehát itt, argc lenne három.
Ez a gróf érvek a parancssorban.
Argc mindig legalább 1, mivel dot perjel korok, maga számít, mint az egyik
a parancssori paramétereket.
>> Ezután az első szia.
Ha dot slash korosztály a nulladik, majd helló az első, és a világ a
második parancssori argumentum.
Így a húr argv fogunk látni, tartalmazza a húrok, pont perjel
korosztály, hello, és a világ.
És David kérésére megyünk lejátszani a videót bevezetésével ezt.
>> [VIDEÓ LEJÁTSZÁS]
>> -Eddig a programokban voltunk írt, most már kijelentjük
a fő, int main semmis.
És ebben az időben, hogy semmis van egyszerűen csak meghatározza, hogy a
program nem vállal semmilyen parancssori paramétereket.
Más szóval, ha egy felhasználó egy fut programot, ő adhat parancsot
argumentumok írásban további szavak vagy kifejezések után a program
nevét a prompt.
>> Nos, ha azt szeretné, hogy a program, hogy hogy parancssori paramétereket, egy vagy
több ilyen szó, akkor ki kell cserélni elvesztésével egy pár érv.
Így csináljuk.
Tartalmazza CS50.h.
Tartalmazza szabványos io.h.
Int main.
És most, ahelyett, hogy üres, fogok adjon meg egy int nevű argc, és
tömb húrok nevű argv.
Most, argc és argv egyszerűen egyezmények.
>> Mi volna az úgynevezett ezeket az érveket a legtöbb, amit akarunk.
De mi az a fontos, hogy a argc van int, mivel a meghatározás szerint ez
majd, hogy tartalmazza az érv gróf, a szavak száma összesen, hogy a
felhasználó beírt a saját prompt.
argv eközben érv vektor, az lesz, hogy valóban egy tömb tároló
az összes szó, hogy a felhasználó gépelt a saját prompt.
>> Nézzük folytassa tenni valamit most egy vagy több ilyen
parancssori paramétereket.
Különösen, menjünk előre, és a nyomtatási bármilyen szót a felhasználó beír
után a program nevét A prompt.
Nyitó zárójel.
Záró zárójel.
Printf százalék s karakterláncot és vessző.
És most el kell mondanom printf milyen értéket dugót, hogy helyőrző.
Azt szeretné, hogy az első szó, a felhasználó gépelt után a program nevét,
és így fogom megadni argv konzol 1, közel
zárójel, pontosvessző.
>> Nos, miért konzol 1 nem tartó 0-ra?
Nos, kiderült, automatikusan tárolja A argv 0 lesz a
program tényleges neve.
Tehát az első szó, a felhasználó beír után, a program neve, a
egyezmény lesz tárolt argv 1.
Nézzük most összeállítja és a program futtatásához.
>> Legyen argv 0 pont slash argv 0-ra.
És most egy szó, mint a Hello.
Adja meg a.
És ott van ez, helló.
>> [END VIDEÓ LEJÁTSZÁS]
>> ROB Boden: Rendben.
Zárja be ezt.
Tehát egy pillantást vetni, hogy a program, hogy Csak be nekünk, nos, csak
mutatni, ha nyomtatni argv 0, hogy most mi az, argv 0 pont slash argv 0-ra.
Szóval, ahogy várható volt, ez kinyomtatja az a program neve, hiszen argv a 0
mindig lesz a A program megnevezése.
De nézzük tenni valamit egy kicsit érdekes.
>> Így a probléma meg, akkor be, hogy ezt a funkciót, atoi.
Akkor mi használjuk atoi az?
Ez lesz átalakítani a karakterlánc egy egész.
Tehát, ha elmegyek a húr, egy, kettő, három, a atoi, hogy majd átalakítani, hogy
Az egész, egy-kettő.
Így megyünk konvertálni első parancssori argumentum egy egész szám,
és aztán csak nyomtatni, hogy egész.
>> Tehát alapvetően, vagyunk olyan reimplementing getInt, csak a
egész szám megadása a parancssorban vonal helyett a programban
interaktív.
Tehát, hogy argv 0, csináljuk ez itt, és zárja be ezt.
Így működik az argv 0, és nézzük meg a egész, egy kettő három négy egy kettő.
Így fog nyomtatni az egész, egy két, három, négy, egy, kettő.
Vannak olyan finomságok, hogy atoi hogy meg fog állni törődve semmit
túl érvényes numerikus karakter, de ez nem számít.
>> Nos, mit gondol, mi történik ha én ezt?
Segmentation hiba.
Miért van ez?
Ha visszatekintünk a programban vagyunk konvertáló argv 1, az első érv
a program neve után, hogy egy egész szám.
De nincs érv telt a program neve után.
Tehát itt azt látjuk, hogy ez egy hibás programot, mert, ha megpróbáljuk futtatni
nélkül érvek akkor csak összeomlik.
>> Így egy másik közös vonása látni fogod olyasmi, mint, ha argc kevésbé
mint két, jelezve, hogy nem volt legalább a program nevét, és a
az első érv, aztán valami mint a printf, nem elég
parancssori paramétereket.
Ez valószínűleg nem egy jó nyomtatni, ez talán valami, mint a
meg kell adnunk egy egész számot a parancssorban.
Én csak a végén ott.
És akkor vissza 1.
Úgy emlékszem, hogy a végén a mi programot, ha vissza 0, ez a fajta
jelzi sikerét.
És a fő automatikusan értéke 0, ha nem.
>> Tehát itt, mi retuning 1 jelzi , hogy ez nem a siker.
És akkor vissza, amit akarsz, csak, 0 jelzi siker, és
mást jelez.
Szóval futni ezt a verziót a dolgok.
Tehát most, ha nem adja meg a parancssort érv, akkor az pontosan mondani
Számunkra nem elég parancssorban.
Nem fejezte be a mondatot.
Máskülönben, ha valóban át ez az egyik, akkor a program elvégzéséhez.
Tehát ez hogyan fogja használni argc a annak érdekében, hogy érvényesítse a számát
parancssori argumentumokat valóban át.
>> Szóval, hogy ez a program egy kicsit bonyolult, és nézd meg a második
iteráció a dolgok.
Tehát most, mi nem csak a nyomtatás a első parancssori argumentum.
Itt vagyunk iterációjával az int i értéke 0, i kevesebb, mint argc, I Plus
plusz, és a nyomtatás argv, i index.
Tehát ezt a mintát, megint ez ugyanaz minta, mint korábban, kivéve, hogy
hívja a változó n, mi használ argc.
>> Tehát ez az iterációt minden index a tömb, és a nyomtatás minden
eleme, hogy a tömbben.
És így, amikor fut a program, nos, Én nem lépett be semmilyen parancsot
érvek, így csak nyomtat a program nevét.
Ha én meg egy csomó dolgot, akkor az kinyomtathat egy, mindegyik külön sorban.
>> OK.
Szóval vessünk egy lépéssel tovább.
És ahelyett, hogy a nyomtatás minden érvelés külön sorban, hadd nyomtassa minden
karakter minden egyes érvelés külön sorban.
Úgy emlékszem, hogy argv az egy sor húrok.
Tehát mi az a szöveg, de a egy sor karaktereket?
Tehát ez azt jelenti, hogy argv valójában egy tömb egy sor karakter.
Szóval, kihasználva, hogy a nézzük figyelmen kívül hagyja ezt most.
Nézzük csak úgy a karakterlánc argv 0-ra.
>> Tehát, ha azt akarjuk, hogy minden egyes karakter argv 0 külön sorba, akkor azt akarom,
hogy ezt a mintát vagyunk szokva, i kevesebb, mint a hossza a tömb,
ami itt, az strlen az, ami nem az, amit akarok, string
s egyenlő argv 0-ra.
Tehát i kisebb, mint a hossza a mi tömb, amely ebben az esetben egy tömb
karakterekből i plus plus.
És így, ahogy azt a múlt héten, ez ideális ha megyünk, hogy strlen kívül
Az a feltétel, hiszen n lesz hozzá a strlen s minden alkalommal megyünk
a hurok, és ez nem fog változni.
Így fogjuk állítani egyenlő n ide.
>> OK.
Tehát most, mi az iterációt minden index a tömbben.
És így, ha azt akarjuk, hogy nyomtassa ki az összes karakter ebben a tömbben, százalék c
A zászlót szeretnénk használni karakterek.
És most egy konzol i lesz a string index i karaktert, így ha a
karakterlánc voltak helló.
akkor s 0 lesz h, s konzol 1 e lesz, és így tovább.
>> Tehát most szeretnénk kombinálni ez a két dolog.
Szeretnénk nyomtatni minden egyes karakter Az egyes parancssori argumentum.
Szóval megy, hogy a beágyazott a hurok.
És hagyományosan, az első számláló Én vagyok az, a következő lesz j, n
lesz a strlen az argv én, én kisebb, mint az n-, i plusz plusz.
És most, ahelyett, hogy a nyomtatás argv i, így argv konzol i fog index -
ez lesz az i-edik parancssori érv, argv i, j fog
a j-edik karaktere Az i-edik érv.
Én megszabadulni ez itt most már mivel tedd abba a hurok.
Tehát egyenértékű string s egyenlő argv i, majd s konzol j.
>> Nos, nem kell bejelenteni ezt a változót s.
Ehelyett, akkor csak össze ezeket Két abba, hogy mi volt, argv i, j.
>> SPEAKER 1: [hallható].
>> ROB Boden: Jó döntés.
Szóval ez van törve.
Ha valóban futott, mi lenne felismerték ezt.
Tehát a számláló törődöm ebben különösen
hurok j, a bejáró.
Szóval volna befut kérdések, valószínűleg egy végtelen ciklusba, ha
nem rögzítette ezt.
Ezért mi is beszélünk a hibakeresés ma.
>> OK.
Szóval a program futtatásához.
És nézzük valóban hozzá egy külön printf itt, hogy csak nyomtatni
másik vonalon, hiszen ez azt jelenti, ha a program futtatásához, lesz egy üres
vonal egymástól jellege Minden parancssori argumentum.
Nos, majd meglátjuk, hogy ez mit jelent.
Hopp.
Van egy kis hiba.
Hiba burkoltan kijelentette könyvtári funkció strlen.
>> Szóval, megy vissza a programot, azt Elfelejtettem hash tartalmazza string.h.
Tehát string.h lesz a header fájlt, amely kijelenti,
A funkció strlen.
OK, azt állítja össze.
Na, fussunk neki.
Szóval, csak ezt.
Ez lesz, hogy nyomtassa ki a program nevét, hello world.
Ez a nyomdába minden dolog, minden karakter, külön sorban.
OK.
>> Szóval tulajdonképpen ezt egy lépéssel tovább.
És ahelyett, hogy a string.h, nézzük gondolni, hogy mi lenne végre a saját
strlen funkciót.
Szóval akkor azonnal adni funkció aláírást.
Szóval hívja my_strlen, és ez megy, hogy egy sor, mint egy érv,
és azt várjuk, hogy visszatérjen a hosszát, hogy a húr.
Szóval, hol van az a srác?
Igen.
OK.
Úgy emlékszem a korábbi diát, volt a múlt héten, hogy az
tömb karakter, nos, egy string, Mondjuk, ez a string s.
Tehát, ha s az a karakterlánc, hello, akkor, H-E-L-L-O, a memóriában, hogy fog
lenni, és akkor ez a backslash 0. karakter.
>> Szóval hogyan jutunk hosszát s?
Nos, a trükk keresi ezt holtjáték 0 karakter, ez a null
terminátor.
Tehát az algoritmus lesz hogy valami hasonló pár
Elég karakterek -
vessünk ennek a keze képviselik számláló, nevezzük ezt int hossza.
Tehát, kezdve itt vagyunk fog iterációkhoz a string.
>> Tehát az első karakter, ez a H, és ez nem jött vissza perjel 0, így
hossza 1 lehet.
Hajtogat, hogy a következő karakter, E, és ez nem backslash 0-ra.
Hossza 2.
L 3.
L 4.
O 5.
És végül, elérjük backslash 0, és így ez azt jelenti, nos,
ez a szöveg vége.
Tehát térjünk vissza 5.
>> Tehát tulajdonképpen végrehajtó, az első, az n hosszúságú értéke 0, a jobb kezem.
És fogunk iterációkhoz -
>> SPEAKER 1: [Nem hallható]
>> ROB Boden: Ó, lő.
Jó ötlet.
Boom.
Tehát n hosszúságú értéke 0-ra.
Tehát most, míg s hossza nem azonos majd backslash 0-ra.
Úgy emlékszem, ez a backslash 0, ez egy tényleges karakter, és ez azt jelzi,
a végén a húr.
Csakúgy, mint a szintén, backslash n tényleges karakter.
Backslash 0 lesz, jelezve, végén a húr.
Nem akarom, hogy, hogy van.
És míg s indexelve hossza nem egyenlő a null terminátor, majd
mi csak úgy növelni hosszát.
Tehát, a végén a program hossza végül fog
5 legyen ebben az esetben.
És akkor csak vissza hossza.
>> OK.
Tehát most itt, én nem do my_strlen.
Nézzük össze, hogy megbizonyosodjon arról, minden zökkenőmentesen menjen végbe.
Csináltam 2?
Vagy, hogy az 1?
Hogy kell csinálni.
Rendben van.
Tehát ez argv 2.
Működik, mint várható, annak ellenére, az volt, hogy az egyik én azt?
Igen.
OK.
Ez a verzió a dolgok nem voltak Az printf új vonal után, de a
nem tesz különbséget.
OK.
Így dolgozott, mint várták.
>> Most már mi is össze egy lépéssel tovább, ahol az értesítést itt is,
először, mi megragadta a strlen az argv i, és mi az iterációt
minden karakter, hogy a húr.
Tehát ahelyett, hogy mi lenne, ha csak össze ezt a logikát a várakozás
amíg elérünk backslash 0 jobb ebbe a hurok?
Így ismételget míg argv i, j nem nem egyenlő backslash 0-ra.
Tehát fussunk neki először.
>> Rendben van.
Tehát itt, ez a feltétel azt mondja -
tisztázzuk ezt.
Tehát most, legyen ez a mi argv.
Tehát amikor én csak futott, hogy a program előtt, argv tömb a szálakat.
És így, ha elindul a dot slash argv 2, hello world, akkor a argv
maga hossza 3, az argv nulla, hello, és a világ.
>> És belsejében minden egyes ilyen indexek, maga is egy tömb, amelyben ez lesz
dot, ez lesz slash, nem tudom, ha ez volt a helyes irányba, azt
Nem hiszem, hogy az volt.
A-R-V kötőjel, több helyre van szüksége.
Vágjuk ebbe a tömbbe.
A-R-V kötőjel 0, majd backslash 0-ra.
És akkor rendetlenség lesz helló.
Mondjuk, H-E backslash 0-ra.
És végül, W-O backslash 0-ra.
>> Tehát az algoritmus, amit csak írt, A beágyazott a hurok, amit ők
ennek az, hogy először a számláló i, majd a j.
Ez lenne könnyebb kódot a képernyőn Menjünk vissza ehhez.
OK.
Tehát észre, hogy én az a bejáró, ami iterációt minden parancs
argumentum.
És j az iterátor iterációjával az egyes karaktert, hogy
parancssori argumentum.
Szóval mi ez a legbelső printf csinál van, mi printf argv 0 0, printf
argv 0 1, printf argv 0 2 0 3 0 4, 0 5, 0 6, de most, argv 0 7 fog
egyenlő backslash 0-ra.
>> Szóval, akkor lépjen ki, hogy hurok, és most én Végig 1-re.
És most mi lesz a nyomtatási argv 1 0, argv 1 1 -
Nos, mivel én vágott helló rövid, argv 1 2 ismét lesz
backslash 0-ra.
És így, megnöveljük i és továbbra is, és így tovább, amíg ki kell nyomtatni az összes
a világ, és a három parancssor érveket, és mi lépjen ki a
A legkülső hurok, és befejezni a programot.
OK.
>> Úgyhogy gyere vissza.
Tehát akkor szert jártasságot parancssori argumentumok ezen
adott probléma beállítva.
>> Most, hibakeresés.
Így talán már kellett tennie Néhány hibakeresés a korábbi
probléma meg.
És egy nagyon egyszerű módja a hibakeresés, Először is, nézzük meg a hibás programot.
Nos, séta a program, fogunk kérni a felhasználót egy
egész, megragad, hogy egész, majd önkényesen, van egy while ciklus, amely
csak megy, hogy csökkentse Én, amíg ez egyenlő 10-ig.
Nézzük csak fel, én belépő egy 10-nél nagyobb egész szám.
Így csökkentse azt, amíg ez egyenlő 10-ig.
>> És akkor még egy while ciklus , hogy bár én nem egyenlő 0, vagyunk
majd csökkentse i 3.
Tehát, ha úgy látja, a szándék a hiba itt, az az, hogy ez majd csökkentse i
10, és akkor ez a while ciklus lesz dekrementálás i 10, 7, 4, 1,
a negatív 2, 5 a negatív, és így tovább, a negatív végtelen, mert én is
soha nem egyenlő 0-ra.
És akkor a végén ezt a programot, mi van a foo függvény, amely
folyik a nyomtatás, hogy én.
>> Tehát ez egy rövid és triviális program és a hiba nyilvánvaló,
különösen azután, hogy én csak azt mondta, amit a hiba volt.
De a szándék itt is, nos, ez talán valóban úgy néz ki, mint néhány
megoldások kapzsi az utolsó probléma meg, és talán te is,
Néhány végtelen ciklusba a programban, , és fogalmad sincs,
mi okozza.
Tehát egy nagyon hasznos hibakereső módszer az, hogy csak add printf
az egész a kódot.
>> Tehát itt akarok printf kívül első while ciklus.
És itt szeretnék egy printf, és én csak nyomtatni i.
Én még nem első while ciklus, i.
Kívül, a második while ciklus.
Még egyszer, nyomtassa belül innen, az érték azt.
És nézzük futtatásához.
>> Tehát pont perjel debug.
Adjon meg egy egész számot.
Csináljuk 13.
És bumm.
Látjuk, hogy mi vagyunk a végtelen hurok belül a második while ciklus.
Most már tudjuk, hogy mi a hiba.
De printf hibakeresés tökéletesen jó, de ha egyszer a programokat, hogy
hosszabb és bonyolultabb, vannak kifinomultabb megoldások
szerzés dolog működik.
Szóval távolítsa el ezeket a printf.
És nézzük, hogy biztos, hogy nem törj össze semmit.
OK.
>> Így a program megyünk bevezetni az úgynevezett
GDB, GNU Debugger.
Nos, valóban, hadd vegye hibakeresés a a második, és a debug újra.
Nos, tulajdonképpen az első, egy jó lecke a parancssori paramétereket.
Figyeljük meg, hogy ez a csenget a parancs, hogy összeállítása minden továbbadása
a parancssorban, ezek parancssori paramétereket.
Tehát pontosan hogyan fog használni parancssori paramétereket, mint mi
korábban, és mint akkor a Pset 2, ez hogyan csenget is használja őket.
>> Tehát észre, hogy ez az első zászlót, kötőjel ggdb3, mi ez mondani, csenget,
meg kell fordítani ezt a fájlt a szándékkal, hogy előbb-utóbb
kell debug meg.
Tehát, amíg van, hogy a zászló, akkor mi is GDB hibakereső.
És akkor nyissa meg a GNU Debugger.
>> Tehát van egy csomó parancsok , hogy meg kell szokni.
Először az egyik, hogy akkor valószínűleg azonnal szüksége van Run.
Tehát mi a Run fog csinálni?
Meg fog kezdeni a programot.
Úgy fussatok, kezdve, a program kéri tőlünk, egy egész, 13.
És akkor ez a végtelen hurok, mint várható, kivéve, eltávolították a
printf, ezért nem is látni.
Kilépett rendesen.
Oh.
Lehetséges, hogy csomagolva a fordítva, vissza - figyelmen kívül hagyva, hogy az.
Tegyük fel, hogy nem léphet ki rendesen.
Van egy bonyolult választ.
>> Tehát most, ez nem túl hasznos.
Tehát csak futó programunk belsejében ez a debugger nem segít minket minden
módon, hiszen lehetett volna most tett dot slash hibakeresési kívülről GDB.
Tehát az egy parancsot, hogy akkor talán -
és én kilép ezt.
Control-d, vagy kilép, mind a munka.
Szóval nyisd ki újra.
>> Egy másik parancs, hogy akkor valószínűleg azonnal szeretné
szokni a szünet.
Így fogunk törni a legfontosabb most, majd leírom ezt.
Nos, itt azt látjuk, mi meg a töréspontot ebben a sorban debug.c.
Tehát mi szünet azt jelenti, hogy amikor én írja távon a program fog
tovább fut, amíg Elütöttem egy töréspont.
Tehát amikor elütöttem távon a program elindul, majd eltörik, amint
belép a fő funkciója.
Szünet fő lesz valami akkor elég gyakran csinálni.
>> És most, hogy mutassam be néhány több parancsot.
Figyeljük meg itt, hogy mondja meg tört at line 11, amely a
printf, meg egy egész szám.
Tehát a parancs következő lesz, hogy megyünk a következő kódsort.
Ez most lehetővé teszi számunkra, hogy lépést keresztül a program sorról sorra.
Így a következő.
>> Most 12. sorban, megyünk hogy az egész.
Tovább.
És ha csak nyomd meg az Enter gombot, akkor az A legutolsó dolog, amit tett.
Szóval nem kell beírni következő minden egyes alkalommal.
Tehát meg egy egész szám, 13..
Tehát most, 14. sor, miközben a nagyobb mint 10, és én csinálni.
És azt látjuk, megyünk csökkentse i.
Így fogunk csökkentse i újra.
>> Tehát most, egy másik hasznos parancs Print.
Tehát Print fog kinyomtatni a változó értéke.
Hozzuk ki az értéket Az i változó.
Nézzük nyomtatni i.
Azt fogja mondani i 11.
Most ismét a Tovább gombra, amíg i értéke nagyobb, mint 10.
Tehát én még mindig nagyobb, mint 10., mivel ez a 11..
i mínusz mínusz.
Nézzük nyomtassa i újra.
Ahogy az várható volt, ez 10.
>> Tehát most, a következő.
Ez megy vissza az a feltétele, i nagyobb, mint 10, de én most 10, így
ez nem nagyobb, mint 10, így azt várjuk hogy kiesik a while ciklus.
És most mi vagyunk az alábbiakban, hogy sor kódot.
És egy másik parancs, lista, csak megy gombot az előző és a következő
pár sornyi kódot, a esetben, ha elvesztette magát.
Szóval csak elhagyta ezt a while ciklus, és most már be ezt a
while ciklus, 18. sor.
Tehát amíg én nem egyenlő 0-ra.
És a következő, az i értéke i mínusz 3, és mi észre, ez akkor csak menj tovább.
És mi lehet nyomtatni i.
>> Minden parancs fajta van hivatkozások.
Tehát p rövid a Print.
Így lehet p i.
Csak ne holding n, vagy csinálom a Tovább gombra.
Print megint.
Látod, most már a negatív 167.
Tehát ez megy a végtelenségig, de nem tényleg örökre, mert most láttam, hogy
valóban véget egy bizonyos ponton.
>> Annak érdekében, hogy kezd GDB.
De tegyük még egy dolog a GDB.
Uh, debug.
Tehát, ebben a konkrét esetben a végtelen ciklusba történetesen belsejében
a fő funkciója.
És most, csak fogadd el, hogy én vagyok költözik a végtelen hurkot
A foo függvény.
Ne feledd, hogy a végén ez programot, nos, ez eredetileg
hívás foo, ami csak nyomdába i.
De most mi hívás ize, ami majd csökkentse azt, amíg ez 0, és
majd nyomtassa ki a változó.
OK.
Kivéve, hogy.
Legyen debug.
És most, gdb debug.
OK.
>> Tehát, ha én csak futni, akkor én nem fogok tudja, hogy ténylegesen lépni az én
programot line-by-line.
Tehát Nézzük a legfontosabb, majd írja futni.
Így végig ezt, printf adja egy egész, hogy a egész, 13..
Így fogjuk tartani csökkentő amíg az i nagyobb, mint 10 um.
Majd megyünk esik át a while ciklus, és kap a vonal -
nyissuk fel egy külön ablakban.
Így csökkenhet, míg én már nem volt nagyobb, mint 10, és aztán
úgynevezett funkció ize.
>> Szóval, mi történt, amint azt hit function ize, nos, az úgynevezett ize, és
akkor már nem volt felett GDB.
Tehát, amint hit Next ezt a sort, a dolgok egészen ez történt,
ahol a program kilépett, amikor -
Feltételezem, hogy nem létezik végül.
Láttad szünet egy kicsit mégis.
Akkor miért nem vesztek felett a program ezen a ponton?
Nos, amikor azt írja továbbá, hogy megy A szó szerinti következő kódsort, hogy
végrehajtja.
Szóval miután line 21, a következő kódsor , amely végrehajtja a 22. sor,
mely, kilépéskor fő.
Szóval nem akarom, hogy csak menni a következő kódsort.
Azt akarom, hogy menjen be a funkciót, ize, és akkor is át lehet lépni
azok sornyi kódot.
>> Tehát az, hogy van egy másik.
Nézzük kilép újra.
Szünet fő.
Uh, 1, a következő, a következő, a 13., a következő, a következő, a következő, óvatosan,
mielőtt elérünk vonal foo.
OK.
>> Most vagyunk a sorban a 21., ahol meghívhatjuk az ize.
Nem akarjuk, hogy írja be a következő, mivel ez majd csak hívja a function ize, és
megy a következő kódsort.
Mi azt akarjuk, hogy a lépés.
Szóval van egy különbség a Step és a következő, ahol a lépés belép a
működik, és a következő megy át a funkciót.
Ez csak végrehajtja a teljes egészében a funkció és folyamatosan megy.
>> Tehát Step fog hozni minket a funkciót, ize.
És azt látjuk, itt, most, mi vissza ez a while ciklus, ami elméletileg,
folytatódni fog örökké.
És ha bejön lépésben, ha még csak nem is egy függvényt hívni, akkor ez
megegyezik a Tovább gombra.
Tehát ez csak, ha éppen egy sort, hogy hív egy függvényt, Step
fog eltér a Tovább gombra.
Így Step fog minket.
Lépés, lépés, lépés, lépés, lépés, lépés, és mi csak végtelen ciklusba örökre.
>> Szóval lehet szokni, hogy az Ön azonosításának módját végtelen hurkok, az
csak tartja ezt az Enter billentyűt hol elakad.
Vannak jobb módja van, de most, hogy tökéletesen elegendő.
És stílusa, hogy megfeleljenek a stílus 50, azt kellett volna ezt.
OK.
>> Tehát az egyik utolsó parancs bevezetni.
Nos, a gdb hibakereső be
Tehát ahelyett, hogy a törés a fő, ha ismeri a foo funkció is a
probléma, akkor tudtam volna, csak mondta, break at ize helyett.
Tegyük fel, hogy eltörnek mind a fő-és ize.
Így be annyi töréspont amennyit csak akar.
Amikor azt írja futni, ez lesz megállítani a -
ó, hadd újrafordítani, hiszen Megváltoztattam a dolgokat.
Majd meglátod ezt a sort, figyelmeztetés, forrás fájl újabb, mint futtatható.
Tehát ez azt jelenti, hogy most ment itt és megváltoztatta ezek megfelelnek a stílus
50, de nem újrafordítani a programot.
Tehát GDB tesz engem vele.
Majd kilép, hogy hibakeresés ismét hit gdb debug.
OK.
>> Tehát most, vissza, mit csinálok.
Szünet fő, szünet ize.
Most, ha a program futtatásához, így folytatjuk, amíg eléri a
töréspont.
Ez a töréspont történik az első, aki a legfontosabb.
Most, ahelyett, hogy a következő, a következő, a következő, next, next, amíg elütöttem ize, azt
írja is, amely továbbra is amíg el nem éred a következő töréspont.
Azt meg kell adnia az egész első.
Folytassa addig folytatódik, amíg elütöttem a következő töréspont, ami az, hogy
funkciója ize.
>> Így Run-ig tart bejön a töréspont, de csak akkor írja be a Futtatás
kezded a programot, majd attól kezdve, hogy folytassa.
Ha csak nem törik a fő-és akkor futott, akkor eltöröm a
fő-, majd folytassa.
Mivel én nem egy töréspontot a foo, adja meg az egész, akkor most én vagyok
nem fog megtörni az ize.
Ez csak megy, hogy végtelen loop addig.
OK.
>> Szóval ez Intro a GDB.
Meg kell kezdeni a meg a probléma készletek.
Ez nagyon hasznos lehet azonosítani a hibákat.
Ha valóban csak, line-by-line, go át a kódot, és hasonlítsa össze mi
valójában történik, mit vársz történik, akkor ez elég
Nehéz nem észrevenni a hibákat.
OK.
>> Így a múlt héten Dávid hozta fel ezt a titkos kulcsú dolgot a
első alkalommal, amikor nem akarjuk jelszavakat csak kell tárolni a
számítógép néhány egyszerű szöveges fájl, ahol a valaki tud jönni, és csak
nyissa fel, és olvassa el.
Ideális esetben lennének titkosítva valamilyen módon.
És a probléma Set 2, akkor lehet szó az egyik módszer a titkosítás,
vagy, nos, a két módszer, de ezek nem olyan nagy.
Ha a hacker kiadás, akkor is lesz szó
dekódolás néhány dolgot.
>> Tehát a kérdés most az, nos, akkor is, ha mi van a legerősebb titkosítási
algoritmus a világon, ha úgy dönt a különösen rossz jelszót, akkor
nem segít túl sokat, mivel az emberek továbbra is képes kitalálni.
Ha látta a titkosított karaktersorozatot és úgy néz ki, mint a rendetlenség szemetet
ez semmit sem jelent számukra, ha még csak meg kell próbálni néhány jelszó
kitalálni, akkor nem túl biztonságos.
Így néz egy video, hogy teszi, hogy a pont.
>> [VIDEÓ LEJÁTSZÁS]
>> -Helmet, te gazember.
Mi folyik itt?
Mit csinálsz a lányommal?
>> -Engedje meg, hogy bemutassam a ragyogó fiatal plasztikai sebész, Dr. Phillip
Schlotkin, a legnagyobb orr munkahely férfi az egész
világegyetem, Beverly Hills.
>> -Felség.
>> -Orr munkát?
Nem értem.
Ő már volt egy orr munkát.
Ez egy édes tizenhat jelen van.
>> -No.
Ez nem az, amire gondolsz.
Sokkal, sokkal rosszabb.
Ha nem adja meg a kombináció a levegő pajzs, Dr. Schlotkin fog
adja a lányát vissza a régi orrát.
>> -No.
Hol szerezted ezt?
>> -Rendben.
Megmondom.
Nem, apu.
Nem, nem szabad.
>> -Igazad van, kedvesem.
Hiányozni fog az új orrát.
De nem fogom elmondani neki a kombináció, nem számít, mit.
>> -Nagyon jól.
Dr. Schlotkin, nem a legrosszabb.
>> -Szívesen.
>> [Munkagépek kihegyezett]
>> -No.
Várjon.
Megmondom.
>> -Tudtam, hogy ez működni fog.
Rendben van.
Add ide nekem.
>> -A kombináció egy.
>> -One.
>> -Kettő.
>> -Három.
>> Hatvankilenc.
>> -Öt.
>> -Tehát a kombináció egy, kettő, három, négy, öt.
Ez a leghülyébb kombináció , Amit valaha hallottam életemben.
Ez az a fajta dolog, amit egy idióta volna az ő poggyász.
>> Köszönöm, Felség.
>> -Mit csináltál?
>> -Kikapcsoltam a falat.
>> -Nem, nem.
Ha ki van kapcsolva az egész filmet.
>> -Azt kell nyomni a megfelelő gombot.
>> Nos, tedd vissza.
Tedd a filmet vissza.
>> -Igen, uram.
Igen, uram.
>> -Menjünk, Arnold.
Gyere, Gretchen.
Persze, tudom, hogy akkor is kell a számla kiállításához ezt.
>> [END VIDEÓ LEJÁTSZÁS]
>> ROB Boden: Rendben.
Most, hogy mi már beszélünk biztonság bizonyos szempontból, szép
kis film plakát, így az elmúlt nap, ezek a kérdések az NSA
nyomon mindent.
Nehéz lehet, hogy úgy érzi, mint te valamiféle magánélet
online világban, bár azt nem tudta megmondani leginkább a részleteket PRISM.
Tehát túllépve PRISM, nem megyünk meg kell beszélni, hogy most
gondolj a laptop.
Tehát itt, szeretnék váltani hogy a tényleges számla,
az én kis pingvin.
Szóval van egy jelszó beállítva, és hogy jelszó, amit akarok, hogy legyen.
>> De ne feledjük, hogy amit én fakitermelés be, így ez a login
prompt, néhány programot.
Ez valami program volt írta néhány személy.
És így, hogy az a személy, amennyiben különösen a rosszindulatú, tudtak
azt mondta, rendben, így ha a jelszó hogy meg egyenlő a
aktuális jelszót, vagy ez egyenlő Egyes speciális jelszót -
David félelmetes, vagy valami -
majd hagyd, hogy be
Így egy rosszindulatú programozó volna hozzáférést biztosít az összes Mac, vagy a
A Windows, vagy bármi.
>> Szóval ez nem nagy aggodalomra ad okot, hiszen Úgy értem, ez a login program
ami szállított OS X, több száz vagy több ezer ember
felül ezt a kódot.
És így, ha a kódot valahol, akkor azt mondják, ha ez a karakterlánc egyenlő az egyenlők
David félelmetes, login, akkor valaki lesz, mint, várj.
Ez nem helyes.
Ez nem lehet itt.
Tehát ez az egyik módja annak, hogy a dolgokat hogy milyen biztonságos.
>> De gondolj még programok hogy írsz.
Tegyük fel, hogy azt írta a login programot.
Szóval ez a login programot, amit írt, Tehát nyilvánvaló, hogy van egy jó
programozó.
Ugye nem megy, hogy a rosszindulatú ha x értéke egyenlő David félelmetes
be a kódot.
De ez a program, mit használni fordítani ezt a programot?
Valami ilyesmi csenget.
Mi van, ha az a személy, aki történetesen levelet csenget speciális tokozású csenget
valami ilyesmit, ha én vagyok összeállítása be a program, majd adja meg a kódot
a login programot, amely azt mondja, ha a x értéke egyenlő David félelmetes?
Tehát még nem teljesen, de ugyanaz a kérdés itt, ahol csenget, nos,
ezer, ha nem több tízezer ember nézett csenget, van
nézett a sornyi kódot, és azt mondta, minden rendben, nincs semmi rossz itt.
Nyilvánvaló, hogy senki nem csinál semmit a rosszindulatú.
>> De mi van csattanással is, mint mi van, ha össze csenget?
Mit tegyek, ha van néhány fordítónak, hogy lefordul csenget, hogy szúr a csenget
ezt a különleges hack, amely azt mondja, minden rendben, amikor össze csenget, majd a
futtatható kapok meg kell külön keresni belül a login programot és betét
ezt a jelszót, egyenlő az egyenlők Dave félelmetes?
Úgy emlékszem, hogy a fordító maga kell összeállítani egy bizonyos ponton.
Tehát, ha az, amit úgy dönt, hogy össze csenget is, maga a rosszindulatú, akkor
lehet csavarni az egész út le a pályáról.
>> Tehát itt van Ken Thompson és Dennis Ritchie.
Tehát ez egy ikonikus fénykép.
Dennis Ritchie a jobb oldalon.
Ő az egyik legfontosabb -
nagyon sokat írt C, így köszönöm neki ezt az osztályt.
Ken Thomson van a bal oldalon.
A kettő alapvetően írta UNIX.
Nos, voltak nagy szerepük UNIX.
Voltak mások.
Tehát Ken Thompson, egy bizonyos ponton, megnyeri a Turing-díjat.
És a Turing-díjat, én mindig hallottam úgy hivatkozott így, ez a
Nobel-díj a számítógép-tudomány.
>> Tehát a Turing-díjat, ő a adja az ő beszédében.
És ő adja ezt a nagyon híres beszéd Most hívott Gondolatok Bízva
Trust, amely már kapcsolódik Ahhoz, hogy a pályán honlapján.
És ez a beszéd, azt mondja, jól van, ezért írtam UNIX, és most minden
Ön ember használja UNIX.
Nos, ne feledje, ma, hogy a Linux közvetlen leszármazottja UNIX.
OS X közvetlenül használja UNIX.
A Windows nem annyira, de a sok Az ötletet vett UNIX.
>> Így aztán felmegy a színpadra, és azt mondja, Rendben, írtam UNIX.
És csak hogy tudjátok, én vagyok tud bejelentkezni a minden
egyetlen egy számítógépen.
Mivel tettem egy ilyen különleges, ha x értéke egyenlő Ken Thomson félelmetes,
akkor én szabad belépni.
Tehát az emberek olyanok, mint, nos, Hogy csináltad?
Megnéztük a login programot és semmi sem ott van.
Olyan, mint, nos, én módosította a fordító hogy jelentkezzen be a login programot
így a login program most lesz hogy x értéke egyenlő Ken Thompson
félelmetes.
>> És azt mondják, jó, ez nem igaz.
Keressük a fordító, és a fordító nincs vonalak
kód ilyesmi.
Olyan, mint, rendben van, de mi van összeállítása a fordító az?
És azt hiszik, és ő, mint, nos, Én vagyok az, aki adta a fordító
Ön használja fordítani a fordító, így akkor összeállítása a fordító, hogy
Maga rosszindulatú, és megtörni a login programot.
Tehát alapvetően, ezen a ponton, ott van Nincs mód arra, hogy nézd meg a forrást
kódja login programot , hogy mi a baj.
Lehet nem is néz ki a forráskódját a fordító
, hogy mi a baj.
>> Meg kellene nézni a gépen kódot, a tényleges bináris a
össze fordító látni, várj, ezek sornyi kódot nem kellene itt lennie.
De Ken Thompson lépett egy lépéssel tovább, és azt mondta, jól van
ezek a speciális programok, amelyek ténylegesen segít olvassa el a bináris programok,
és így ha valaki használják, hogy a program olvassa el a bináris, akkor ezeket a
sornyi kódot.
Úgy módosították a programok mondani, minden jobb, ha ránézünk a
fordító, ne jelenjen meg az adott meg a bináris.
>> Szóval, akkor meg kell, hogy ezt a lépést tovább, és alapvetően, hogy lehetett volna
venni többszintű indirekció, és egy bizonyos ponton, senki valójában
lesz ellenőrzés.
Tehát a történet tanulsága az, hogy te nem fog írni
Csattanással ebben az osztályban.
Fogsz használni hegymászás Csattanással sokat ebben az osztályban.
Minden tudod, csenget egy rosszindulatú program, amely szabotálja minden
egyetlen program, amit valaha is össze.
És hagyom, hogy a nagyon baljós figyelmét, találkozunk szerdán.
>> [Taps]
>> SPEAKER 2: A következő CS50.
>> SPEAKER 3: Nem merem mondani, hogy.
Meg tudod csinálni.
Ha már ilyet, meg tudod csinálni ma, meg tudod csinálni holnap.
Már ezt évek óta.
Csak menj oda, és erre a célra.
Meg tudod csinálni.
>> [MUSIC Playing]