>> [MUSIC PLAYING]
>> Rob Boden: Bütün hüququ.
Video ilk Belə ki, ilk şey, bir tanış üz.
>> [Video playback]
>> -Bütün hüququ.
Bu CS50, və bu Həftə üç start.
Mən sizinlə ola bilməz üzgünüm Bu gün, amma mənə təqdim etməyə imkan verir
CS50 öz Rob Boden.
>> [END Video playback]
>> [Alqış və alqış]
>> Rob Boden: The Filmoqrafiya ki, video fantastik edir.
Bütün hüquqlar.
Belə ki, ilk, bir nahar var.
Bu 1:15 sabah var.
Bu cümə bir nahar var.
Bu Quora ilə.
Və Tommy bir, lakin, hələ burada deyil keçmiş rəhbəri CF var insanlar,
Tommy McWilliam.
Belə ki, o bir əyləncə oğlan var.
Siz gəlməlidir.
>> Bütün hüquqlar.
Belə ki, ötən həftə biz ayrı qıraraq başlayan bir string həqiqətən nə haqqında.
Biz başından bəri məlum etdik ki, Bu simvol bir ardıcıllıqla var.
Amma keçən həftə, biz əslində delved nə həqiqətən bir ardıcıllıqla ki,
simvol, yaxşı, biz indi simvol Diziler.
Və biz bir string, bir sıra var bilirik ki, simvol, çox sonunda,
biz bu xüsusi null byte var, bu backslash 0 ki, son of göstərir
simli.
>> Və belə bir string bir sıra edir simvol, lakin biz daha çox
simvol yalnız bir array, biz hər hansı bir sıra ola bilər
biz istəyirik şey növü.
Belə ki, ötən həftə geri əgər David təqdim edən Çağlar proqram
həqiqətən tez.
Biz nə olacaq Belə ki, ilk şey , tam üçün istifadəçi xahiş
oda insanların sayı.
Biz tam var, biz bir sıra elan edirik.
Bu bracket sintaksis bildiriş.
Siz istifadə almaq olacaq.
>> Beləliklə, biz integers bir sıra elan edirik yaş adlanır və n var
Bu array integers.
Burada Belə ki, bu model, bu 4 int i i plus, i az n edir, 0 bərabərdir
plus, həmçinin bir model olacaq çox üçün istifadə almaq.
Ki, olduqca çox siz necə çünki həmişə serialların üzərində təkrarlamaq üçün gedir.
Belə ki, n ki xatırlayıram bizim serialın uzunluğu.
Və belə ki, burada biz dəfələrlə xahiş olunur otaqda adam i yaş üçün.
>> Bundan sonra, biz aşağı getmək və nə üçün ixtiyari səbəbi, biz sonra
onlar olacaq nə qədər köhnə çap İndi bir il olacaq.
Və proqram çalışan edək , yaş etmək çizgi yaş nöqtə.
Belə ki, oda insanların sayı, üç var deyək.
Və ilk şəxs 13, demək Növbəti 26 və son 30.
Belə ki, o, həmin üç təkrarlamaq lazımdır nəfər, 14 həyata 27 və 31 çap.
>> Belə ki, unutmayın ki, biz bir zaman bəyan ölçüsü n array, ki indeksləri
array, array dəyərləri var və indeksləri 0, 1, 2, bütün yol
up n minus 1.
Beləliklə, biz dedi üç nəfər var idi otaqda, və biz burada qoymaq
Bu vasitəsilə ilk iteration loop, i 0 olacaq.
Belə ki, index 0.
Biz ilk təyin olunur istifadəçi daxil yaş.
Sonra növbəti bir, biz daxil olduğunuz ikinci n istifadəçi daxil, və
iki, son n yanında.
>> Belə ki, fark ölçüsü bir array üç şey yoxdur
indeksi üç.
Bu düzgün deyil.
Bütün hüquqlar.
Belə ki, burada geri gedir.
Belə ki, indi biz Diziler bəhs etdik ki, biz bəzi tanışlıq var.
İndi biz komanda üçün hərəkət olacaq olacaq olan line dəlilləri,
Bu problem set olduqca müvafiq.
>> Belə ki, indi qədər, zaman var Sizin əsas funksiyası elan, biz var
int main etibarsız etdi.
Belə ki, etibarsız yalnız deməkdir ki, Biz hər hansı bir keçən deyil
Bu funksiya arqumentlər.
İndi biz əsas görmək olacaq bəzi arqumentlər bilər.
Burada argc int onlara zəng və simli argv mötərizədə.
Mötərizədə, bir daha ifadə biz serialların ilə məşğul olduğunuz.
Belə ki, burada, simli argv Mötərizədə, biz istəyirik strings bir sıra ilə məşğul.
Belə argc göstərir ki, olacaq biz etdik neçə arqumentlər
Bu proqram keçdi.
Və o deməkdir ki, nə Bu yaxın qoy.
>> OK.
Belə ki, indi qədər, biz hər run etdik dot çizgi yaş kimi proqram.
Biz həmçinin, command line, keçmiş dəlilləri qəbul, beləliklə termini, command
line dəlilləri.
Belə ki, ilk arqument, dünya salam.
Belə ki, burada, argc üç olardı.
Bu arqumentlər sayı var command line.
Argc, həmişə ən azı 1 ildən dot özünü yaş zərbə biri kimi sayar
command line dəlilləri.
>> Sonra salam ilk.
Dot çizgi yaş, sonra zeroth varsa salam ilk və dünya edir
ikinci command line arqument.
Belə ki, simli argv, biz görmək olacaq, strings, dot çizgi var
yaş, hello, və dünya.
Və Davudun xahişi ilə biz gedirik ki tanıdan bir video oynamaq.
>> [Video playback]
>> -Up biz etdik proqramları indiyə qədər yazılı, biz bəyan etdik
əsas kimi int main void.
Və bütün bu dəfə ki, etibarsız var sadəcə ifadə edilmişdir ki,
Proqram hər hansı bir etmir command line dəlilləri.
Bir istifadəçi bir çalışır zaman digər sözlə, proqram, o komanda təmin edə bilər
əlavə yazaraq line arqumentlər söz və ya söz sonra proqram
sətirinə adı.
>> Yaxşı, sizin proqram istəyirəm, əgər command line dəlilləri, bir və ya almaq
daha belə sözləri biz əvəz etmək lazımdır dəlilləri bir neçə ilə ləğv.
Belə ki, bunu bildirin.
Cs50.h. daxildir
Standart io.h. daxildir
Əsas Int.
İndi əvəzinə etibarsız, mən gedirəm bir argc adlı int və müəyyən
argv strings array.
İndi, argc və argv var sadəcə konvensiyalar.
>> Biz bu dəlilləri deyilən bilərdi biz istəyirik ən şey.
Amma nə vacibdir argc olduğunu bir int müəyyən, bu, çünki
Bu arqument count ehtiva gedir, cəmi sözlə sayı ki,
istifadəçi onun tez-da çap etmişdir.
argv, eyni zamanda, dəlil vektor edir həqiqətən saxlanılması bir sıra olacaq
istifadəçi var ki, sözləri bütün onun tez-da çap.
>> İndi bir şey davam edək bu bir və ya daha çox
command line dəlilləri.
Xüsusilə nin irəli və çap gedək hər hansı söz istifadəçi növləri
Proqramın adına sətirinə.
Open bracket.
Close bracket.
Printf faiz s backslash və vergül.
Və indi mən printf nə dəyəri demək lazımdır ki, tutucu plug.
Mən istifadəçi var ki, ilk sözü istəyirəm proqram adı sonra tipli,
və mən müəyyən etmək üçün gedirəm argv bracket 1, yaxın
mötərizə, nöqtəli vergül.
>> İndi niyə bracket 1 və bracket 0?
Bəli, bu, avtomatik olaraq saxlanılır çıxır argv 0 olacaq edir
Proqramın faktiki adı.
Belə ki, ilk söz istifadəçi növləri Proqramın adı ilə sonra
konvensiya, olacaq argv 1 saxlanılır.
İndi tərtib edək və Bu proqram run.
>> Argv 0, dot çizgi argv 0 olun.
İndi bir söz salam kimi.
Daxil edin.
Və biz hello, var.
>> [END Video playback]
>> Rob Boden: Bütün hüququ.
Ki bağlayın.
Belə ki, proqram bir göz alaraq biz yalnız, yaxşı, bizə yalnız təqdim
biz 0 argv çap əgər indi, etmək, göstərmək Bu, argv 0, dot çizgi argv 0 budur.
Gözlənilir ki, onu çap oldu argv 0 ildən, proqramın adını
həmişə gedir Proqramın adı.
Amma bir şey edək daha maraqlı bit.
>> Belə ki, problem dəsti, siz olacaq Bu funksiya, ATOI təqdim.
Belə ki, nə biz ATOI istifadə edirsiniz?
Ki, çevirmək olacaq bir bir tam string.
Mən string keçmək əgər, bir iki üç, ATOI üçün ki, çevirmək lazımdır ki,
Bu tam, bir iki üç.
Beləliklə, biz ilk çevirmək olacaq bir tam command line arqument
və sonra yalnız tam çap.
>> Belə ki, əsasən, biz növ istəyirik yalnız GetInt reimplementing
tam əmrində daxil edilir line əvəzinə proqram
interaktiv.
Beləliklə, argv 0 edilməsi, nə edək burada bu ki, yaxın.
Belə argv 0 çalışan, və daxil edək tam, bir iki üç dörd bir iki.
Belə ki, biri tam çap edəcəyik iki üç dörd bir iki.
Ki ATOI bəzi incəliklərini var bir şey haqqında qayğı dayandırmaq lazımdır
cari rəqəmli karakter N. kənarda, lakin etməz.
>> Beləliklə, siz nə düşünürsünüz Mən bunu əgər?
Segmentasyon günah.
Belə ki, niyə ki?
Bizim proqramımızda siz geri baxsaq, biz istəyirik argv 1, ilk dəlil konvertasiya
proqram adı sonra, bir tam.
Amma keçdi heç bir dəlil yoxdur proqram adına.
Odur ki, biz bu arabası görürük proqram, çünki, biz çalıştırmak üçün cəhd əgər
hər hansı bir dəlilləri olmadan, yalnız qəza edəcək.
>> Siz görürsünüz belə bir ümumi model bir şey kimi, argc az olduqda
olmadığını ifadə edən iki, daha ən azı proqram adı və
ilk dəlil, sonra biz bir şey edəcəyik kimi printf, kifayət deyil
command line dəlilləri.
Bu yəqin ki, çap üçün yaxşı bir deyil, kimi, yəqin ki, bir şey var
Siz tam daxil olmalıdır command line.
Mən yalnız orada çıxacağıq.
Və sonra 1 qayıtmaq.
Belə ki, bizim sonunda unutmayın ki proqram, biz 0 qayıtmaq əgər ki, sort-
uğurlar göstərir.
Və əsas da avtomatik olaraq əgər 0 qaytarır.
>> Odur ki, biz göstərir 1 retuning edirik ki, uğur deyil ki.
Və siz istədiyiniz hər hansı qayıda bilər, yalnız 0 uğurlar göstərir və
başqa bir şey uğursuzluq göstərir.
Belə ki, hər şeyi bu versiyası run bildirin.
Beləliklə, biz bir command line daxil deyil, əgər dəlil, düzgün demək lazımdır
us, kifayət qədər command line deyil.
Cümlə başa gəlmədi.
Başqa, biz, həqiqətən, bir keçmək əgər, bu proqram tam bilər.
Belə ki, bu siz argc istifadə necə edir sayı doğrulamak üçün
command line dəlilləri ki, həqiqətən qəbul olunur.
>> Belə ki, bir az daha bu program edək mürəkkəb, ikinci baxmaq
şeyi iteration.
Belə ki, indi biz yalnız çap deyilik ilk command line arqument.
Burada, biz int i bərabərdir iterating edirik 0, i, i argc azdır plus
plus, və çap argv, index i.
Belə ki, bu model, yenidən, bu, eyni əvəzinə başqa əvvəl model,
dəyişən zəng n, biz argc istifadə edirik.
>> Belə ki, bu hər indeksi üzərində iterating olunur serialda və hər çap
ki, array element.
Və belə ki, biz bu proqram çalıştırdığınızda, yaxşı, Mən heç bir command line daxil etməyib
arqumentlər yalnız izləri belə proqram adı.
Mən hər şeyi bir dəstə daxil edin, bu will biri öz xətti ilə hər çap.
>> OK.
Belə ki, gələcək bu bir addım olsun.
Və əvəzinə hər arqument çap öz xətti ilə, hər çap imkan
hər bir arqument xarakter öz xətti ilə.
Belə argv olduğunu unutmayın strings bir sıra.
Belə ki, nə bir string, lakin simvol bir array?
Belə ki, argv həqiqətən o deməkdir ki, bir simvol bir sıra array.
Belə ki, istifadə edərək, indi bu ignore bildirin.
Yalnız simli argv 0 nəzərdən keçirək.
>> Biz hər bir xarakter gətirmək istəyirəm əgər argv 0 öz xətti ilə, sonra mən istəyirəm
biz istifadə etdiyiniz model etmək, i serialın uzunluğu az,
, burada strlen olan ki, Mən istəyirəm nə, simli
s argv 0 bərabərdir.
Belə ki, i bizim uzunluğu azdır bu halda bir sıra olan array,
simvol, i plus plus.
Biz keçən həftə gördüm kimi, belə ki, bu ideal var Biz kənarda strlen ki, hərəkət əgər
vəziyyəti, ildən n əlavə olunacaq s strlen biz getmək hər dəfə
loop vasitəsilə və bu dəyişən etmək niyyətində deyil.
Belə ki, biz burada n bərabər müəyyən edəcəyik.
>> OK.
Belə ki, indi biz artıq iterating edirik serialın hər index.
Və belə ki, biz hər çap etmək istəyirsinizsə ki, array, faiz c karakter
biz istifadə etmək istədiyiniz bayrağı simvol.
İndi bir bracket i olacaq edir string, index xarakter i, belə ki, əgər
string salam idi.
sonra bracket 0 h olacaq S S 1 belə e olacaq və.
>> Belə ki, indi biz birləşdirmək istəyirəm Bu iki şeyi.
Biz hər bir xarakter çap etmək istəyirəm hər command line arqument.
Belə ki, biz olacaq bir loop üçün iç içə.
Və şərti, ilk counter i, növbəti j olacaq, n edir
argv i strlen olacaq, i az n, i plus plus edir.
İndi əvəzinə çap argv i, belə ki, i index gedir argv bracket -
ki, i-ci command line olacaq arqument argv i, j gedir
Bu jth xarakter ola i-ci arqument.
Mən indi burada bu qədər qurtarmaq lazımdır biz ki, loop onu qoymaq bəri.
Belə ki, simli s bərabərdir bərabərdir argv i, sonra s bracket j.
>> Yaxşı, biz bəyan etmək lazım deyil Bu dəyişən s.
Əksinə, biz yalnız bu birləşdirmək lazımdır biz nə iki, j i argv.
>> HOPARLÖR 1: [işitilemez].
>> Rob Boden: Yaxşı zəng.
Belə ki, bu pozuldu.
Mən, həqiqətən, qaçıb varsa, biz ki, bu həyata.
Mən qayğı belə counter Bu xüsusilə
loop j, iterator edir.
Belə ki, məsələlər daxil olardı, yəqin ki, bir sonsuz loop, əgər biz
sabit deyil.
Biz də söhbət edirik, niyə ki haqqında bu gün ayıklama.
>> OK.
Belə ki, bu proqram run imkan verir.
Və əslində ayrı-ayrı printf əlavə edək burada yalnız çap edəcək
Bu deməkdir ildən bir line, biz proqram run, bir boş olacaq
Hər xarakterli arasında line hər command line arqument.
Bəli, biz o deməkdir ki, nə görürsünüz.
Oop.
Bəzi səhv var.
Error dolayısı elan kitabxana funksiyası strlen.
>> Belə ki, bizim proqram geri gedir, mən string.h daxil hash unuttum.
Belə ki, string.h olacaq edir bildirir ki, header file
funksiyası strlen.
OK, bu, tərtib edir.
İndi run bildirin.
Belə ki, yalnız.
Bu çap olacaq bizim proqram adı, hello dünya.
Hər bir, hər şey çap olacaq öz xətti ilə xarakter.
OK.
>> Belə nin əslində bu götürək daha bir addım.
Əvəzinə string.h istifadə, edək biz öz həyata istədiyiniz necə düşünmək
strlen funksiyası.
Mən dərhal verəcəyik bir funksiyası imza.
Belə ki, my_strlen zəng edək, və bu bir arqument kimi bir string almaq üçün gedir,
və biz geri gözləyirik ki, simli uzunluğu.
Belə ki, burada ki, oğlan var?
Bəli.
OK.
Belə ki, əvvəllər Slayd xatırlayıram ki, , keçən həftə idi ki,
simvol array, yaxşı, bir string, belə ki, bu, bizim string s deyək.
Belə ki, s simli əgər, hello, sonra, H-E-L-L-O, yaddaş ki, olacaq
sonra bu backslash ola bilər, və 0 character.
>> Belə ki, necə biz s uzunluğu almaq edirsiniz?
Yaxşı, oyun bu axtarır 0 xarakter, bu null reaksiyalara
terminator.
Belə ki, alqoritm davam edir neçə kimi bir şey olacaq
kifayət qədər simvol ki, -
Bu əl bəzi təmsil edək counter, bu int uzunluğu zəng edək.
Belə ki, burada-dən başlayaraq, biz istəyirik simli üzərində təkrarlamaq gedir.
>> Belə ki, bu H ilk xarakter var, və geri, belə ki, 0 doğramaq deyil
uzunluğu 1.
Növbəti xarakter təkrarlamaq, E, və 0 backslash deyil.
Length 2.
L, 3.
L, 4.
O, 5.
Və, nəhayət, biz backslash çatmaq 0, və o deməkdir ki, yaxşı,
Bu simli bitdi.
Belə ki, 5 qayıdaq.
>> Yəni əslində, ilk ki, həyata mənim n uzunluğu Mənim sağ, 0 bərabərdir.
Və biz təkrarlamaq olacaq -
>> HOPARLÖR 1: [işitilemez]
>> Rob Boden: Oh, vur.
Yaxşı zəng.
Boom.
Belə ki, n uzunluğu 0 bərabərdir.
Belə ki, indi isə uzunluğu deyil sonra bərabər və backslash 0.
Belə ki, bu backslash 0 xatırlayıram, bir edir faktiki xarakter, və bu göstərir
simli sonu.
Just kimi, həmçinin, backslash n faktiki karakter.
Backslash 0 qeyd edir bizim simli sonunda.
Mən orada qoymaq istəmirəm.
Və uzunluğu dizine s deyil isə null terminator bərabər, sonra
biz yalnız uzunluğu arttırmayı olacaq.
Beləliklə, bizim proqramın sonunda, uzunluğu nəticədə gedir
bu halda 5 olun.
Və biz yalnız uzunluğu qayıtmaq lazımdır.
>> OK.
Belə ki, indi aşağı burada, mən yox my_strlen yoxdur.
Nin əmin etmək üçün tərtib edək hər şey rəvan çalışır.
Mən 2 edirdi?
Və ya 1 idi?
Etməlidir.
Bütün hüquqlar.
Belə ki, bu argv 2.
Gözlənilən kimi, çalışır, baxmayaraq ki, bir mən bunu etdi ki, idi?
Bəli.
OK.
Şeyi bu versiyası yoxdur Bu printf yeni sonra line, lakin
heç bir fərq etmir.
OK.
Gözlənilir ki işləmişdir.
>> İndi biz hətta bu bir addım birləşdirə bilər daha, burada yerləşir bildiriş, yaxşı,
ilk, biz argv olan strlen qənimətçilik edirik i, sonra biz artıq iterating edirik
ki, simli hər character.
Belə ki, əvəzinə bunu, nə əgər biz yalnız gözləmə bu məntiqi birləşdirmək
biz backslash 0 hüququna hit qədər loop üçün bu daxil?
Argv i, j nə isə belə təkrarlamaq bərabər backslash 0.
Belə ki, ilk run bildirin.
>> Bütün hüquqlar.
Belə ki, burada, bu vəziyyəti deyib -
ki sil.
Belə ki, indi, bu, bizim argv olsun.
Mən yalnız əvvəl proqram qaçdı zaman, argv strings bir sıra edir.
Və mən dot çizgi argv ilə run əgər 2, hello dünya, sonra argv
özü argv üçün, uzunluğu 3 sıfır, hello, və dünya.
>> Və bu göstəricilərinin hər biri daxilində deyil, özü bu olacaq bir array,
dot, bu çizgi olacaq, bilmirəm ki, düzgün istiqamətdə idi, mən
Bu idi düşünmürəm.
A-R-V dash, daha çox yer lazımdır.
Bu array daxil kəsilir.
A-R-V dash 0, sonra backslash 0.
Və sonra nizamsızlıq salam olacaq.
Nin, H-E backslash 0 deyirlər.
Və nəhayət, W-O backslash 0.
>> Beləliklə, biz yalnız yazırdı ki, alqoritm, onlar olduğunuz loops üçün iç-içə
Doing, biz ilk var i və sonra j qarşı.
Bu kod ilə daha asan olardı ekran, geri bu gedək.
OK.
Belə ki, i olan iterator olduğunu qeyd hər bir komanda üzərində iterating
line arqument.
Və j iterator iterating edir ki, hər bir xarakter üzərində
command line arqument.
Belə ki, bu olanları printf nə , biz argv 0 0 printf printf var olunur
argv 0 1, printf argv 0 2 0 3 0 4 0 5, 0 6, lakin indi, argv 0 7 gedir
bərabər backslash 0.
>> Beləliklə biz loop üçün çıxmaq, və indi i 1 iterates.
Və indi biz çap olacaq argv 1 0, argv 1 1 -
yaxşı, indi mən qısa salam kəsilmiş ildən, argv 1 2 təkrar olacaq
backslash 0.
Və belə ki, i arttırmayı və davam və ki, qədər biz bütün çap
dünya və o üç command line var arqumentlər və biz həyata çıxmaq lazımdır
outermost loop, və proqram bitirmək.
OK.
>> Belə ki, burada qayıda bildirin.
Belə ki, bəzi tanış olmaq lazımdır Bu command line dəlilləri
xüsusi problem müəyyən.
>> İndi, hata.
Beləliklə, siz yəqin ki, artıq nə idi Əvvəlki ilə bəzi ayıklama
problem müəyyən.
Və ayıklama bir çox asan yol, ilk bir arabası proqram baxaq.
Yaxşı, bu proqramı vasitəsilə gəzinti biz üçün istifadəçi xahiş olacaq
tam ki, tam qamarlamaq, və sonra, özbaşına, biz isə loop var ki,
yalnız azalma gedir Bu 10 bərabər i qədər.
Edək yalnız mən daxil deyiləm güman 10-dən çox bir tam.
Bu 10 bərabər qədər i azalma.
>> Və sonra biz başqa isə loop var i 0 bərabər deyil isə, biz istəyirik ki,
3 i azalma gedir.
Beləliklə, siz səhv niyyəti görmək əgər burada, bu i üçün azalma lazımdır ki, var
10, və sonra bu isə loop iradə ola 1 4 7 10, gələn azalma i,
mənfi 2, belə ki, 5 mənfi və mənfi sonsuzluğa, i olacaq ildən
həqiqətən 0 bərabər heç vaxt.
Və sonra bu proqramın sonunda, biz olan foo funksiyası var
çap gediş i ki.
>> Belə ki, bu, qısa və mənasız proqram və səhv aydındır,
xüsusilə sonra mən yalnız səhv idi nə dedi.
Amma burada niyyət yaxşı, bu güc deyil, həqiqətən bəzi kimi baxmaq sizin
gələn son görməmiş olan həllər problem müəyyən və bəlkə siz var
proqram bəzi sonsuz loop, və siz heç bir fikrim yoxdur
nə səbəb oldu.
Belə ki, bir çox faydalı ayıklama texnika yalnız printfs əlavə etmək
bütün kodu üzərində.
>> Belə ki, burada xaricində bir printf istəyirəm ilk isə loop.
Və burada mən bir printf istəyirəm, Mən yalnız i çap edəcəyik.
Loop isə hətta i, ilk edəcəyik.
Kənarda, ikinci isə loop.
Bir daha, daxili çap burada, dəyəri i.
Və bu run bildirin.
>> Belə ki, dot çizgi debug.
Tam daxil edin.
13 edək.
Və bumu.
Biz sonsuz loop olduğunu görürük ikinci isə loop daxilində.
Belə ki, indi biz səhv olduğunu bilirik.
Amma printf ayıklama, mükəmməl böyük ancaq proqramları almaq dəfə
uzun və daha mürəkkəb var daha mürəkkəb həlləri
şeyi iş əldə.
Belə ki, bütün bu printfs yığışdıraq.
Və əmin Mən etmədim edək bir şey qırmaq.
OK.
>> Beləliklə, biz olacaq proqram təqdim adlanır
GNU Debugger gdb.
Yaxşı, həqiqətən, üçün debug aradan qaldırılması imkan ikinci, və daha debug etmək.
Bəli, həqiqətən ilk bir yaxşı dərs command line dəlilləri ilə.
Bu cingilti komanda ki, Qeyd edək ki, hər şey qəbul edilir tərtib
command line, bu command line dəlilləri.
Istifadə olunur, belə ki, tam olaraq necə command line dəlilləri kimi biz
əvvəl idi, və siz pset olacaq kimi 2, ki, cingilti, onlardan istifadə edir necə.
>> Belə ki, qeyd ki, bu ilk bayraq, dash ggdb3, ki söyləyərək nə, cingilti,
Siz bu faylı tərtib etməli niyyət ki, biz nəhayət olacaq
bu debug lazımdır.
Belə ki, kimi uzun siz bayrağı var, sonra biz gdb debug bilər.
Və bu GNU Debugger açmaq lazımdır.
>> Belə ki, əmrləri var siz istifadə almaq lazımdır ki,.
Birincisi ki, siz yəqin ki, lazımdır dərhal lazım Run edir.
Belə ki, nə gedir Run olunur?
Bu, bizim proqram başlamaq olacaq.
Belə ki, başlayan proqram, proqram çalıştırmak bir tam 13 üçün bizə xahiş edir.
Və sonra bu sonsuz loop kimi var Mən xaric istisna olmaqla, gözlənilən
printfs, belə ki, biz hətta görmürəm.
Normal çıxıldı.
Oh.
Bu bükülmüş mümkündür bütün yol, geri - ki, məhəl.
Normal çıxmadığını daşımır.
Ki, bir mürəkkəb cavab var.
>> Belə ki, indi ki, çox faydalı deyil.
Belə ki, yalnız daxilində bizim proqram çalışan Bu ayıklama hər hansı bir bizə kömək etmir
biz yalnız görmüşük bilər-ci ildən yol, dot gdb kənarda debug doğramaq.
Belə ki, bir komanda ki, yəqin ki, lazımdır -
və mən bu çıxmaq lazımdır.
Control-d və ya iş həm çıxın.
Beləliklə, bir daha onu açmaq bildirin.
>> Digər komanda ki, siz yəqin ki, lazımdır dərhal istəyirəm
üçün istifadə almaq Break edir.
Belə ki, biz, indi əsas qırmaq lazımdır və sonra mən izah edəcəyik.
Yaxşı, burada biz bir breakpoint bax debug.c bu xətt.
Belə ki, nə break vasitədir zaman run yazın, proqram gedir
qədər davam Mən breakpoint edib.
I run hit zaman, belə ki, proqram, başlayır və sonra bu kimi tezliklə kimi pozur
əsas funksiyası olur.
Əsas Break şey olacaq Siz olduqca çox nə.
>> İndi sizə təqdim etmək bir daha əmrləri.
Biz deyərək ki, burada qeyd olan line 11 at qırdı
printf, tam daxil edin.
Belə ki, komanda Next necə olacaq biz kodu növbəti line getmək.
Bu, bizim addım imkan gedir xətti ilə proqram xətti ilə.
Belə ki, növbəti.
>> İndi line 12, biz gedirik tam almaq üçün.
Next.
Siz yalnız yenidən Enter varsa, bu will siz etdi son şey redo.
Mən yazın ehtiyac yoxdur Növbəti hər zaman.
Belə bir tam, 13 daxil edin.
Belə ki, indi line 14, i çox isə 10-dən, və mən növbəti edəcəyik.
Və biz i azalma olacaq görürük.
Yəni biz yenidən i azalma olacaq.
>> Belə ki, indi digər faydalı command Print edir.
Belə ki, çap çap gedir dəyişən dəyəri.
Nin dəyərini getirsin dəyişən i.
Mən çap edək.
Bu i 11 demək olacaq.
İndi biz Next yenə də i 10-dən çoxdur.
Belə ki, i hələ daha çox var 11-ci ildən 10.
i minus minus.
Yenə i çap edək.
Gözlənildiyi kimi, 10 var.
>> Belə ki, indi gələcək.
Bu geri vəziyyətdə olacaq, i 10-dən çox, lakin i belə ki, indi 10
Bu 10-dən çox deyil, belə ki, biz gözləyirik Bu isə loop tökülmək üçün.
Və indi biz kod ki line aşağıda istəyirik.
Və başqa komanda siyahısı, yalnız gedir əvvəlki və sonrakı keçirmək üçün
kodu xətləri, ildə bir neçə halda siz özünüz itirdi.
Beləliklə, biz yalnız, bu isə loop ayrıldığı və indi biz bu daxil
isə loop, line 18.
I 0 bərabər deyil isə belə.
Və növbəti, i biz will i minus 3 bərabərdir, və qeyd, bu, yalnız davam edəcəyik.
Və biz i çap edə bilərsiniz.
>> Hər bir komanda sort qısa malikdir.
Belə ki, p Çap üçün qısa.
Beləliklə, biz p i bilərsiniz.
Just n keçirilməsi saxlamaq, və ya Next bunu saxlamaq.
Yenə çap.
Siz 167 mənfi indi görürük.
Belə ki, bu əbədi getmək, lakin həqiqətən əbədi, yalnız gördüm ildən, bu,
həqiqətən bir nöqtədə sona çatacaq.
>> Belə ki, gdb başlayaraq edilir.
Amma gdb daha bir şey edək.
Uh, debug.
Belə ki, bu halda, sonsuz loop daxilində ola oldu
əsas funksiyası.
Və indi üçün, yalnız mən ki, qəbul daxil sonsuz loop hərəkət olacaq
foo funksiyası.
Məhz bu sonunda, unutmayın ki, proqram, yaxşı, bu ilk idi
yalnız olan foo zəng i çap gedir.
Amma indi biz olan, foo zəng etdiyiniz Bu 0 qədər i azalma, və gedir
sonra dəyişən çap.
OK.
Ki saxla.
Debug olun.
İndi, gdb debug.
OK.
>> Mən yalnız Run Belə ki, əgər mən fikrində deyiləm həqiqətən gezinmek üçün edə mənim
proqram line-by-line.
Belə ki, əsas da qıra edək, və sonra run yazın.
Belə ki, bu yolu getmək, printf daxil bir tam, tam, 13 almaq.
Beləliklə, biz decrementing saxlamaq olacaq i 10-dən çoxdur qədər.
Sonra vasitəsilə düşmək olacaq isə loop, və xətti almaq -
bir ayrı pəncərə açmaq bildirin.
I artıq qədər biz endirildiyi sonra 10-dən çox və biz
foo, funksiyası adlanır.
>> Belə ki, nə tezliklə mən hit baş verib funksiyası foo, yaxşı, Mən foo adlanır və
sonra artıq gdb üzərində nəzarət var idi.
Belə ki, tezliklə mən bu xətti Next hit, Bu baş qədər şeyi davam
Ü proqram çıktı -
nəticədə yox idi daşımır.
Siz baxmayaraq bir az fasilə gördüm.
Belə ki, niyə mən üzərində nəzarəti itirmək idi o nöqtədə proqram?
Mən növbəti yazın zaman Yaxşı, ki, gedir kod hərfi növbəti xətti
icra edəcək.
Belə ki, sonra line 21, kodu növbəti line ki, line 22 icra edəcək
əsas olan mövcud olan.
Mən yalnız getmək istəmirəm kodu növbəti line.
Mən funksiyası, foo daxil getmək istəyirəm, və sonra da addım
kodu həmin satır.
>> Belə ki, biz bir alternativ var.
Ki, daha çıxmaq imkan verir.
Əsas ayırın.
Uh, 1, növbəti, növbəti, 13, növbəti, növbəti, növbəti, diqqətlə,
biz line foo hit əvvəl.
OK.
>> Belə ki, indi biz, line 21 istəyirik biz foo zəng yerləşir.
Biz növbəti yazın istəmirəm ki, bəri yalnız funksiyası foo zəng və
kodu növbəti line getmək.
Nə biz istifadə etmək istədiyiniz addımdır.
Belə ki Addım arasında bir fərq var və Step daxil addımlar Next,
fəaliyyət, və Next gedir funksiyası üzərində.
Bu yalnız tam icra funksiyası və saxlayır gedir.
>> Belə ki, Step bizi gətirmək niyyətindədir funksiyası daxil foo.
Və biz indi, biz geri istəyirik, bax burada nəzəriyyə var ki, bu isə loop,
əbədi davam.
Və hətta deyil zaman Addım, hit əgər zəng etmək üçün bir funksiyası, sonra bu
Sonrakı eyni.
Bir xətt olduğunuzda belə ki, yalnız ki, Addım ki, bir funksiyası zəng
Sonrakı fərqlənir gedir.
Belə ki, Step burada bizə gətirəcək.
Step, addım, addım, addım, addım, addım, və biz əbədi yalnız sonsuz loop lazımdır.
>> Beləliklə, siz kimi istifadə almaq bilər Sizin sonsuz loops müəyyən yolu,
yalnız bu Enter düyməsini keçirilməsi Zorlandığınız yerləşir görürük.
Var ki, nə yaxşı yolları var, lakin indi ki, mükəmməl kifayətdir.
Və stylistically, Style uyğun 50, mən bu həyata olmalıdır.
OK.
>> Belə ki, son bir komanda təqdim.
Yaxşı, daxil debug gdb ili
Belə ki, əvəzinə əsas da qırılma, əgər mən foo funksiyası həmçinin bilirik edir
problem, sonra ola bilər yalnız əvəzinə, foo qırmaq etdi.
Mən qırmaq deyirlər əsas və foo də.
Belə ki, bir çox breakpoints bilərsiniz istədiyiniz kimi.
I run yazın, o gedir Bu dayandırmaq üçün -
ooh, çünki nin compile bildirin Mən hər şeyi dəyişdi.
Bu xətt, Warning, mənbə görəcəksiniz fayl yürütülebilir daha son deyil.
Belə ki, mən yalnız burada getdi o deməkdir ki, və Style uyğun bu dəyişdi
50, lakin mən derleyeceğiz etməyib proqram.
Belə ki, gdb ki, məni xəbərdar edir.
Mən yenə debug etmək, çıxmaq lazımdır gdb debug edib.
OK.
>> Belə ki, indi geri mən bunu nə.
Əsas, break foo ayırın.
İndi proqram run, belə ki, əgər xit qədər davam bir
breakpoint.
Bu breakpoint olur əsas da ilk biri.
İndi əvəzinə növbəti etdiyini, növbəti, növbəti, növbəti, növbəti, foo hit qədər, mən
davam edəcək, davam edəbilərsiniz növbəti breakpoint hit qədər.
Mən ilk tam daxil etmək lazımdır.
Mən hit qədər davam edəcək Davam ki, növbəti breakpoint,
foo funksiyası.
>> Bir hit qədər Run davam edəcək zaman breakpoint, lakin yalnız run yazın
Siz, sonra proqram başlayaraq, edirik sonra, bu davam edir.
Mən yalnız əsas qırmaq idi və əgər sonra qaçdı, o qırmaq lazımdır
sonra əsas, və davam edir.
Mən foo bir fasilə point var, yoxdur-ci ildən Bu tam daxil edin, sonra indi mən
foo at qırmaq niyyətində deyil.
Bu, yalnız sonsuz olacaq ki, qədər loop.
OK.
>> Belə ki, gdb Intro var.
Siz onu istifadə başlamaq lazımdır Sizin problem dəstləri.
Bu, çox faydalı ola bilər bugs müəyyən etmək.
Həqiqətən, yalnız, line-by-line getmək varsa, Sizin kod vasitəsilə, və nə müqayisə
həqiqətən gözləmək nə ilə baş baş, sonra bu, olduqca
sizin hataları miss çətindir.
OK.
>> Belə ki, ötən həftə David bu tərbiyə üçün gizli-əsas Kriptoqrafiya stuff
biz istəmirəm ilk dəfə, parol yalnız saxlanılır bizim
bir düz mətn faylı kompüter, Ü kimsə və yalnız gələ bilər
açmaq və onları oxumaq.
İdeal halda, onlar şifrelenmiş olacaq bir şəkildə.
Və Problem Set 2, Siz məşğul olacaq şifreleme bir üsulu ilə,
və ya, yaxşı, iki metod, lakin onlar böyük deyil.
Siz hacker nəşr nə varsa, siz da məşğul olacaq
bəzi şeylər decrypting.
>> Belə ki, məsələ indi də, hətta halda, biz güclü şifreleme var
Dünyada alqoritm, əgər bir seçmək xüsusilə yoxsul parol, o,
, çox sizə kömək edəcək bu yana insanların hələ də anlamaq olacaq.
Şifreli simli görən və hətta bu zibil bir mess kimi görünür
əgər ki, onlara heç bir şey deməkdir hələ yalnız bir neçə parol cəhd lazımdır
Əgər bunu anlamağa çox təhlükəsiz deyil.
Belə ki, bir video seyr ki, işarə edir.
>> [Video playback]
>> -Kask, siz şeytan.
Nə olub?
Əgər qızım nə edirlər?
>> Parlaq təqdim etmək mənə icazə gənc plastik cərrah Dr Phillip
Schlotkin ən böyük burun bütün, iş adamı
kainat, və Beverly Hills.
>> -Əlahəzrət.
>> -Burun iş?
Mən başa düşmürəm.
O, artıq bir burun iş idi oldu.
Bu şirin on altı idi.
>> -No.
Bu nə deyil.
Bu, çox, çox pis.
Siz mənə birləşməsi vermir varsa hava qalxan, Dr Schlotkin olacaq
onun köhnə burun qızı geri verir.
>> -No.
Harada ki, əldə etdiniz?
>> -Bütün hüququ.
Mən deyim.
Xeyr, daddy.
Xeyr, olmaz.
>> -Sen sağ, əziz.
Mən sizin yeni burun miss lazımdır.
Amma ona birləşməsi demək deyil, nə olursa olsun.
>> -Çox yaxşı.
Dr Schlotkin, sizin ən pis edin.
>> -Mənim zövq.
>> [TOOLS itilənmiş]
>> -No.
Gözləyin.
Mən deyim.
>> -Mən bunu bilirdik.
Bütün hüquqlar.
Mənə verin.
>> -Birləşməsi biridir.
>> -One.
>> -İki.
>> -Üç.
>> -Four.
>> -Beş.
>> -Yaxşı birləşməsi biridir iki, üç, dörd, beş.
Bu stupidest birləşməsi var Mən heç həyatımda eşitdim.
Ki, bir şey cür bir idiot var onun baqaj var ki.
>> Sizin Əlahəzrət, sizə təşəkkür edirik.
>> -Nə oldu?
>> -Mən divar off çıxdı.
>> -No etmədi.
Siz bütün film söndürülür.
>> Mən səhv düyməni basdı olmalıdır.
>> -Yaxşı, geri qoydu.
Film geri qoyun.
>> -Bəli, efendim.
Bəli, efendim.
>> Nin, Arnold getmək edək.
, Gretchen gel.
Əlbəttə ki, mən hələ lazımdır bilirik Bunun üçün qanun var.
>> [END Video playback]
>> Rob Boden: Bütün hüququ.
Biz artıq söhbət edirik Belə ki, indi ki, bəzi yollarla təhlükəsizlik, gözəl
az film poster, belə ki, son NSA ilə gün, bu məsələlər
hər şeyi monitorinq.
Bu sizin kimi hiss etmək çətin ola bilər Bu gizlilik bir növ var
online dünya, mən deyə bilmədi Siz prizma məlumat ən.
Belə ki, prizma kənarda hərəkət, biz fikrində deyilik İndi ki, söhbət etmək
Sizin laptop haqqında düşünmək.
Belə ki, burada, mən keçmək istəyirəm mənim faktiki hesabına,
mənim kiçik pinqvin ilə.
Mən bir parol dəsti var ki, Parolu Mən olmaq istəyirəm nə.
>> Amma unutmayın ki, nə mən giriş alıram , belə ki, bu giriş ilə
tez, bəzi proqramdır.
Bu idi ki, bəzi proqram bir şəxs tərəfindən yazılı.
Və belə ki, şəxs, əgər onlar xüsusilə zərərli, onlar bilər
dedi, bütün sağ, belə ki, əgər parol Mən daxil bərabərdir mənim
faktiki parol, və ya bərabər bəzi xüsusi parol -
David zəhmli və ya bir şey -
sonra onları içəri buraxa
Belə ki, bir zərərli proqramçı ola bilər Mac bütün və ya giriş
Windows, və ya bir şey.
>> Belə ki, ildən, bir narahatlıq çox deyil Mən demək, Bu giriş proqram
ki, OS X, yüzlərlə sövq edir və ya minlərlə var
Bu kodu nəzərdən.
Və belə ki, siz haradasa kodunu, əgər Bu string bərabərdir bərabərdir demək
David zəhmli, giriş, sonra kimsə var olacaq, kimi, gözləyin.
Bu doğru deyil.
Burada olmamalıdır.
Belə ki, biz hər şeyi almaq bir yolu var cür təhlükəsiz olmalıdır.
>> Lakin hətta proqramları haqqında düşünmək Siz yazmaq.
Siz giriş proqramı yazdı deyirlər.
Yazırdı ki, bu giriş proqram, belə açıq-aydın, bir yaxşı
proqramçı.
Siz hər hansı bir zərərli qoymaq fikrində deyilik x bərabərdir bərabərdir əgər David zəhmli deyil
kodu daxil.
Lakin bu proqram, nə Bu proqram tərtib etmək üçün istifadə?
Cingilti kimi bir şey.
Belə ki, nə əgər baş verən şəxs cingilti qoruyucu cingilti xüsusi yazmaq
bir şey kimi mən tərtib edirəm əgər proqram daxil, sonra bu kodu daxil edin
əgər deyir ki, giriş proqramı x bərabərdir David zəhmli deyil bərabərdir?
Belə ki, tamamilə hələ, lakin biz eyni var burada vermək, harada cingilti, yaxşı,
min, əgər on minlərlə insanlar var, cingilti baxdı var
kodu öz xətti baxdı və dedi, bütün sağ, burada pis bir şey yoxdur.
Aydındır ki, heç bir edir Bu zərərli bir şey.
>> Amma nə kimi, özünü cingilti edir nə cingilti tərtib əgər?
Mən bəzi compiler var ki, əgər cingilti daxil edər ki, cingilti tərtib
deyir ki, bu xüsusi hack, bütün sağ, Mən cingilti tərtib edərkən, sonra
çalıştırılabilir Mən xüsusi baxmaq lazımdır almaq giriş proqram və insert daxilində
Bu parol, bərabərdir bərabərdir Dave zəhmli deyil?
Belə ki, unutmayın ki, compiler özü bir nöqtədə tərtib etmək lazımdır.
Belə ki, cingilti tərtib seçə nə , özü sonra, zərərli ilə
bütün berbat bilər yol aşağı xətti.
>> Odur ki, biz Ken Thompson var və Dennis Ritchie.
Belə ki, bu iconic şəkil var.
Dennis Ritchie doğru deyil.
O, bir böyük -
olduqca çox C. yazdı Belə ki, siz Bu sinif görə təşəkkür edirəm.
Ken Thomson sol var.
Onlara iki əsasən UNIX yazdı.
Bəli, onlar əsas amil olmuşdur UNİX.
Bəzi başqaları var idi.
Bir nöqtədə belə Ken Thompson, O Turing mükafatı qazanır.
Və Turing mükafatı, mən həmişə eşitdim bu şəkildə istinad, bu var
Kompüter elminin Nobel mükafatı.
>> Belə ki, Turing mükafatı, o var onun qəbul çıxış.
Və o, bu çox məşhur danışma verir indi güvənərək Reflections çağırıb
Biz bağlı olan Trust, kurs veb haqqında.
Və bu danışmada, o, bütün doğru deyir Mən UNIX yazdı və indi bütün
Siz insanlar UNIX istifadə olunur.
İndi Linux bu gün xatırlayıram UNIX birbaşa nəslindən.
OS X birbaşa UNIX istifadə edir.
Windows qədər deyil, amma bir çox fikir UNIX götürülmüşdür.
>> Belə ki, o, mərhələsinə qədər gedir və deyir bütün sağ, mən UNIX yazdı.
Və yalnız belə uşaqlar bilirsiniz, mən deyiləm hər daxil edə
Sizin kompüter biri.
X, mən bu xüsusi bir qoymaq ildən bərabərdir, Ken Thomson zəhmli deyil bərabərdir
sonra giriş üçün icazə alıram.
Belə ki, insanlar, yaxşı, kimi qarşıladıq bunu?
Biz giriş proqramı baxdı və heç bir şey yoxdur.
O, mən compiler redaktə kimi giriş proqram daxil
giriş proqramı var ki, ki, x Ken Tekin bərabərdir bərabərdir
zəhmli deyil.
>> Və onlar da, doğru deyil, demək.
Biz compiler baxaraq, və etdiyiniz compiler hər hansı xətləri yoxdur
kimi kodu.
O OK, kimi, ancaq nə compiler ilə tərtib?
Və, yaxşı, kimi, onlar hesab edirəm ki, və o Mən sizə compiler verən biriyəm
Siz compiler tərtib üçün istifadə, belə ki, etdiyiniz Siz, bir compiler tərtib olunur ki,
özü zərərli və olacaq giriş proqram qırmaq.
Belə ki, əsasən, o nöqtədə var Siz mənbə baxmaq bilər heç bir yol
Giriş proqramının kodu yanlış nə görmək.
Siz hətta baxmaq bilmədi Bu compiler mənbə kodu
yanlış nə görmək.
>> Siz maşın baxmaq lazımdır kodu, faktiki ikili
Bu, gözləmək, görmək üçün tərtib compiler kodu xətləri burada olmamalıdır.
Amma Ken Thompson bir addım atdı daha və yaxşı, var, dedi
Bu xüsusi proqramlar əslində Siz proqramları ikili oxumaq kömək,
və belə kimsə ki, proqram istifadə əgər ikili oxumaq, onlar bu görəcək
kodu xətləri.
O, bütün, demək həmin proqramların redaktə sağ, siz at arıyorsanız
compiler, bu göstərmək deyil ikili set.
>> Beləliklə siz almaq lazımdır ki, bir addım daha və əsasən ki, ola bilər
dolaylı qəbul birdən çox səviyyəsi, və bir anda, heç bir həqiqətən var
yoxlanılması olacaq.
Belə ki, hekayə mənəvi siz istəyirik ki, yazılı etmək niyyətində deyil
Bu sinif cingilti.
Siz dırmanma istifadə etmək olacaq Bu sinif bir çox cingilti.
Bildiyiniz bütün, cingilti bir zərərli hər sabote proqramı
bir proqram Əgər tərtib etdik.
Və çox uğursuz sizi tərk Çərşənbə günü görəcəksiniz, qeyd.
>> [Alqış]
>> HOPARLÖR 2: Növbəti CS50 edir.
>> HOPARLÖR 3: Siz demək cəsarət etməyin.
Siz bunu edə bilərsiniz.
Siz əvvəl bu etdik, siz bunu edə bilərsiniz bu gün, sabah bunu edə bilərsiniz.
Siz ildir bunu etdik.
Just orada getmək və bunu.
Siz bunu edə bilərsiniz.
>> [MUSIC PLAYING]