1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUZIK Bermain] 3 00:00:11,210 --> 00:00:12,100 >> ROB Boden: Baiklah. 4 00:00:12,100 --> 00:00:15,620 Jadi, perkara pertama yang pertama, video dari muka yang biasa. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO MAIN SEMULA] 7 00:00:22,560 --> 00:00:23,370 >> -Baiklah. 8 00:00:23,370 --> 00:00:27,150 Ini adalah CS50, dan ini adalah awal minggu tiga. 9 00:00:27,150 --> 00:00:29,980 Saya minta maaf saya tidak dapat berada di sana dengan anda hari ini, tetapi izinkan saya untuk memperkenalkan 10 00:00:29,980 --> 00:00:32,880 CS50 sendiri Rob Boden. 11 00:00:32,880 --> 00:00:33,872 >> [END VIDEO MAIN SEMULA] 12 00:00:33,872 --> 00:00:39,340 >> [Tepukan dan sorakan] 13 00:00:39,340 --> 00:00:41,277 >> ROB Boden: The Filmography dalam video yang hebat. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Baiklah. 16 00:00:47,770 --> 00:00:50,960 Jadi pertama, ada makan tengah hari yang lain. 17 00:00:50,960 --> 00:00:52,330 Ia esok pada 1:15. 18 00:00:52,330 --> 00:00:54,480 Tiada makan tengah hari Jumaat ini. 19 00:00:54,480 --> 00:00:55,810 Ia adalah dengan Quora. 20 00:00:55,810 --> 00:01:00,190 Dan Tommy tiada di sini lagi, tetapi salah satu daripada penduduk di sana adalah bekas CF kepala, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Jadi dia seorang lelaki yang menyeronokkan. 23 00:01:02,730 --> 00:01:04,819 Anda harus datang. 24 00:01:04,819 --> 00:01:05,900 >> Baiklah. 25 00:01:05,900 --> 00:01:11,360 Jadi minggu lepas, kami mula berpecah tentang apa yang rentetan sebenarnya. 26 00:01:11,360 --> 00:01:14,830 Kami telah dikenali sejak awal bahawa ia jujukan aksara. 27 00:01:14,830 --> 00:01:18,130 Tetapi minggu lepas, kami mengulas tentang hakikat bahawa apa yang benar-benar satu urutan 28 00:01:18,130 --> 00:01:22,110 watak-watak, baik, kami kini mempunyai tatasusunan aksara. 29 00:01:22,110 --> 00:01:26,450 Dan kita tahu bahawa rentetan, ia satu pameran aksara, pada akhir sangat, 30 00:01:26,450 --> 00:01:30,920 kita mempunyai null bait khas, ini garis sendeng terbalik 0, yang menunjukkan akhir 31 00:01:30,920 --> 00:01:32,230 tali. 32 00:01:32,230 --> 00:01:36,970 >> Dan sebagainya rentetan adalah pelbagai watak-watak, tetapi kita boleh mempunyai lebih daripada 33 00:01:36,970 --> 00:01:39,530 hanya pelbagai aksara, kita boleh mempunyai pelbagai apa-apa 34 00:01:39,530 --> 00:01:40,890 jenis perkara yang kita mahu. 35 00:01:40,890 --> 00:01:51,570 Jadi, jika anda ingat dari minggu lepas, Program peringkat umur yang diperkenalkan David 36 00:01:51,570 --> 00:01:53,560 benar-benar cepat. 37 00:01:53,560 --> 00:01:57,010 Perkara itu kita akan lakukan adalah meminta pengguna untuk integer, yang 38 00:01:57,010 --> 00:01:58,800 beberapa orang di dalam bilik. 39 00:01:58,800 --> 00:02:01,260 Apabila kita mempunyai integer itu, kami mengisytiharkan array. 40 00:02:01,260 --> 00:02:02,890 Notis sintaks kurungan ini. 41 00:02:02,890 --> 00:02:04,540 Anda akan mendapatkan digunakan untuk itu. 42 00:02:04,540 --> 00:02:09,430 >> Jadi, kita mengisytiharkan pelbagai integer dipanggil peringkat umur, dan terdapat n 43 00:02:09,430 --> 00:02:12,080 integer dalam array ini. 44 00:02:12,080 --> 00:02:16,480 Jadi corak ini di sini, int 4 i sama dengan 0, i adalah kurang daripada n, i ditambah 45 00:02:16,480 --> 00:02:20,580 plus, yang juga akan menjadi corak yang bahawa anda menjadi sangat digunakan untuk. 46 00:02:20,580 --> 00:02:24,000 Kerana itulah cukup banyak bagaimana anda sentiasa akan melelar atas tatasusunan. 47 00:02:24,000 --> 00:02:26,330 Jadi ingat bahawa n adalah panjang pelbagai kami. 48 00:02:26,330 --> 00:02:32,120 Dan jadi di sini, kami berulang kali meminta untuk umur orang i di dalam bilik. 49 00:02:32,120 --> 00:02:36,640 >> Selepas ini, kami turun, dan untuk apa sahaja sebab sewenang-wenangnya, kita 50 00:02:36,640 --> 00:02:40,220 mencetak berapa lama mereka akan menjadi tahun dari sekarang. 51 00:02:40,220 --> 00:02:49,980 Dan menjalankan program itu, mari kita membuat peringkat umur, peringkat umur dot slash. 52 00:02:49,980 --> 00:02:53,010 Jadi beberapa orang di dalam bilik, katakan ada tiga. 53 00:02:53,010 --> 00:02:59,880 Dan berkata, orang pertama ialah 13, seterusnya adalah 26, dan yang terakhir ialah 30. 54 00:02:59,880 --> 00:03:05,080 Demikian maka ia akan melelar ke atas tiga orang, mencetak 14, 27, dan 31. 55 00:03:05,080 --> 00:03:16,060 >> Jadi ingat bahawa apabila kita mengisytiharkan pelbagai saiz n, indeks dalam yang 56 00:03:16,060 --> 00:03:19,950 pelbagai, array mempunyai nilai-nilai dan indeks 0, 1, 2, sepanjang jalan 57 00:03:19,950 --> 00:03:21,680 sehingga n tolak 1. 58 00:03:21,680 --> 00:03:26,255 Oleh itu, apabila kita berkata terdapat tiga orang di dalam bilik, dan kami meletakkan di sini 59 00:03:26,255 --> 00:03:29,850 lelaran pertama melalui ini gelung, i akan menjadi 0. 60 00:03:29,850 --> 00:03:31,650 Jadi dalam indeks 0. 61 00:03:31,650 --> 00:03:34,540 Kami memberikan yang pertama umur pengguna memasukkan. 62 00:03:34,540 --> 00:03:38,870 Kemudian pada satu depan, kita memasuki kedua n pengguna memasukkan, dan dalam 63 00:03:38,870 --> 00:03:40,580 hingga dua, n yang terakhir. 64 00:03:40,580 --> 00:03:44,200 >> Jadi melihat bahawa pelbagai saiz tiga tidak mempunyai apa-apa 65 00:03:44,200 --> 00:03:46,040 dalam indeks tiga. 66 00:03:46,040 --> 00:03:49,036 Ini tidak sah. 67 00:03:49,036 --> 00:03:50,250 Baiklah. 68 00:03:50,250 --> 00:03:55,136 Jadi, akan kembali di sini. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Jadi sekarang kita telah diuruskan dengan pameran, kita mempunyai beberapa kebiasaan. 71 00:04:01,590 --> 00:04:03,780 Sekarang kita akan beralih kepada arahan argumen baris, yang akan menjadi 72 00:04:03,780 --> 00:04:05,890 cukup relevan dengan set masalah ini. 73 00:04:05,890 --> 00:04:09,670 >> Jadi sehingga sekarang, setiap kali anda telah diisytiharkan Fungsi utama anda, kami telah 74 00:04:09,670 --> 00:04:11,230 berkata tidak sah utama int. 75 00:04:11,230 --> 00:04:14,070 Jadi tidak sah hanya bererti bahawa kita tidak lulus mana-mana 76 00:04:14,070 --> 00:04:16,440 hujah untuk fungsi ini. 77 00:04:16,440 --> 00:04:19,190 Sekarang kita akan melihat utama yang boleh mengambil beberapa hujah. 78 00:04:19,190 --> 00:04:22,470 Di sini kita memanggil mereka int argc dan kurungan argv tali. 79 00:04:22,470 --> 00:04:26,930 Kurungan, sekali lagi, yang menunjukkan bahawa kita berurusan dengan tatasusunan. 80 00:04:26,930 --> 00:04:31,850 Jadi di sini, kurungan tali argv, kami berurusan dengan pelbagai tali. 81 00:04:31,850 --> 00:04:35,360 Jadi argc, itu akan menunjukkan berapa banyak hujah-hujah yang kita telah 82 00:04:35,360 --> 00:04:37,580 diluluskan untuk program ini. 83 00:04:37,580 --> 00:04:46,050 Dan untuk melihat apa yang bermakna, mari kita menutup ini. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Jadi sehingga sekarang, kami telah menjalankan setiap program seperti peringkat umur slash dot. 86 00:04:50,790 --> 00:04:55,250 Kita boleh juga, pada baris arahan, lalu lulus hujah-hujah, dengan itu istilah, perintah 87 00:04:55,250 --> 00:04:56,550 argumen baris. 88 00:04:56,550 --> 00:04:59,760 Jadi hujah pertama, hello dunia. 89 00:04:59,760 --> 00:05:03,350 Jadi di sini, argc akan tiga. 90 00:05:03,350 --> 00:05:07,720 Ia kiraan hujah-hujah pada baris arahan. 91 00:05:07,720 --> 00:05:12,840 Argc sentiasa sekurang-kurangnya 1, sejak dot mengurangkan peringkat umur, sendiri, yang diambil kira sebagai salah satu 92 00:05:12,840 --> 00:05:14,490 hujah-hujah baris arahan. 93 00:05:14,490 --> 00:05:17,010 >> Kemudian hello adalah yang pertama. 94 00:05:17,010 --> 00:05:20,460 Jika peringkat umur slash dot adalah sifar, maka hello adalah yang pertama, dan dunia adalah 95 00:05:20,460 --> 00:05:22,830 arahan kedua hujah baris. 96 00:05:22,830 --> 00:05:29,490 Jadi argv tali, kita akan lihat, mengandungi tali, tanda palang dot 97 00:05:29,490 --> 00:05:33,830 peringkat umur, hello, dan dunia. 98 00:05:33,830 --> 00:05:38,945 Dan, dengan permintaan Daud, kita akan memainkan video memperkenalkan itu. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO MAIN SEMULA] 101 00:05:43,890 --> 00:05:46,240 >> -Sehingga kini dalam program-program kami telah bertulis, kami telah mengisytiharkan 102 00:05:46,240 --> 00:05:48,500 utama utama tidak sah sebagai int. 103 00:05:48,500 --> 00:05:51,170 Dan selama ini, tidak sah yang mempunyai hanya telah menyatakan bahawa 104 00:05:51,170 --> 00:05:54,430 program tidak mengambil apa-apa hujah baris arahan. 105 00:05:54,430 --> 00:05:57,750 Dalam erti kata lain, apabila pengguna menjalankan program, dia boleh memberikan arahan 106 00:05:57,750 --> 00:06:01,710 argumen baris dengan menulis tambahan perkataan atau frasa selepas program ini 107 00:06:01,710 --> 00:06:03,000 menamakan di prom. 108 00:06:03,000 --> 00:06:06,550 >> Nah, jika anda yang anda mahu program anda untuk mengambil hujah baris arahan, satu atau 109 00:06:06,550 --> 00:06:10,540 banyak kata-kata itu, kami perlu menggantikan tidak sah dengan beberapa hujah. 110 00:06:10,540 --> 00:06:12,200 Jadi mari kita buat itu. 111 00:06:12,200 --> 00:06:15,750 Termasuk CS50.h. 112 00:06:15,750 --> 00:06:19,360 Termasuk io.h. standard 113 00:06:19,360 --> 00:06:20,760 Int utama. 114 00:06:20,760 --> 00:06:26,330 Dan kini, bukan tidak sah, saya akan nyatakan satu int dipanggil argc, dan 115 00:06:26,330 --> 00:06:28,780 pelbagai rentetan dipanggil argv. 116 00:06:28,780 --> 00:06:31,820 Sekarang, argc dan argv adalah hanya konvensyen. 117 00:06:31,820 --> 00:06:34,000 >> Kita boleh dipanggil hujah ini paling apa-apa yang kita mahu. 118 00:06:34,000 --> 00:06:37,630 Tetapi apa yang penting ialah argc adalah int kerana, mengikut definisi, adalah 119 00:06:37,630 --> 00:06:41,360 akan mengandungi kiraan hujah, yang beberapa perkataan dalam jumlah bahawa 120 00:06:41,360 --> 00:06:43,380 pengguna telah ditaip pada beliau segera. 121 00:06:43,380 --> 00:06:47,910 argv, sementara itu, vektor hujah, adalah akan benar-benar menjadi pelbagai menyimpan 122 00:06:47,910 --> 00:06:52,020 semua kata-kata yang pengguna mempunyai ditaip pada beliau segera. 123 00:06:52,020 --> 00:06:54,500 >> Mari kita teruskan untuk melakukan sesuatu sekarang dengan satu atau lebih daripada 124 00:06:54,500 --> 00:06:55,660 hujah baris arahan. 125 00:06:55,660 --> 00:07:00,070 Khususnya, mari kita teruskan dan cetak apa sahaja perkataan jenis pengguna 126 00:07:00,070 --> 00:07:03,960 selepas nama program ini di prom. 127 00:07:03,960 --> 00:07:04,730 Kurungan terbuka. 128 00:07:04,730 --> 00:07:06,240 Tutup kurungan. 129 00:07:06,240 --> 00:07:10,510 Printf peratus s garis sendeng terbalik dan koma. 130 00:07:10,510 --> 00:07:14,550 Dan sekarang saya perlu memberitahu printf apa nilai untuk dimasukkan ke dalam pemegang tempat itu. 131 00:07:14,550 --> 00:07:18,600 Saya mahu perkataan pertama yang pengguna mempunyai ditaip selepas nama program ini, 132 00:07:18,600 --> 00:07:23,130 dan sebagainya saya akan nyatakan argv kurungan 1, berhampiran 133 00:07:23,130 --> 00:07:24,830 kurungan, koma bertitik. 134 00:07:24,830 --> 00:07:27,290 >> Sekarang, mengapa kurungan 1 dan tidak kurungan 0? 135 00:07:27,290 --> 00:07:30,990 Nah, ternyata, secara automatik disimpan dalam argv 0 akan menjadi 136 00:07:30,990 --> 00:07:32,620 nama sebenar program ini. 137 00:07:32,620 --> 00:07:36,180 Jadi perkataan pertama yang jenis pengguna selepas nama program ini adalah, dengan 138 00:07:36,180 --> 00:07:38,990 konvensyen, akan menjadi disimpan di dalam argv 1. 139 00:07:38,990 --> 00:07:42,380 Sekarang mari kita menyusun dan menjalankan program ini. 140 00:07:42,380 --> 00:07:47,780 >> Buat argv 0, dot slash argv 0. 141 00:07:47,780 --> 00:07:50,520 Dan kini perkataan seperti khabar. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 Dan kita ada, hello. 144 00:07:53,520 --> 00:07:55,750 >> [END VIDEO MAIN SEMULA] 145 00:07:55,750 --> 00:07:57,000 >> ROB Boden: Baiklah. 146 00:07:57,000 --> 00:07:59,380 147 00:07:59,380 --> 00:08:01,230 Menutup itu. 148 00:08:01,230 --> 00:08:16,730 Jadi mengambil melihat program yang yang kita hanya diperkenalkan kepada kita, baik, hanya 149 00:08:16,730 --> 00:08:24,710 untuk menunjukkan, jika kita cetak argv 0, membuat, kini apa yang ia, argv 0, dot slash argv 0. 150 00:08:24,710 --> 00:08:30,440 Jadi, seperti yang dijangkakan, ia mencetak yang menamakan program ini, kerana argv 0 adalah 151 00:08:30,440 --> 00:08:32,970 sentiasa akan menjadi menamakan program tersebut. 152 00:08:32,970 --> 00:08:35,640 Tetapi mari kita melakukan sesuatu yang sedikit lebih menarik. 153 00:08:35,640 --> 00:08:42,080 >> Jadi dalam masalah yang ditetapkan, anda akan diperkenalkan kepada fungsi ini, atoi. 154 00:08:42,080 --> 00:08:44,440 Jadi, apa yang kita gunakan untuk atoi? 155 00:08:44,440 --> 00:08:48,550 Itu akan menukar tali untuk integer. 156 00:08:48,550 --> 00:08:53,280 Jadi jika saya lulus tali, satu dua tiga, untuk atoi, yang akan menukar yang 157 00:08:53,280 --> 00:08:56,910 untuk integer, satu dua tiga. 158 00:08:56,910 --> 00:09:01,480 Jadi, kita akan untuk menukar yang pertama arahan hujah baris untuk integer, 159 00:09:01,480 --> 00:09:05,690 dan kemudian hanya mencetak integer itu. 160 00:09:05,690 --> 00:09:09,680 >> Jadi, pada asasnya, kita jenis reimplementing getint, hanya 161 00:09:09,680 --> 00:09:12,350 integer yang dimasukkan ketika arahan talian dan bukan dalam program ini 162 00:09:12,350 --> 00:09:14,560 secara interaktif. 163 00:09:14,560 --> 00:09:23,170 Jadi kemudian, menjadikan argv 0, mari kita buat ia di sini, dan tutup itu. 164 00:09:23,170 --> 00:09:27,670 Maka, argv 0, dan mari kita memasuki integer, satu dua tiga empat satu dua. 165 00:09:27,670 --> 00:09:30,840 Jadi ia akan mencetak integer, satu dua tiga empat satu dua. 166 00:09:30,840 --> 00:09:35,500 Terdapat beberapa perihal tersirat untuk atoi yang ia akan berhenti mengambil berat tentang apa-apa 167 00:09:35,500 --> 00:09:39,040 di luar watak angka yang sah, tetapi itu tidak mengapa. 168 00:09:39,040 --> 00:09:42,870 >> Jadi apa yang anda fikir berlaku jika saya melakukan ini? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Segmentasi bersalah. 171 00:09:47,050 --> 00:09:50,410 Jadi mengapa itu? 172 00:09:50,410 --> 00:09:56,060 Jika anda melihat kembali pada program kami, kami menukar argv 1, hujah pertama 173 00:09:56,060 --> 00:09:59,610 selepas nama program ini, untuk integer. 174 00:09:59,610 --> 00:10:03,350 Tetapi tidak ada hujah yang diluluskan selepas nama program ini. 175 00:10:03,350 --> 00:10:08,060 Jadi di sini, kita lihat bahawa ini adalah kereta yang program, kerana, jika kita cuba menjalankannya 176 00:10:08,060 --> 00:10:10,530 tanpa sebarang hujah, ia hanya akan kemalangan. 177 00:10:10,530 --> 00:10:16,950 >> Jadi satu lagi corak umum yang akan anda lihat adalah sesuatu seperti, jika argc kurang 178 00:10:16,950 --> 00:10:21,100 daripada dua, yang menunjukkan bahawa tidak ada sekurang-kurangnya nama program dan 179 00:10:21,100 --> 00:10:29,100 hujah pertama, maka kita akan melakukan sesuatu seperti printf, tidak cukup 180 00:10:29,100 --> 00:10:31,190 hujah baris arahan. 181 00:10:31,190 --> 00:10:33,170 Itu mungkin tidak satu yang baik untuk mencetak, ia mungkin sesuatu, seperti 182 00:10:33,170 --> 00:10:35,440 anda perlu memasukkan integer pada baris arahan. 183 00:10:35,440 --> 00:10:37,450 Saya hanya akan berakhir di sana. 184 00:10:37,450 --> 00:10:39,600 Dan kemudian kembali 1. 185 00:10:39,600 --> 00:10:44,740 Jadi ingat bahawa pada akhir kami program, jika kita kembali 0, yang jenis 186 00:10:44,740 --> 00:10:47,060 menunjukkan kejayaan. 187 00:10:47,060 --> 00:10:50,940 Dan utama juga secara automatik mengembalikan 0 jika anda tidak lakukan. 188 00:10:50,940 --> 00:10:55,800 >> Jadi di sini, kita retuning 1 untuk menunjukkan bahawa itu bukan kejayaan. 189 00:10:55,800 --> 00:11:01,000 Dan anda boleh kembali apa sahaja yang anda mahu, hanya, 0 menunjukkan kejayaan, dan 190 00:11:01,000 --> 00:11:03,390 apa-apa lagi menunjukkan kegagalan. 191 00:11:03,390 --> 00:11:04,855 Jadi mari kita menjalankan versi ini perkara. 192 00:11:04,855 --> 00:11:12,880 193 00:11:12,880 --> 00:11:16,600 Jadi sekarang, jika kita tidak memasukkan baris arahan hujah, dengan betul akan memberitahu 194 00:11:16,600 --> 00:11:18,290 kita, tidak cukup baris arahan. 195 00:11:18,290 --> 00:11:20,610 Tidak menamatkan hukuman itu. 196 00:11:20,610 --> 00:11:24,950 Yang lain, jika kita benar-benar lulus satu, ia boleh melengkapkan program ini. 197 00:11:24,950 --> 00:11:27,920 Jadi ini adalah bagaimana anda akan menggunakan argc dalam bagi mengesahkan bilangan 198 00:11:27,920 --> 00:11:30,630 hujah baris arahan yang sebenarnya berlalu. 199 00:11:30,630 --> 00:11:39,360 >> Jadi mari kita membuat program ini sedikit lebih rumit, dan melihat kedua 200 00:11:39,360 --> 00:11:42,180 lelaran perkara. 201 00:11:42,180 --> 00:11:46,310 Jadi sekarang, kami tidak hanya mencetak arahan hujah baris pertama. 202 00:11:46,310 --> 00:11:51,210 Di sini, kami iterating dari setaraf i int 0, i adalah kurang daripada argc, i ditambah 203 00:11:51,210 --> 00:11:55,280 plus, dan percetakan argv, indeks i. 204 00:11:55,280 --> 00:11:59,300 Jadi corak ini, sekali lagi, ini adalah sama corak seperti sebelum ini, kecuali sebaliknya 205 00:11:59,300 --> 00:12:02,600 memanggil pembolehubah n, kita menggunakan argc. 206 00:12:02,600 --> 00:12:09,520 >> Jadi ini adalah iterating lebih setiap indeks dalam tatasusunan, dan mencetak setiap 207 00:12:09,520 --> 00:12:11,910 elemen dalam array yang. 208 00:12:11,910 --> 00:12:20,300 Dan sebagainya, apabila kita menjalankan program ini, baik, Saya tidak memasuki mana-mana baris arahan 209 00:12:20,300 --> 00:12:22,540 hujah-hujah, jadi ia hanya cetakan nama program. 210 00:12:22,540 --> 00:12:26,053 Jika saya memasukkan sekumpulan perkara IA AKAN mencetak satu, masing-masing pada baris sendiri. 211 00:12:26,053 --> 00:12:31,213 212 00:12:31,213 --> 00:12:32,210 >> OK. 213 00:12:32,210 --> 00:12:34,770 Jadi mari kita mengambil langkah ini satu lagi. 214 00:12:34,770 --> 00:12:38,890 Dan bukannya mencetak setiap hujah pada baris sendiri, mari kita mencetak setiap 215 00:12:38,890 --> 00:12:42,590 watak setiap hujah pada baris sendiri. 216 00:12:42,590 --> 00:12:46,700 Jadi ingat bahawa argv adalah pelbagai tali. 217 00:12:46,700 --> 00:12:50,960 Jadi apa yang adalah rentetan, tetapi pelbagai watak-watak? 218 00:12:50,960 --> 00:12:57,140 Ini bermakna bahawa argv merupakan satu pelbagai pelbagai aksara. 219 00:12:57,140 --> 00:13:04,920 Jadi mengambil kesempatan daripada itu, mari kita mengabaikan ini buat masa ini. 220 00:13:04,920 --> 00:13:08,190 Mari kita mempertimbangkan tali argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Jadi, jika kita mahu membawa setiap watak argv 0 pada baris sendiri, maka saya ingin 222 00:13:14,170 --> 00:13:19,500 untuk melakukan corak yang kami selalu, i adalah kurang daripada panjang array, 223 00:13:19,500 --> 00:13:23,990 yang di sini, adalah strlen daripada, itu tidak apa yang saya mahu lakukan, tali 224 00:13:23,990 --> 00:13:26,450 s sama argv 0. 225 00:13:26,450 --> 00:13:30,390 Jadi saya adalah kurang daripada panjang kami pelbagai, yang dalam kes ini adalah satu pameran 226 00:13:30,390 --> 00:13:34,410 aksara, i plus plus. 227 00:13:34,410 --> 00:13:41,040 Dan sebagainya, seperti yang kita lihat minggu lepas, ia adalah ideal jika kita bergerak di luar yang strlen 228 00:13:41,040 --> 00:13:45,210 keadaan, kerana n akan menambah yang strlen s setiap kali kita pergi 229 00:13:45,210 --> 00:13:47,720 melalui gelung, dan ia tidak akan berubah-ubah. 230 00:13:47,720 --> 00:13:50,230 Oleh itu, kita akan menetapkan ia sama dengan n di sini. 231 00:13:50,230 --> 00:13:54,260 232 00:13:54,260 --> 00:13:55,170 >> OK. 233 00:13:55,170 --> 00:14:01,320 Jadi sekarang, kami iterating lebih setiap indeks dalam array. 234 00:14:01,320 --> 00:14:05,630 Justeru, jika kita ingin mencetak setiap watak dalam yang pelbagai, peratus c adalah 235 00:14:05,630 --> 00:14:06,880 bendera kita mahu menggunakan untuk watak-watak. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Dan kini kurungan i akan menjadi tali, watak indeks i, jadi jika 238 00:14:19,770 --> 00:14:20,970 tali adalah khabar. 239 00:14:20,970 --> 00:14:27,530 maka s 0 akan menjadi h, s kurungan 1 akan e, dan sebagainya. 240 00:14:27,530 --> 00:14:30,800 >> Jadi sekarang kita mahu menggabungkan kedua-dua perkara. 241 00:14:30,800 --> 00:14:35,440 Kita ingin mencetak setiap aksara setiap hujah baris arahan. 242 00:14:35,440 --> 00:14:38,950 Jadi, kita akan mempunyai yang bersarang untuk gelung. 243 00:14:38,950 --> 00:14:47,480 Dan konvensional, kaunter pertama adalah i, seterusnya akan menjadi j, n 244 00:14:47,480 --> 00:14:54,450 akan menjadi strlen daripada argv i, i adalah kurang daripada n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Dan kini bukannya percetakan argv i, jadi argv kurungan i akan indeks - 247 00:15:06,870 --> 00:15:14,280 yang akan menjadi i-ke-baris arahan hujah, argv i, j akan 248 00:15:14,280 --> 00:15:16,925 menjadi watak-j daripada i-ke-hujah. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Saya akan menghapuskan ini sehingga di sini sekarang kerana kita meletakkan ia ke dalam gelung itu. 251 00:15:24,810 --> 00:15:33,900 Jadi adalah bersamaan dengan setaraf tali s argv i, dan kemudian s kurungan j. 252 00:15:33,900 --> 00:15:36,980 >> Nah, kita tidak perlu untuk mengisytiharkan ini s berubah-ubah. 253 00:15:36,980 --> 00:15:44,530 Sebaliknya, kita hanya akan menggabungkan ini dua menjadi apa yang kita telah, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1 [didengar]. 255 00:15:45,780 --> 00:15:48,850 256 00:15:48,850 --> 00:15:49,680 >> ROB Boden: panggilan yang baik. 257 00:15:49,680 --> 00:15:52,936 Jadi ini adalah patah. 258 00:15:52,936 --> 00:15:55,510 Jika saya benar-benar berlari, kita akan telah sedar ini. 259 00:15:55,510 --> 00:16:01,210 Jadi kaunter saya mengambil berat tentang dalam khusus ini untuk 260 00:16:01,210 --> 00:16:05,410 gelung adalah j, iterator itu. 261 00:16:05,410 --> 00:16:08,560 Jadi, anda akan menghadapi isu-isu, mungkin gelung tak terhingga, jika kita 262 00:16:08,560 --> 00:16:09,540 tidak tetap itu. 263 00:16:09,540 --> 00:16:12,220 Itulah sebabnya kita juga bercakap mengenai debugging hari ini. 264 00:16:12,220 --> 00:16:13,120 >> OK. 265 00:16:13,120 --> 00:16:15,240 Jadi mari kita menjalankan program ini. 266 00:16:15,240 --> 00:16:21,200 Dan mari kita sebenarnya menambah printf yang berasingan di sini yang hanya akan mencetak 267 00:16:21,200 --> 00:16:27,480 garis yang lain, kerana ini bermakna apabila kita menjalankan program ini, akan ada kosong 268 00:16:27,480 --> 00:16:31,830 garis di antara setiap watak setiap arahan hujah baris. 269 00:16:31,830 --> 00:16:33,448 Nah, kita akan melihat apa yang bermakna. 270 00:16:33,448 --> 00:16:37,310 271 00:16:37,310 --> 00:16:37,790 Oop. 272 00:16:37,790 --> 00:16:39,870 Mendapat beberapa bug. 273 00:16:39,870 --> 00:16:42,860 Ralat tersirat mengisytiharkan fungsi perpustakaan strlen. 274 00:16:42,860 --> 00:16:51,630 >> Jadi kembali ke dalam program kami, saya terlupa untuk hash termasuk string.h. 275 00:16:51,630 --> 00:16:54,240 276 00:16:54,240 --> 00:16:57,730 Jadi string.h akan menjadi fail header yang mengisytiharkan 277 00:16:57,730 --> 00:16:58,980 fungsi strlen. 278 00:16:58,980 --> 00:17:04,650 279 00:17:04,650 --> 00:17:06,060 OK, ia menyusun. 280 00:17:06,060 --> 00:17:09,109 Sekarang, mari kita menjalankannya. 281 00:17:09,109 --> 00:17:10,930 Jadi hanya itu. 282 00:17:10,930 --> 00:17:17,790 Ia akan mencetak kami nama program, hello dunia. 283 00:17:17,790 --> 00:17:23,510 Ia akan mencetak setiap perkara, setiap watak, di laluan sendiri. 284 00:17:23,510 --> 00:17:24,540 OK. 285 00:17:24,540 --> 00:17:30,625 >> Jadi mari kita benar-benar mengambil ini satu langkah ke hadapan. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Dan bukannya menggunakan string.h, mari kita berfikir tentang bagaimana kita akan melaksanakan kita sendiri 288 00:17:39,700 --> 00:17:41,420 fungsi strlen. 289 00:17:41,420 --> 00:17:45,600 Jadi saya akan segera memberikan tandatangan fungsi. 290 00:17:45,600 --> 00:17:52,900 Jadi mari kita memanggil my_strlen, dan ia akan mengambil rentetan sebagai hujah, 291 00:17:52,900 --> 00:17:57,220 dan kami menjangkakan untuk kembali panjang tali itu. 292 00:17:57,220 --> 00:18:03,430 Jadi, mana lelaki itu? 293 00:18:03,430 --> 00:18:04,990 Ya. 294 00:18:04,990 --> 00:18:06,740 OK. 295 00:18:06,740 --> 00:18:12,900 Jadi ingat daripada penurunan sebelum ini bahawa juga dari minggu lepas, bahawa 296 00:18:12,900 --> 00:18:18,890 pelbagai watak-watak, baik, tali, jadi mari kita katakan ini adalah rentetan s kami. 297 00:18:18,890 --> 00:18:29,870 Jadi, jika s adalah tali, hello, maka, H-E-L-L-O, dalam ingatan, yang akan 298 00:18:29,870 --> 00:18:35,610 berkenaan, dan kemudian garis sendeng terbalik ini 0 watak. 299 00:18:35,610 --> 00:18:39,170 >> Jadi bagaimana kita mendapatkan panjang s? 300 00:18:39,170 --> 00:18:43,190 Nah, silap mata tersebut mencari ini refused 0 watak, batal ini 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Jadi algoritma Adakah akan menjadi sesuatu yang seperti beberapa 303 00:18:50,270 --> 00:18:51,510 watak-watak yang cukup bahawa - 304 00:18:51,510 --> 00:18:56,180 mari kita tangan ini mewakili beberapa kaunter, mari kita memanggilnya panjang int ini. 305 00:18:56,180 --> 00:19:00,060 Jadi, bermula dari di sini, kami akan melelar atas tali kami. 306 00:19:00,060 --> 00:19:04,100 >> Jadi watak pertama, ia H, dan ia tidak kembali mengurangkan 0, jadi 307 00:19:04,100 --> 00:19:05,170 panjang ialah 1. 308 00:19:05,170 --> 00:19:08,050 Melelar dengan watak yang akan datang, E, dan ia tidak garis sendeng terbalik 0. 309 00:19:08,050 --> 00:19:09,630 Length ialah 2. 310 00:19:09,630 --> 00:19:10,960 L, 3. 311 00:19:10,960 --> 00:19:11,850 L, 4. 312 00:19:11,850 --> 00:19:13,050 O, 5. 313 00:19:13,050 --> 00:19:16,690 Dan akhirnya, kita mencapai garis sendeng terbalik 0, dan justeru itu, baik, 314 00:19:16,690 --> 00:19:17,780 rentetan ini berakhir. 315 00:19:17,780 --> 00:19:20,130 Jadi mari kita kembali 5. 316 00:19:20,130 --> 00:19:33,630 >> Jadi sebenarnya melaksanakan bahawa, pertama, n panjang saya sama dengan 0, tangan kanan saya. 317 00:19:33,630 --> 00:19:36,088 Dan kita akan melelar - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1 [didengar] 319 00:19:38,000 --> 00:19:38,640 >> ROB Boden: Oh, menembak. 320 00:19:38,640 --> 00:19:39,870 Panggilan yang baik. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Jadi n panjang sama dengan 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Jadi sekarang, panjang manakala s tidak sama dan kemudian, garis sendeng terbalik 0. 325 00:19:58,310 --> 00:20:04,660 Jadi ingat, garis sendeng terbalik ini 0, ia adalah satu watak sebenar, dan ia menunjukkan 326 00:20:04,660 --> 00:20:05,820 akhir tali. 327 00:20:05,820 --> 00:20:09,850 Sama seperti, juga, garis sendeng terbalik n adalah watak sebenar. 328 00:20:09,850 --> 00:20:14,040 Garis sendeng terbalik 0 akan menunjukkan akhir tali kami. 329 00:20:14,040 --> 00:20:15,414 Saya tidak mahu meletakkan bahawa di sana. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Dan manakala s diindeks oleh panjang tidak sama dengan null, maka 332 00:20:25,620 --> 00:20:27,130 kita hanya akan kenaikan panjang. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Jadi kemudian, pada akhir program kami, panjang akhirnya akan 335 00:20:34,880 --> 00:20:37,610 adalah 5 dalam kes ini. 336 00:20:37,610 --> 00:20:39,210 Dan kita akan kembali panjang. 337 00:20:39,210 --> 00:20:42,570 338 00:20:42,570 --> 00:20:43,530 >> OK. 339 00:20:43,530 --> 00:20:48,290 Jadi sekarang turun di sini, saya tidak melakukan my_strlen. 340 00:20:48,290 --> 00:20:50,700 Mari kita menyusun ia memastikan semuanya berjalan dengan lancar. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Sedang saya lakukan dalam 2? 343 00:20:58,210 --> 00:21:00,565 Atau bahawa 1? 344 00:21:00,565 --> 00:21:01,940 Yang perlu dilakukan. 345 00:21:01,940 --> 00:21:02,690 Baiklah. 346 00:21:02,690 --> 00:21:08,490 Jadi ini adalah argv 2. 347 00:21:08,490 --> 00:21:11,585 Kerja seperti yang dijangkakan, walaupun adalah bahawa yang saya lakukan dalam? 348 00:21:11,585 --> 00:21:15,060 349 00:21:15,060 --> 00:21:15,550 Ya. 350 00:21:15,550 --> 00:21:16,760 OK. 351 00:21:16,760 --> 00:21:21,820 Versi perkara tidak mempunyai garis printf baru selepas itu, tetapi ia 352 00:21:21,820 --> 00:21:22,910 tidak membuat apa-apa perbezaan. 353 00:21:22,910 --> 00:21:23,300 OK. 354 00:21:23,300 --> 00:21:25,780 Jadi bekerja seperti yang diharapkan. 355 00:21:25,780 --> 00:21:34,750 >> Sekarang kita juga boleh menggabungkan langkah ini satu lanjut, di mana notis di sini, baik, 356 00:21:34,750 --> 00:21:38,920 pertama, kita merebut strlen daripada argv i, dan kemudian kita iterating lebih 357 00:21:38,920 --> 00:21:41,450 setiap aksara dalam rentetan itu. 358 00:21:41,450 --> 00:21:47,480 Jadi, daripada melakukan itu, bagaimana jika kita hanya menggabungkan logik ini menunggu 359 00:21:47,480 --> 00:21:50,740 sehingga kita mencapai garis sendeng terbalik 0 betul ke dalam ini untuk gelung? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Jadi melelar manakala argv i, j tidak tidak sama garis sendeng terbalik 0. 362 00:22:07,490 --> 00:22:10,680 Jadi mari kita menjalankannya pertama. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Baiklah. 365 00:22:21,180 --> 00:22:27,655 Jadi di sini, keadaan ini berkata - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 mari kita jelas bahawa. 368 00:22:40,060 --> 00:22:49,140 Jadi sekarang, biarlah ini menjadi argv kami. 369 00:22:49,140 --> 00:22:55,290 Oleh itu, apabila saya hanya berlari program yang sebelum ini, argv adalah pelbagai tali. 370 00:22:55,290 --> 00:23:03,100 Dan sebagainya, jika saya menjalankannya dengan dot slash argv 2, hello dunia, maka argv yang 371 00:23:03,100 --> 00:23:07,650 itu sendiri adalah panjang 3, untuk argv sifar, hello, dan dunia. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Dan di dalam setiap indeks ini adalah, sendiri pelbagai, di mana ini akan 374 00:23:19,660 --> 00:23:23,780 dot, ini akan menjadi palang, saya tidak tahu jika itu adalah arah yang betul, saya 375 00:23:23,780 --> 00:23:25,680 tidak fikir ia adalah. 376 00:23:25,680 --> 00:23:30,110 A-R-V sengkang, memerlukan lebih banyak ruang. 377 00:23:30,110 --> 00:23:32,570 Mari kita potong pelbagai ini. 378 00:23:32,570 --> 00:23:38,230 Dash 0, dan kemudian garis sendeng terbalik 0 A-R-V. 379 00:23:38,230 --> 00:23:43,160 Dan kemudian dalam kucar-kacir akan khabar. 380 00:23:43,160 --> 00:23:45,910 Katakan, H-E garis sendeng terbalik 0. 381 00:23:45,910 --> 00:23:51,130 Dan akhirnya, W-O garis sendeng terbalik 0. 382 00:23:51,130 --> 00:23:59,730 >> Jadi algoritma yang kita hanya menulis, yang bersarang untuk gelung, apa yang mereka 383 00:23:59,730 --> 00:24:07,321 melakukan iaitu, kita mula-mula mempunyai menangani i dan kemudian j. 384 00:24:07,321 --> 00:24:15,206 Ini akan menjadi lebih mudah dengan kod pada skrin, Mari kita kembali kepada ini. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Jadi notis bahawa saya adalah iterator itulah iterating atas setiap arahan 387 00:24:24,600 --> 00:24:25,610 hujah baris. 388 00:24:25,610 --> 00:24:28,870 Dan j adalah iterating iterator yang atas setiap watak dalam yang 389 00:24:28,870 --> 00:24:30,410 hujah baris arahan. 390 00:24:30,410 --> 00:24:46,755 Jadi apa printf terdalam ini melakukan adalah, kami telah printf argv 0 0, printf 391 00:24:46,755 --> 00:24:58,680 argv 0 1, printf argv 0 2, 0 3, 0 4, 0 5, 0 6, tetapi sekarang, argv 0 7 akan 392 00:24:58,680 --> 00:25:00,670 sama garis sendeng terbalik 0. 393 00:25:00,670 --> 00:25:05,730 >> Jadi maka kita keluar yang bagi gelung, dan sekarang aku iterates kepada 1. 394 00:25:05,730 --> 00:25:10,910 Dan sekarang kita akan cetak argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 baik, sekarang, sejak saya memotong hello pendek, argv 1 2 sekali lagi akan menjadi 396 00:25:17,040 --> 00:25:18,170 garis sendeng terbalik 0. 397 00:25:18,170 --> 00:25:25,050 Dan sebagainya, kenaikan i dan terus, dan sebagainya, sehingga kita mencetak semua 398 00:25:25,050 --> 00:25:28,580 dunia, dan mereka adalah tiga baris arahan hujah-hujah, dan kami akan keluar daripada 399 00:25:28,580 --> 00:25:31,670 gelung paling luar, dan selesai program kami. 400 00:25:31,670 --> 00:25:38,390 401 00:25:38,390 --> 00:25:39,640 OK. 402 00:25:39,640 --> 00:25:43,903 403 00:25:43,903 --> 00:25:46,795 >> Jadi mari kita kembali di sini. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Jadi, anda akan mendapat beberapa kebiasaan dengan hujah baris arahan mengenai perkara ini 406 00:25:52,370 --> 00:25:54,460 masalah tertentu ditetapkan. 407 00:25:54,460 --> 00:25:56,630 >> Sekarang, debugging. 408 00:25:56,630 --> 00:26:01,680 Jadi anda mungkin telah terpaksa melakukan beberapa debugging dengan anda sebelum ini 409 00:26:01,680 --> 00:26:03,120 masalah ditetapkan. 410 00:26:03,120 --> 00:26:08,420 Dan satu cara yang amat mudah debugging, pertama, mari kita lihat satu program kereta. 411 00:26:08,420 --> 00:26:20,710 412 00:26:20,710 --> 00:26:23,830 Nah, berjalan melalui program ini, kita akan meminta pengguna untuk 413 00:26:23,830 --> 00:26:29,350 integer, merebut integer itu, dan kemudian, sewenang-wenangnya, kita mempunyai gelung sementara 414 00:26:29,350 --> 00:26:32,280 hanya akan SUSUTAN i sehingga ia sama dengan 10. 415 00:26:32,280 --> 00:26:35,820 Mari kita hanya menganggap saya memasuki integer lebih besar daripada 10. 416 00:26:35,820 --> 00:26:38,700 Jadi SUSUTAN i sehingga ia sama dengan 10. 417 00:26:38,700 --> 00:26:42,630 >> Dan maka kita mempunyai gelung manakala bahawa, sementara i tidak sama 0, kita 418 00:26:42,630 --> 00:26:44,540 akan SUSUTAN i dengan 3. 419 00:26:44,540 --> 00:26:49,790 Jadi jika anda melihat niat bug yang di sini, ia adalah bahawa ini akan SUSUTAN i untuk 420 00:26:49,790 --> 00:26:57,010 10, dan maka ini gelung dan suasana susutan i dari 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 kepada negatif 2, kepada negatif 5, dan sebagainya, ke infiniti negatif, kerana i akan 422 00:27:02,880 --> 00:27:05,920 tidak pernah benar-benar sama dengan 0. 423 00:27:05,920 --> 00:27:08,610 Dan kemudian pada akhir program ini, kita mempunyai fungsi foo yang adalah 424 00:27:08,610 --> 00:27:12,130 berlaku cetak bahawa i. 425 00:27:12,130 --> 00:27:16,520 >> Jadi ini adalah program yang singkat dan remeh, dan pepijat adalah jelas, 426 00:27:16,520 --> 00:27:18,790 terutamanya selepas saya hanya berkata apa bug itu. 427 00:27:18,790 --> 00:27:24,840 Tetapi niat di sini adalah, baik, mungkin ini sebenarnya kelihatan seperti beberapa anda 428 00:27:24,840 --> 00:27:30,040 penyelesaian dari tamak daripada yang sebelumnya masalah ditetapkan, dan mungkin anda mempunyai 429 00:27:30,040 --> 00:27:32,800 beberapa gelung tak terhingga dalam program anda, dan anda tidak mempunyai idea 430 00:27:32,800 --> 00:27:34,100 apa yang menyebabkan ia. 431 00:27:34,100 --> 00:27:38,690 Jadi teknik debugging sangat berguna adalah untuk hanya menambah printfs 432 00:27:38,690 --> 00:27:40,180 seluruh kod anda. 433 00:27:40,180 --> 00:27:49,200 >> Jadi di sini saya ingin printf di luar gelung sementara pertama. 434 00:27:49,200 --> 00:27:53,155 Dan di sini saya ingin printf yang, dan saya hanya akan mencetak i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Saya juga akan lakukan pertama manakala gelung, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Di luar, kedua manakala gelung. 439 00:28:09,040 --> 00:28:12,170 Sekali lagi, di dalam mencetak dari sini, nilai i. 440 00:28:12,170 --> 00:28:16,270 441 00:28:16,270 --> 00:28:17,520 Dan mari kita berjalan ini. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Debug slash Jadi titik. 444 00:28:24,800 --> 00:28:25,610 Masukkan integer. 445 00:28:25,610 --> 00:28:28,150 Mari kita buat 13. 446 00:28:28,150 --> 00:28:28,760 Dan ledakan. 447 00:28:28,760 --> 00:28:33,300 Kita melihat bahawa kita adalah gelung tak terhingga bahagian dalam gelung manakala yang kedua. 448 00:28:33,300 --> 00:28:36,305 Jadi sekarang kita tahu apa bug itu. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Tetapi printf debugging adalah betul-betul hebat, tetapi apabila program anda mendapatkan 451 00:28:45,610 --> 00:28:50,560 lebih lama dan lebih rumit, terdapat penyelesaian yang lebih canggih untuk 452 00:28:50,560 --> 00:28:51,705 mendapat perkara bekerja. 453 00:28:51,705 --> 00:28:52,955 Jadi mari kita membuang semua printfs ini. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Dan mari kita memastikan saya tidak memecahkan apa-apa. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Jadi program ini kita akan untuk memperkenalkan dipanggil 458 00:29:14,180 --> 00:29:16,715 GDB, untuk GNU Debugger. 459 00:29:16,715 --> 00:29:21,892 460 00:29:21,892 --> 00:29:27,510 Well, sebenarnya, mari kita keluarkan debug untuk yang kedua, dan membuat debug lagi. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Well, sebenarnya pertama, satu pengajaran yang baik dalam hujah baris arahan. 463 00:29:34,440 --> 00:29:37,780 Perhatikan bahawa perintah dentang ini yang menyusun semuanya yang diluluskan 464 00:29:37,780 --> 00:29:41,300 pada baris arahan, ini hujah baris arahan. 465 00:29:41,300 --> 00:29:46,250 Jadi bagaimana anda akan menggunakan hujah baris arahan, seperti yang kita 466 00:29:46,250 --> 00:29:51,500 lakukan sebelum ini, dan kerana anda akan di Serangga 2, itu bagaimana dentang menggunakan mereka. 467 00:29:51,500 --> 00:30:00,070 >> Jadi melihat bahawa ini bendera pertama, sengkang ggdb3, apa itu mengatakan iaitu, dentang, 468 00:30:00,070 --> 00:30:03,790 anda perlu menyusun fail ini dengan niat yang kita akan akhirnya 469 00:30:03,790 --> 00:30:05,380 perlu debug ia. 470 00:30:05,380 --> 00:30:13,840 Jadi selagi anda mempunyai bendera yang, maka kita boleh GDB debug. 471 00:30:13,840 --> 00:30:17,380 Dan ia akan membuka GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Jadi, terdapat banyak arahan yang anda perlukan untuk mendapatkan digunakan untuk. 473 00:30:22,920 --> 00:30:27,100 Yang pertama yang anda akan mungkin segera perlukan adalah Run. 474 00:30:27,100 --> 00:30:28,200 Jadi apa yang Jalankan akan lakukan? 475 00:30:28,200 --> 00:30:30,910 Ia akan memulakan program kami. 476 00:30:30,910 --> 00:30:36,180 Jadi berjalan, program bermula, program ini meminta kita untuk integer, 13. 477 00:30:36,180 --> 00:30:39,170 Dan kemudian ia gelung tak terhingga sebagai dijangkakan, kecuali saya dibuang 478 00:30:39,170 --> 00:30:40,500 printfs, jadi kita tidak melihat bahawa. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Keluar seperti biasa. 481 00:30:44,600 --> 00:30:45,850 Oh. 482 00:30:45,850 --> 00:30:48,570 483 00:30:48,570 --> 00:30:53,640 Ia mungkin bahawa ia dibalut semua jalan di seluruh, kembali kepada - mengabaikan itu. 484 00:30:53,640 --> 00:30:55,170 Andaikan ia tidak keluar seperti biasa. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Ada jawapan yang rumit untuk itu. 487 00:31:03,370 --> 00:31:07,890 >> Jadi sekarang, itu bukan sangat berguna. 488 00:31:07,890 --> 00:31:11,480 Jadi hanya menjalankan program kami dalam penyahpepijat ini tidak membantu kita dalam mana-mana 489 00:31:11,480 --> 00:31:15,610 cara, kerana kita boleh sahaja selesai dot slash debug dari luar GDB. 490 00:31:15,610 --> 00:31:21,250 Jadi perintah satu yang anda akan mungkin - 491 00:31:21,250 --> 00:31:22,970 dan saya akan berhenti ini. 492 00:31:22,970 --> 00:31:25,850 Kawalan-d atau berhenti, kedua-dua kerja. 493 00:31:25,850 --> 00:31:29,550 Jadi mari kita membukanya semula. 494 00:31:29,550 --> 00:31:31,130 >> Arahan lain yang mungkin anda akan dengan serta-merta mahu 495 00:31:31,130 --> 00:31:33,600 membiasakan diri adalah Break. 496 00:31:33,600 --> 00:31:37,120 Jadi kami akan memecahkan di utama sekarang, dan kemudian saya akan menjelaskan bahawa. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Nah, di sini kita lihat kita menetapkan takat putus yang di baris ini dalam debug.c. 499 00:31:46,370 --> 00:31:50,160 Jadi apa cara rehat ialah apabila saya menaip jangka, program ini akan 500 00:31:50,160 --> 00:31:53,560 terus berjalan sehingga Saya mencecah takat putus a. 501 00:31:53,560 --> 00:31:59,390 Oleh itu, apabila saya mencecah jangka, program ini bermula, dan kemudian ia memecah sebaik sahaja ia 502 00:31:59,390 --> 00:32:01,940 memasuki fungsi utama. 503 00:32:01,940 --> 00:32:06,930 Cuti utama akan menjadi sesuatu anda cukup biasa lakukan. 504 00:32:06,930 --> 00:32:11,340 >> Dan kini, untuk memperkenalkan anda untuk lebih banyak arahan. 505 00:32:11,340 --> 00:32:14,330 Perhatikan di sini, bahawa ia mengatakan kita memecahkan di garisan 11, yang merupakan 506 00:32:14,330 --> 00:32:16,230 printf, masukkan integer. 507 00:32:16,230 --> 00:32:21,260 Jadi arahan Seterusnya akan menjadi bagaimana kita pergi ke baris seterusnya kod. 508 00:32:21,260 --> 00:32:24,810 Ini akan membolehkan kita untuk melangkah melalui talian program kami dengan talian. 509 00:32:24,810 --> 00:32:26,260 Jadi akan datang. 510 00:32:26,260 --> 00:32:29,820 >> Sekarang talian 12, kita akan untuk mendapatkan integer. 511 00:32:29,820 --> 00:32:30,450 Seterusnya. 512 00:32:30,450 --> 00:32:34,290 Dan jika anda hanya tekan Enter sekali lagi, ia akan buat semula perkara terakhir yang anda lakukan. 513 00:32:34,290 --> 00:32:36,480 Jadi, saya tidak perlu menaip seterusnya setiap kali. 514 00:32:36,480 --> 00:32:40,100 Jadi memasukkan integer, 13. 515 00:32:40,100 --> 00:32:46,940 Jadi sekarang, talian 14, manakala i adalah lebih besar daripada 10, dan saya akan dilakukan seterusnya. 516 00:32:46,940 --> 00:32:48,685 Dan kita lihat kita akan SUSUTAN i. 517 00:32:48,685 --> 00:32:50,210 Jadi kita akan SUSUTAN i lagi. 518 00:32:50,210 --> 00:32:53,620 >> Jadi sekarang, satu lagi berguna arahan adalah Cetak. 519 00:32:53,620 --> 00:32:55,750 Jadi Cetak akan mencetak nilai pembolehubah. 520 00:32:55,750 --> 00:32:57,825 Mari kita membawa keluar nilai pembolehubah i. 521 00:32:57,825 --> 00:32:58,705 Mari kita mencetak i. 522 00:32:58,705 --> 00:33:00,910 Ia akan berkata i ialah 11. 523 00:33:00,910 --> 00:33:03,330 Sekarang kita Seterusnya lagi semasa i adalah lebih besar daripada 10. 524 00:33:03,330 --> 00:33:05,590 Jadi saya masih lebih besar daripada 10, kerana ia 11. 525 00:33:05,590 --> 00:33:06,920 i tolak tolak. 526 00:33:06,920 --> 00:33:08,250 Mari kita mencetak i lagi. 527 00:33:08,250 --> 00:33:10,950 Seperti yang dijangka, ia 10. 528 00:33:10,950 --> 00:33:12,510 >> Jadi sekarang, akan datang. 529 00:33:12,510 --> 00:33:16,250 Ia akan kembali ke keadaan, i adalah lebih besar daripada 10, tetapi saya kini 10, jadi 530 00:33:16,250 --> 00:33:20,040 ia tidak lebih besar daripada 10, jadi kami menjangkakan ia jatuh daripada gelung sementara. 531 00:33:20,040 --> 00:33:22,220 Dan sekarang kita di bawah yang baris kod. 532 00:33:22,220 --> 00:33:28,750 Dan hal yang lain, Senarai, hanya akan untuk memaparkan sebelumnya dan seterusnya 533 00:33:28,750 --> 00:33:31,240 beberapa baris kod, dalam kes anda kehilangan diri sendiri. 534 00:33:31,240 --> 00:33:35,420 Jadi kita hanya keluar gelung selama ini, dan kini kita telah memasuki ini 535 00:33:35,420 --> 00:33:37,080 manakala gelung, line 18. 536 00:33:37,080 --> 00:33:39,860 Jadi sementara i tidak sama 0. 537 00:33:39,860 --> 00:33:46,570 Dan, seterusnya, saya sama i tolak 3, dan kita akan notis, ini hanya akan terus berterusan. 538 00:33:46,570 --> 00:33:48,270 Dan kita boleh mencetak i. 539 00:33:48,270 --> 00:33:49,990 >> Setiap arahan jenis mempunyai jalan pintas. 540 00:33:49,990 --> 00:33:51,720 Jadi p singkat untuk Cetak. 541 00:33:51,720 --> 00:33:53,400 Oleh itu, kita boleh p i. 542 00:33:53,400 --> 00:33:57,550 Hanya terus memegang n, atau terus melakukan Seterusnya. 543 00:33:57,550 --> 00:33:58,340 Cetak i lagi. 544 00:33:58,340 --> 00:34:00,380 Anda lihat sekarang ia negatif 167. 545 00:34:00,380 --> 00:34:06,030 Jadi, ini akan berterusan selama-lamanya, tetapi tidak benar-benar selama-lamanya, kerana anda hanya melihat, ia 546 00:34:06,030 --> 00:34:09,330 sebenarnya akan berakhir pada satu ketika. 547 00:34:09,330 --> 00:34:15,699 >> Jadi yang Bermula GDB. 548 00:34:15,699 --> 00:34:19,504 Tetapi mari kita buat satu lagi perkara dalam GDB. 549 00:34:19,504 --> 00:34:20,754 Uh, debug. 550 00:34:20,754 --> 00:34:23,540 551 00:34:23,540 --> 00:34:28,534 Jadi, dalam kes ini, yang gelung tak terhingga kebetulan berada di dalam 552 00:34:28,534 --> 00:34:30,050 fungsi utama. 553 00:34:30,050 --> 00:34:35,779 Dan buat masa ini, hanya menerima bahawa bahawa saya akan bergerak gelung yang tidak terhingga ke dalam 554 00:34:35,779 --> 00:34:37,029 fungsi foo. 555 00:34:37,029 --> 00:34:40,679 556 00:34:40,679 --> 00:34:43,730 Hanya ingat bahawa, pada akhir ini program, baik, ini adalah asalnya 557 00:34:43,730 --> 00:34:46,210 memanggil foo, yang hanya akan mencetak i. 558 00:34:46,210 --> 00:34:51,880 Tetapi sekarang kita memanggil foo, yang merupakan akan SUSUTAN i sehingga ia 0, dan 559 00:34:51,880 --> 00:34:54,548 kemudian mencetak ubah itu. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Jimat itu. 562 00:34:57,970 --> 00:35:00,175 Buat debug. 563 00:35:00,175 --> 00:35:03,310 Dan kini, Pra-Pemasangan debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Jadi, jika saya hanya Jalankan maka saya tidak akan dapat benar-benar melangkah melalui saya 566 00:35:10,580 --> 00:35:11,730 program barisan oleh talian. 567 00:35:11,730 --> 00:35:19,820 Jadi mari kita memecahkan di utama, dan kemudian taip jangka. 568 00:35:19,820 --> 00:35:28,160 Oleh itu, pergilah melalui ini, printf, masukkan integer, dapatkan integer, 13. 569 00:35:28,160 --> 00:35:34,180 570 00:35:34,180 --> 00:35:37,490 Jadi, kita akan menyimpan decrementing sehingga i adalah lebih besar daripada 10. 571 00:35:37,490 --> 00:35:42,840 Kemudian kita akan jatuh melalui manakala gelung, dan sampai ke garisan - 572 00:35:42,840 --> 00:35:44,364 mari kita buka dalam tetingkap berasingan. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Oleh itu, kita decremented sehingga i tidak lagi lebih besar daripada 10, dan kemudian kita 575 00:35:53,300 --> 00:35:55,700 dipanggil fungsi, foo. 576 00:35:55,700 --> 00:36:01,340 >> Jadi apa yang berlaku sebaik sahaja saya mencecah fungsi foo, baik, saya dipanggil foo, dan 577 00:36:01,340 --> 00:36:04,030 maka saya tidak lagi mempunyai kawalan ke atas GDB. 578 00:36:04,030 --> 00:36:10,230 Jadi sebaik sahaja saya mencecah Seterusnya di garisan ini, perkara berterusan sehingga ini berlaku, 579 00:36:10,230 --> 00:36:12,400 di mana program ini keluar apabila - 580 00:36:12,400 --> 00:36:14,450 menganggap ia tidak wujud akhirnya. 581 00:36:14,450 --> 00:36:16,390 Anda melihat ia berhenti seketika untuk sedikit walaupun. 582 00:36:16,390 --> 00:36:22,040 Jadi mengapa saya kehilangan kawalan ke atas program ini pada ketika itu? 583 00:36:22,040 --> 00:36:27,540 Nah, apabila saya menaip depan, yang pergi ke baris seterusnya literal kod yang 584 00:36:27,540 --> 00:36:28,850 akan melaksanakan. 585 00:36:28,850 --> 00:36:35,950 Jadi selepas line 21, baris seterusnya kod yang akan melaksanakan adalah talian 22, 586 00:36:35,950 --> 00:36:38,520 yang, keluar dari utama. 587 00:36:38,520 --> 00:36:43,810 Jadi, saya tidak mahu hanya pergi ke baris seterusnya kod. 588 00:36:43,810 --> 00:36:48,170 Saya mahu pergi ke dalam fungsi, foo, dan kemudian juga melangkah melalui 589 00:36:48,170 --> 00:36:49,830 mereka baris kod. 590 00:36:49,830 --> 00:36:53,726 >> Jadi untuk itu, kita mempunyai alternatif. 591 00:36:53,726 --> 00:36:56,770 Mari kita berhenti itu lagi. 592 00:36:56,770 --> 00:36:58,020 Cuti utama. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, seterusnya, seterusnya, 13, akan datang, seterusnya, seterusnya, berhati-hati, 595 00:37:06,370 --> 00:37:09,820 sebelum kita mencapai garis foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Jadi sekarang, kami di talian 21, di mana kita panggil foo. 598 00:37:13,700 --> 00:37:17,100 Kami tidak mahu menaip seterusnya, kerana itu hanya akan memanggil fungsi foo, dan 599 00:37:17,100 --> 00:37:18,710 pergi ke baris seterusnya kod. 600 00:37:18,710 --> 00:37:20,840 Apa yang kita mahu untuk digunakan ialah Step. 601 00:37:20,840 --> 00:37:25,690 Jadi ada perbezaan antara Langkah dan Seterusnya, di mana Langkah langkah ke dalam 602 00:37:25,690 --> 00:37:28,190 berfungsi, dan Seterusnya pergi lebih fungsi. 603 00:37:28,190 --> 00:37:32,830 Ia hanya melaksanakan keseluruhan daripada fungsi dan menyimpan berterusan. 604 00:37:32,830 --> 00:37:37,210 >> Jadi Langkah akan membawa kita ke dalam majlis itu, foo. 605 00:37:37,210 --> 00:37:41,160 Dan kita lihat di sini, sekarang, kami kembali di gelung selama ini itulah, dalam teori, 606 00:37:41,160 --> 00:37:44,190 akan terus selama-lamanya. 607 00:37:44,190 --> 00:37:50,420 Dan jika anda memukul langkah, apabila ia tidak juga fungsi untuk panggilan, maka ia 608 00:37:50,420 --> 00:37:51,720 sama dengan Seterusnya. 609 00:37:51,720 --> 00:37:55,320 Jadi ia hanya apabila anda berada di garis yang memanggil fungsi yang Langkah 610 00:37:55,320 --> 00:37:56,970 akan berbeza daripada Seterusnya. 611 00:37:56,970 --> 00:37:57,930 Jadi Langkah akan membawa kita di sini. 612 00:37:57,930 --> 00:38:02,100 Langkah, langkah, langkah, langkah, langkah, langkah, dan kita akan hanya gelung tak terhingga selama-lamanya. 613 00:38:02,100 --> 00:38:06,810 >> Jadi, anda mungkin akan digunakan untuk bahawa anda cara mengenal pasti gelung tak terhingga, adalah 614 00:38:06,810 --> 00:38:08,960 hanya memegang ini Masukkan utama untuk melihat di mana anda tersekat. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Ada cara yang lebih baik untuk berbuat demikian, tetapi buat masa ini, adalah betul-betul yang mencukupi. 617 00:38:14,780 --> 00:38:17,967 Dan segi gaya, untuk menepati Gaya 50, yang perlu saya telah melakukan ini. 618 00:38:17,967 --> 00:38:21,550 619 00:38:21,550 --> 00:38:24,030 OK. 620 00:38:24,030 --> 00:38:28,400 >> Jadi satu arahan lepas untuk memperkenalkan. 621 00:38:28,400 --> 00:38:30,810 Nah, mari kita GDB debug masuk 622 00:38:30,810 --> 00:38:35,580 Jadi, daripada melanggar di utama, sekiranya saya tahu fungsi foo yang juga merupakan 623 00:38:35,580 --> 00:38:39,230 masalah, maka saya boleh mempunyai hanya berkata, pecah di foo, sebaliknya. 624 00:38:39,230 --> 00:38:42,310 Katakan saya memecahkan di kedua-dua utama dan foo. 625 00:38:42,310 --> 00:38:45,390 Jadi, anda boleh menetapkan seberapa banyak titik putus yang anda mahu. 626 00:38:45,390 --> 00:38:49,230 Apabila saya menaip jangka, ia akan berhenti di - 627 00:38:49,230 --> 00:38:52,180 aduh, mari kita susun semula, kerana Saya menukar sesuatu. 628 00:38:52,180 --> 00:38:55,950 Anda akan melihat ini talian, Amaran, sumber fail adalah lebih terkini daripada laku. 629 00:38:55,950 --> 00:38:59,680 Ini bermakna bahawa saya hanya pergi di sini dan menukar ini untuk menepati Gaya 630 00:38:59,680 --> 00:39:03,100 50, tetapi saya tidak susun semula program ini. 631 00:39:03,100 --> 00:39:04,870 Jadi GDB membuatkan saya sedar itu. 632 00:39:04,870 --> 00:39:10,130 Saya akan berhenti, membuat debug lagi, memukul Pra-Pemasangan debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Jadi sekarang, kembali kepada apa yang saya lakukan. 635 00:39:12,800 --> 00:39:15,720 Cuti utama, rehat foo. 636 00:39:15,720 --> 00:39:20,680 Sekarang, jika saya menjalankan program ini, jadi ia akan berterusan sehingga terkena 637 00:39:20,680 --> 00:39:21,320 takat putus. 638 00:39:21,320 --> 00:39:24,680 Takat putus yang berlaku kepada menjadi orang pertama di utama. 639 00:39:24,680 --> 00:39:28,630 Sekarang, bukan melakukan seterusnya, seterusnya, seterusnya, akan datang, akan datang, sehingga saya memukul foo, saya 640 00:39:28,630 --> 00:39:35,230 boleh menaip terus, yang akan terus sehingga anda mencecah takat putus seterusnya. 641 00:39:35,230 --> 00:39:37,200 Saya perlu memasukkan integer pertama. 642 00:39:37,200 --> 00:39:40,570 Teruskan akan berterusan sehingga saya melanda takat putus seterusnya, iaitu bahawa 643 00:39:40,570 --> 00:39:43,320 fungsi foo. 644 00:39:43,320 --> 00:39:50,130 >> Jadi Run akan berjalan sehingga anda mencecah takat putus, tetapi anda hanya taip air semasa 645 00:39:50,130 --> 00:39:54,060 anda memulakan program ini, dan kemudian, selepas itu, ia terus. 646 00:39:54,060 --> 00:40:01,950 Jika saya hanya melakukan memecahkan utama dan kemudian berlari, ia akan memecahkan di 647 00:40:01,950 --> 00:40:03,670 utama, dan kemudian teruskan. 648 00:40:03,670 --> 00:40:10,050 Oleh kerana saya tidak mempunyai titik rehat di foo, memasukkan integer, maka sekarang saya 649 00:40:10,050 --> 00:40:11,380 tidak akan memecahkan di foo. 650 00:40:11,380 --> 00:40:16,318 Ia hanya akan terhingga gelung sehingga itu. 651 00:40:16,318 --> 00:40:17,568 OK. 652 00:40:17,568 --> 00:40:19,500 653 00:40:19,500 --> 00:40:24,420 >> Jadi, itu Pengenalan GDB. 654 00:40:24,420 --> 00:40:27,790 Anda perlu mula menggunakannya dalam set masalah anda. 655 00:40:27,790 --> 00:40:30,550 Ia boleh sangat membantu untuk mengenal pasti bug. 656 00:40:30,550 --> 00:40:35,280 Jika anda benar-benar adil, barisan-line, pergi melalui kod anda, dan bandingkan apa yang 657 00:40:35,280 --> 00:40:39,740 sebenarnya berlaku dengan apa yang anda harapkan berlaku, maka ia cukup 658 00:40:39,740 --> 00:40:41,060 sukar untuk terlepas pepijat anda. 659 00:40:41,060 --> 00:40:45,280 660 00:40:45,280 --> 00:40:46,530 OK. 661 00:40:46,530 --> 00:40:48,310 662 00:40:48,310 --> 00:40:54,040 >> Jadi minggu lepas David dibesarkan ini barangan kriptografi rahsia-utama bagi 663 00:40:54,040 --> 00:40:59,350 kali pertama, di mana kita tidak mahu kata laluan hanya disimpan pada kami 664 00:40:59,350 --> 00:41:03,210 komputer dalam beberapa fail teks biasa, di mana seseorang boleh datang dan hanya 665 00:41:03,210 --> 00:41:04,660 membukanya dan membacanya. 666 00:41:04,660 --> 00:41:07,530 Sebaik-baiknya, mereka akan disulitkan dalam beberapa cara. 667 00:41:07,530 --> 00:41:13,340 Dan dalam Set Masalah 2, anda akan berurusan dengan satu kaedah penyulitan, 668 00:41:13,340 --> 00:41:16,520 atau, baik, dua kaedah, tetapi mereka tidak begitu besar. 669 00:41:16,520 --> 00:41:20,050 Jika anda edisi penggodam, anda juga akan berhadapan dengan 670 00:41:20,050 --> 00:41:22,150 decrypting beberapa perkara. 671 00:41:22,150 --> 00:41:29,770 >> Jadi isunya sekarang ialah, baik, walaupun kita mempunyai penyulitan kuat 672 00:41:29,770 --> 00:41:34,830 algoritma di dunia, jika anda memilih kata laluan terutamanya miskin, maka ia 673 00:41:34,830 --> 00:41:37,720 tidak akan membantu anda sangat banyak, kerana orang masih akan dapat mencari penyelesaiannya. 674 00:41:37,720 --> 00:41:41,530 Walaupun melihat tali disulitkan dan ia kelihatan seperti menggagalkan sampah 675 00:41:41,530 --> 00:41:44,760 yang bermaksud apa-apa kepada mereka, jika mereka masih hanya perlu mencuba beberapa kata laluan 676 00:41:44,760 --> 00:41:50,560 untuk mencari penyelesaiannya, maka anda tidak begitu selamat. 677 00:41:50,560 --> 00:41:55,890 Jadi menonton video yang menyatakan perkara itu. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO MAIN SEMULA] 680 00:42:00,970 --> 00:42:02,100 >> Who, anda yg sangat jahat. 681 00:42:02,100 --> 00:42:03,370 Apa yang berlaku? 682 00:42:03,370 --> 00:42:05,170 Apa yang anda lakukan untuk anak perempuan saya? 683 00:42:05,170 --> 00:42:09,910 >> -Izinkan saya untuk memperkenalkan cemerlang pakar bedah plastik muda, Dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, hidung yang paling besar lelaki pekerjaan di seluruh 685 00:42:13,730 --> 00:42:16,080 alam semesta, dan Beverly Hills. 686 00:42:16,080 --> 00:42:17,210 >> -Anda Mulia. 687 00:42:17,210 --> 00:42:18,070 >> -Hidung kerja? 688 00:42:18,070 --> 00:42:18,670 Saya tidak faham. 689 00:42:18,670 --> 00:42:20,090 Dia sudah mempunyai pekerjaan hidung. 690 00:42:20,090 --> 00:42:21,910 Ia adalah manis enam belas hadir. 691 00:42:21,910 --> 00:42:22,140 >> -No. 692 00:42:22,140 --> 00:42:23,690 Ini bukan apa yang anda fikirkan. 693 00:42:23,690 --> 00:42:25,420 Ia lebih, lebih buruk. 694 00:42:25,420 --> 00:42:30,300 Jika anda tidak memberi saya gabungan untuk perisai udara, Dr Schlotkin akan 695 00:42:30,300 --> 00:42:34,226 memberi anak perempuan anda kembali hidung lama beliau. 696 00:42:34,226 --> 00:42:35,476 >> -No. 697 00:42:35,476 --> 00:42:38,712 698 00:42:38,712 --> 00:42:40,516 Di mana anda mendapatkan itu? 699 00:42:40,516 --> 00:42:41,440 >> -Baiklah. 700 00:42:41,440 --> 00:42:42,180 Saya akan memberitahu. 701 00:42:42,180 --> 00:42:43,381 Saya akan memberitahu. 702 00:42:43,381 --> 00:42:44,263 Tidak, ayah. 703 00:42:44,263 --> 00:42:45,590 Tidak, anda tidak perlu. 704 00:42:45,590 --> 00:42:46,860 >> -Kau betul, sayang saya. 705 00:42:46,860 --> 00:42:48,450 Saya akan terlepas hidung baru anda. 706 00:42:48,450 --> 00:42:52,090 Tetapi saya tidak akan memberitahu dia gabungan itu, tidak kira apa. 707 00:42:52,090 --> 00:42:53,680 >> -Baiklah. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, lakukan yang paling teruk anda. 709 00:42:55,685 --> 00:42:56,914 >> -Saya keseronokan. 710 00:42:56,914 --> 00:43:00,690 >> [ALAT YANG diasah] 711 00:43:00,690 --> 00:43:01,910 >> -No. 712 00:43:01,910 --> 00:43:02,520 Tunggu. 713 00:43:02,520 --> 00:43:03,836 Tunggu. 714 00:43:03,836 --> 00:43:05,300 Saya akan memberitahu. 715 00:43:05,300 --> 00:43:06,880 Saya akan memberitahu. 716 00:43:06,880 --> 00:43:09,130 >> -Saya tahu ia akan bekerja. 717 00:43:09,130 --> 00:43:09,900 Baiklah. 718 00:43:09,900 --> 00:43:12,850 Berikan kepada saya. 719 00:43:12,850 --> 00:43:16,918 >> -Gabungan adalah satu. 720 00:43:16,918 --> 00:43:17,406 >> -One. 721 00:43:17,406 --> 00:43:18,382 >> -One. 722 00:43:18,382 --> 00:43:19,358 >> -Dua. 723 00:43:19,358 --> 00:43:19,846 >> -Dua. 724 00:43:19,846 --> 00:43:20,822 >> -Dua. 725 00:43:20,822 --> 00:43:21,310 >> -Tiga. 726 00:43:21,310 --> 00:43:21,798 >> -Tiga. 727 00:43:21,798 --> 00:43:22,774 >> -Tiga. 728 00:43:22,774 --> 00:43:23,262 >> -Empat. 729 00:43:23,262 --> 00:43:23,750 >> -Empat. 730 00:43:23,750 --> 00:43:26,150 >> -Empat. 731 00:43:26,150 --> 00:43:27,010 >> -Lima. 732 00:43:27,010 --> 00:43:27,670 >> -Lima. 733 00:43:27,670 --> 00:43:29,010 >> -Lima. 734 00:43:29,010 --> 00:43:34,770 >> -Jadi gabungan adalah satu, dua, tiga, empat, lima. 735 00:43:34,770 --> 00:43:37,460 Itu gabungan yang paling bodoh Yang pernah saya dengar dalam hidup saya. 736 00:43:37,460 --> 00:43:39,710 Itulah jenis perkara yang bodoh kali ini kepada bagasinya. 737 00:43:39,710 --> 00:43:42,000 >> -Terima kasih, Duli anda. 738 00:43:42,000 --> 00:43:43,530 >> -Apa yang anda lakukan? 739 00:43:43,530 --> 00:43:44,490 >> -I dimatikan dinding. 740 00:43:44,490 --> 00:43:45,420 >> -Tiada anda tidak. 741 00:43:45,420 --> 00:43:45,840 Anda dimatikan keseluruhan filem. 742 00:43:45,840 --> 00:43:46,930 >> -Saya mesti menekan butang yang salah. 743 00:43:46,930 --> 00:43:48,265 >> -Nah, meletakkannya kembali. 744 00:43:48,265 --> 00:43:49,110 Letakkan filem semula. 745 00:43:49,110 --> 00:43:49,510 >> -Ya, tuan. 746 00:43:49,510 --> 00:43:49,917 Ya, tuan. 747 00:43:49,917 --> 00:43:50,324 >> -Mari kita pergi, Arnold. 748 00:43:50,324 --> 00:43:51,140 Marilah, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Sudah tentu, anda tahu saya akan masih perlu menghantar bil kepada anda untuk ini. 750 00:43:53,060 --> 00:43:53,440 >> [END VIDEO MAIN SEMULA] 751 00:43:53,440 --> 00:43:54,690 >> ROB Boden: Baiklah. 752 00:43:54,690 --> 00:43:59,690 753 00:43:59,690 --> 00:44:08,430 Jadi sekarang kita sudah bercakap tentang keselamatan dalam beberapa cara, bagus 754 00:44:08,430 --> 00:44:16,050 poster filem sedikit, jadi baru-baru ini hari, isu-isu ini dengan NSA 755 00:44:16,050 --> 00:44:17,300 memantau segala-galanya. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Ia boleh menjadi sukar untuk merasa seperti anda mempunyai beberapa jenis privasi yang 758 00:44:26,930 --> 00:44:34,540 Dunia dalam talian, walaupun saya tidak dapat memberitahu anda kebanyakan butiran PRISM. 759 00:44:34,540 --> 00:44:42,130 Jadi bergerak di luar PRISM, kita tidak akan yang akan bercakap tentang itu, kini 760 00:44:42,130 --> 00:44:44,030 berfikir tentang komputer riba anda. 761 00:44:44,030 --> 00:44:48,360 Jadi di sini, saya ingin beralih ke akaun sebenar saya, 762 00:44:48,360 --> 00:44:50,370 dengan penguin kecil saya. 763 00:44:50,370 --> 00:44:57,310 Jadi saya mempunyai satu set kata laluan, dan yang kata laluan adalah apa yang saya mahu ia menjadi. 764 00:44:57,310 --> 00:45:02,430 >> Tetapi ingat bahawa apa yang saya pembalakan dengan, jadi login ini 765 00:45:02,430 --> 00:45:04,850 segera, adalah beberapa program. 766 00:45:04,850 --> 00:45:07,910 Ia adalah beberapa program yang ditulis oleh orang tertentu. 767 00:45:07,910 --> 00:45:13,250 Dan sebagainya, orang itu, jika mereka terutamanya yang berniat jahat, mereka boleh 768 00:45:13,250 --> 00:45:17,780 telah berkata, baiklah, jadi jika kata laluan yang yang saya masukkan adalah sama dengan saya 769 00:45:17,780 --> 00:45:22,800 kata laluan sebenar, atau ia sama untuk beberapa kata laluan khas - 770 00:45:22,800 --> 00:45:25,550 David adalah hebat atau sesuatu - 771 00:45:25,550 --> 00:45:27,190 biarkan mereka masuk 772 00:45:27,190 --> 00:45:33,760 Jadi seorang pengaturcara berniat jahat boleh mempunyai akses kepada semua Macs anda, atau 773 00:45:33,760 --> 00:45:36,150 Windows, atau apa-apa. 774 00:45:36,150 --> 00:45:41,980 >> Supaya tidak banyak kebimbangan, kerana, Maksud saya, ini adalah program login 775 00:45:41,980 --> 00:45:48,720 yang yang dihantar dengan OS X, beratus-ratus atau beribu-ribu orang mempunyai 776 00:45:48,720 --> 00:45:50,020 dikaji semula kod ini. 777 00:45:50,020 --> 00:45:55,330 Justeru, jika, dalam kod anda di tempat, anda mengatakan jika string ini sama setaraf 778 00:45:55,330 --> 00:45:58,860 David adalah hebat, login, maka seseorang dalam akan menjadi, seperti, tunggu. 779 00:45:58,860 --> 00:45:59,800 Ini tidak betul. 780 00:45:59,800 --> 00:46:01,790 Ini tidak berada di sini. 781 00:46:01,790 --> 00:46:06,650 Jadi, itu satu cara kita mendapatkan benda-benda menjadi jenis yang selamat. 782 00:46:06,650 --> 00:46:10,300 >> Tetapi berfikir tentang walaupun program yang anda menulis. 783 00:46:10,300 --> 00:46:13,000 Katakan anda menulis program log masuk. 784 00:46:13,000 --> 00:46:20,440 Jadi ini program login yang anda menulis, jadi jelas, anda baik yang 785 00:46:20,440 --> 00:46:21,210 programmer. 786 00:46:21,210 --> 00:46:25,610 Anda tidak akan meletakkan apa-apa yang berniat jahat jika x sama sama David adalah hebat 787 00:46:25,610 --> 00:46:27,860 ke dalam kod anda. 788 00:46:27,860 --> 00:46:31,930 Tetapi program ini, apa yang anda gunakan untuk menyusun program ini? 789 00:46:31,930 --> 00:46:34,180 Sesuatu seperti gemerincing. 790 00:46:34,180 --> 00:46:38,460 Jadi apa jika orang yang berlaku kepada menulis dentang khas bingkai dalam dentang 791 00:46:38,460 --> 00:46:44,310 sesuatu seperti, jika saya menyusun program login, kemudian masukkan kod ini 792 00:46:44,310 --> 00:46:49,720 ke dalam program login yang mengatakan, jika x sama sama David adalah hebat? 793 00:46:49,720 --> 00:46:59,890 Jadi tidak cukup lagi, tetapi kita mempunyai yang sama mengeluarkan sini, di mana bunyi berdering, baik, 794 00:46:59,890 --> 00:47:03,790 beribu-ribu, jika tidak beribu-ribu orang, telah melihat dentang, mempunyai 795 00:47:03,790 --> 00:47:07,160 melihat garis-garis yang kod dan berkata, semua betul, tiada apa-apa yang tidak baik di sini. 796 00:47:07,160 --> 00:47:10,680 Jelas sekali, tidak ada yang melakukan apa-apa ini berniat jahat. 797 00:47:10,680 --> 00:47:15,780 >> Tetapi apa yang dilafaz sendiri, seperti, bagaimana jika saya menyusun bunyi berdering? 798 00:47:15,780 --> 00:47:20,900 Bagaimana jika saya mempunyai beberapa pengkompil yang menyusun dentang yang memasukkan ke dalam dentang 799 00:47:20,900 --> 00:47:25,610 hack ini khusus yang menyatakan bahawa, semua betul, apabila saya menyusun bunyi berdering, maka 800 00:47:25,610 --> 00:47:31,290 laku saya mendapatkan harus melihat khas bahagian dalam program log masuk dan memasukkan 801 00:47:31,290 --> 00:47:34,230 kata laluan ini, sama setaraf Dave adalah hebat? 802 00:47:34,230 --> 00:47:37,990 Jadi ingat bahawa pengkompil anda sendiri perlu disusun pada satu ketika. 803 00:47:37,990 --> 00:47:42,810 Jadi, jika apa yang anda pilih untuk menyusun dentang dengan, itu sendiri adalah berniat jahat, maka anda 804 00:47:42,810 --> 00:47:45,580 boleh diskru keseluruhannya ke bawah baris. 805 00:47:45,580 --> 00:47:49,630 >> Jadi di sini, kita mempunyai Ken Thompson dan Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Jadi ini adalah satu gambar ikonik. 807 00:47:53,780 --> 00:47:55,470 Dennis Ritchie adalah di sebelah kanan. 808 00:47:55,470 --> 00:47:58,740 Beliau adalah utama yang - 809 00:47:58,740 --> 00:48:03,640 cukup banyak menulis C. Jadi, anda boleh mengucapkan terima kasih kepada kelas ini. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson adalah di sebelah kiri. 811 00:48:04,840 --> 00:48:07,780 Kedua-dua mereka pada dasarnya menulis UNIX. 812 00:48:07,780 --> 00:48:10,140 Baik, mereka merupakan penyumbang utama dalam UNIX. 813 00:48:10,140 --> 00:48:11,310 Terdapat beberapa orang lain. 814 00:48:11,310 --> 00:48:16,240 Jadi Ken Thompson, pada satu ketika, dia menang Anugerah Turing. 815 00:48:16,240 --> 00:48:20,860 Dan anugerah Turing, saya sentiasa mendengar ia dirujuk dengan cara ini, ia adalah 816 00:48:20,860 --> 00:48:23,100 Hadiah Nobel sains komputer. 817 00:48:23,100 --> 00:48:27,500 >> Jadi di Anugerah Turing, beliau perlu memberikan ucapan penerimaannya. 818 00:48:27,500 --> 00:48:31,790 Dan dia memberikan ucapan ini sangat terkenal sekarang, dipanggil Harvey pada mempercayai 819 00:48:31,790 --> 00:48:35,620 Amanah, yang kami telah dikaitkan pada laman web kursus. 820 00:48:35,620 --> 00:48:41,670 Dan dalam ucapan ini, beliau berkata, semua betul, jadi saya menulis UNIX, dan kini semua 821 00:48:41,670 --> 00:48:43,320 anda orang yang menggunakan UNIX. 822 00:48:43,320 --> 00:48:46,960 Sekarang, ingat hari ini bahawa Linux adalah keturunan langsung UNIX. 823 00:48:46,960 --> 00:48:50,140 OS X secara langsung menggunakan UNIX. 824 00:48:50,140 --> 00:48:53,810 Windows tidak begitu banyak, tetapi banyak idea diambil dari UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Jadi ia naik ke pentas dan berkata, semua betul, saya menulis UNIX. 826 00:48:59,220 --> 00:49:03,940 Dan hanya jadi anda semua tahu, saya dapat log masuk ke setiap 827 00:49:03,940 --> 00:49:05,590 satu pun dari komputer anda. 828 00:49:05,590 --> 00:49:14,280 Oleh kerana saya meletakkan salah satu ini khas jika x sama sama Ken Thomson adalah hebat, 829 00:49:14,280 --> 00:49:16,350 maka saya dibenarkan untuk log masuk. 830 00:49:16,350 --> 00:49:18,370 Jadi orang-orang seperti, baik, Bagaimana kamu berbuat demikian? 831 00:49:18,370 --> 00:49:21,090 Kita melihat program login dan apa-apa yang ada di sana. 832 00:49:21,090 --> 00:49:24,700 Dia seperti, baik, saya diubahsuai pengkompil untuk log masuk program login 833 00:49:24,700 --> 00:49:30,490 supaya program login kini mempunyai yang x sama sama Ken Thompson 834 00:49:30,490 --> 00:49:31,700 adalah hebat. 835 00:49:31,700 --> 00:49:33,120 >> Dan mereka berkata, baik, yang tidak benar. 836 00:49:33,120 --> 00:49:35,740 Kami sedang mencari pengkompil, dan pengkompil tidak mempunyai baris 837 00:49:35,740 --> 00:49:36,400 kod seperti itu. 838 00:49:36,400 --> 00:49:40,540 Dia seperti, OK, tetapi apakah anda menyusun pengkompil dengan? 839 00:49:40,540 --> 00:49:44,810 Dan mereka berfikir, dan dia, seperti, baik, Saya salah seorang yang memberikan anda pengkompil 840 00:49:44,810 --> 00:49:50,580 anda menggunakan untuk menyusun pengkompil, jadi anda menyusun pengkompil, yang 841 00:49:50,580 --> 00:49:56,390 itu sendiri adalah berniat jahat, dan akan memecahkan program log masuk. 842 00:49:56,390 --> 00:49:59,360 Jadi, pada asasnya, pada ketika itu, ada ada cara anda boleh melihat sumber 843 00:49:59,360 --> 00:50:02,450 kod program login untuk melihat apa yang salah. 844 00:50:02,450 --> 00:50:04,220 Anda tidak dapat melihat di kod sumber pengkompil 845 00:50:04,220 --> 00:50:06,790 untuk melihat apa yang salah. 846 00:50:06,790 --> 00:50:11,940 >> Anda perlu memandang mesin kod, perduaan sebenar 847 00:50:11,940 --> 00:50:16,760 pengkompil disusun untuk melihat, menunggu, ini baris kod tidak berada di sini. 848 00:50:16,760 --> 00:50:22,130 Tetapi Ken Thompson mengambil ia satu langkah lagi dan berkata, baik, terdapat 849 00:50:22,130 --> 00:50:25,980 program-program khas yang benar-benar membantu anda membaca binari program, 850 00:50:25,980 --> 00:50:29,340 dan sebagainya jika seseorang menggunakan program itu untuk membaca perduaan, mereka akan melihat ini 851 00:50:29,340 --> 00:50:30,490 baris kod. 852 00:50:30,490 --> 00:50:34,020 Beliau diubahsuai program-program untuk dikatakan, semua betul, jika anda sedang mencari di 853 00:50:34,020 --> 00:50:38,460 pengkompil, tidak menunjukkan khusus ini set binari. 854 00:50:38,460 --> 00:50:42,830 >> Demikian maka anda perlu mengambil langkah yang lagi dan pada dasarnya, yang boleh memberi 855 00:50:42,830 --> 00:50:46,210 pelbagai peringkat diambil tdk langsung, dan pada satu ketika, tidak ada sebenarnya 856 00:50:46,210 --> 00:50:47,990 akan memeriksa. 857 00:50:47,990 --> 00:50:52,590 Jadi moral cerita ini adalah, anda tidak akan menulis 858 00:50:52,590 --> 00:50:54,340 Dentang di dalam kelas ini. 859 00:50:54,340 --> 00:50:57,020 Anda akan menggunakan mendaki Dentang banyak dalam kelas ini. 860 00:50:57,020 --> 00:51:00,490 Untuk semua yang anda tahu, bunyi berdering adalah berniat jahat program yang mensabotaj setiap 861 00:51:00,490 --> 00:51:03,520 program tunggal anda pernah disusun. 862 00:51:03,520 --> 00:51:08,206 Dan untuk meninggalkan anda pada yang sangat menyenangkan maklum, jumpa pada hari Rabu. 863 00:51:08,206 --> 00:51:10,030 >> [Tepuk tangan] 864 00:51:10,030 --> 00:51:12,935 >> SPEAKER 2: Pada CS50 seterusnya. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Jangan anda berani mengatakan bahawa. 866 00:51:14,580 --> 00:51:15,930 Anda boleh melakukan ini. 867 00:51:15,930 --> 00:51:19,440 Anda telah melakukan sebelum ini, anda boleh melakukan ini hari ini, anda boleh melakukan ini esok. 868 00:51:19,440 --> 00:51:20,930 Anda telah melakukan ini selama bertahun-tahun. 869 00:51:20,930 --> 00:51:22,790 Hanya pergi ke sana dan melakukan ini. 870 00:51:22,790 --> 00:51:24,310 Anda boleh melakukan ini. 871 00:51:24,310 --> 00:51:26,102 >> [MUZIK Bermain]