1 00:00:00,000 --> 00:00:00,487 2 00:00:00,487 --> 00:00:11,210 >> [MUSIC PLAYING] 3 00:00:11,210 --> 00:00:12,100 >> ROB BODEN: Baiklah. 4 00:00:12,100 --> 00:00:15,620 Jadi, hal pertama yang pertama, video dari wajah akrab. 5 00:00:15,620 --> 00:00:22,080 6 00:00:22,080 --> 00:00:22,560 >> [VIDEO PLAYBACK] 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 ketiga. 9 00:00:27,150 --> 00:00:29,980 Maaf aku tidak bisa 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 PEMUTARAN] 12 00:00:33,872 --> 00:00:39,340 >> [Tepuk Tangan DAN CHEERS] 13 00:00:39,340 --> 00:00:41,277 >> ROB BODEN: The filmografi di video yang fantastis. 14 00:00:41,277 --> 00:00:47,280 15 00:00:47,280 --> 00:00:47,770 Baik. 16 00:00:47,770 --> 00:00:50,960 Jadi pertama, ada makan siang yang lain. 17 00:00:50,960 --> 00:00:52,330 Ini besok pukul 01:15. 18 00:00:52,330 --> 00:00:54,480 Tidak ada makan siang Jumat ini. 19 00:00:54,480 --> 00:00:55,810 Hal ini dengan Quora. 20 00:00:55,810 --> 00:01:00,190 Dan Tommy belum datang, tapi salah satu orang-orang ada mantan kepala CF, 21 00:01:00,190 --> 00:01:01,530 Tommy McWilliam. 22 00:01:01,530 --> 00:01:02,730 Jadi dia orang yang menyenangkan. 23 00:01:02,730 --> 00:01:04,819 Anda harus datang. 24 00:01:04,819 --> 00:01:05,900 >> Baik. 25 00:01:05,900 --> 00:01:11,360 Jadi minggu lalu, kami mulai berantakan tentang apa string sebenarnya. 26 00:01:11,360 --> 00:01:14,830 Kami sudah tahu sejak awal bahwa itu adalah urutan karakter. 27 00:01:14,830 --> 00:01:18,130 Tapi minggu lalu, kami menyelidiki fakta bahwa apa yang sebenarnya urutan 28 00:01:18,130 --> 00:01:22,110 karakter, baik, kita sekarang memiliki array karakter. 29 00:01:22,110 --> 00:01:26,450 Dan kita tahu bahwa string, itu sebuah array karakter, di akhir, 30 00:01:26,450 --> 00:01:30,920 kita memiliki null byte khusus, ini backslash 0, yang menunjukkan akhir 31 00:01:30,920 --> 00:01:32,230 string. 32 00:01:32,230 --> 00:01:36,970 >> Jadi string adalah array dari karakter, tapi kita bisa memiliki lebih dari 33 00:01:36,970 --> 00:01:39,530 hanya sebuah array karakter, kita dapat memiliki sebuah array dari setiap 34 00:01:39,530 --> 00:01:40,890 jenis hal yang kita inginkan. 35 00:01:40,890 --> 00:01:51,570 Jadi, jika Anda ingat dari minggu lalu, Program Abad bahwa David diperkenalkan 36 00:01:51,570 --> 00:01:53,560 benar-benar cepat. 37 00:01:53,560 --> 00:01:57,010 Sehingga hal pertama kita akan lakukan adalah meminta pengguna untuk integer, 38 00:01:57,010 --> 00:01:58,800 jumlah orang di dalam ruangan. 39 00:01:58,800 --> 00:02:01,260 Setelah kita memiliki integer yang, kita mendeklarasikan array. 40 00:02:01,260 --> 00:02:02,890 Perhatikan sintaks braket ini. 41 00:02:02,890 --> 00:02:04,540 Anda akan terbiasa dengan itu. 42 00:02:04,540 --> 00:02:09,430 >> Jadi kita mendeklarasikan sebuah array bilangan bulat disebut usia, dan ada n 43 00:02:09,430 --> 00:02:12,080 integer dalam array ini. 44 00:02:12,080 --> 00:02:16,480 Jadi pola ini di sini, ini 4 int i sama dengan 0, i kurang dari n, i ditambah 45 00:02:16,480 --> 00:02:20,580 ditambah, yang juga akan menjadi pola bahwa Anda mendapatkan sangat digunakan untuk. 46 00:02:20,580 --> 00:02:24,000 Karena itu cukup banyak bagaimana Anda selalu akan iterate atas array. 47 00:02:24,000 --> 00:02:26,330 Jadi ingat bahwa n adalah panjang array kita. 48 00:02:26,330 --> 00:02:32,120 Dan di sini, kita berulang kali meminta untuk usia orang i di dalam ruangan. 49 00:02:32,120 --> 00:02:36,640 >> Setelah ini, kita turun, dan untuk apa pun Alasan sewenang-wenang, kita kemudian 50 00:02:36,640 --> 00:02:40,220 mencetak berapa lama mereka akan menjadi satu tahun dari sekarang. 51 00:02:40,220 --> 00:02:49,980 Dan menjalankan program itu, mari kita membuat usia, dot slash usia. 52 00:02:49,980 --> 00:02:53,010 Jadi jumlah orang di dalam ruangan, katakanlah ada tiga. 53 00:02:53,010 --> 00:02:59,880 Dan mengatakan, orang pertama adalah 13, berikutnya adalah 26, dan yang terakhir adalah 30. 54 00:02:59,880 --> 00:03:05,080 Jadi itu akan iterate atas tiga orang, mencetak 14, 27, dan 31. 55 00:03:05,080 --> 00:03:16,060 >> Jadi ingat bahwa ketika kita mendeklarasikan array berukuran n, indeks dalam 56 00:03:16,060 --> 00:03:19,950 array, array memiliki nilai-nilai dan indeks 0, 1, 2, sepanjang jalan 57 00:03:19,950 --> 00:03:21,680 sampai dengan n dikurangi 1. 58 00:03:21,680 --> 00:03:26,255 Jadi ketika kita mengatakan ada tiga orang di dalam ruangan, dan kita masukkan ke dalam sini 59 00:03:26,255 --> 00:03:29,850 iterasi pertama melalui ini lingkaran, saya 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 menugaskan pertama usia pengguna memasukkan. 62 00:03:34,540 --> 00:03:38,870 Kemudian pada yang berikutnya, kita memasuki kedua n pengguna memasukkan, dan di 63 00:03:38,870 --> 00:03:40,580 di samping dua, n terakhir. 64 00:03:40,580 --> 00:03:44,200 >> Jadi melihat bahwa berbagai ukuran tiga tidak memiliki apa-apa 65 00:03:44,200 --> 00:03:46,040 dalam indeks tiga. 66 00:03:46,040 --> 00:03:49,036 Hal ini tidak berlaku. 67 00:03:49,036 --> 00:03:50,250 Baik. 68 00:03:50,250 --> 00:03:55,136 Jadi, akan kembali ke sini. 69 00:03:55,136 --> 00:03:57,650 70 00:03:57,650 --> 00:04:01,590 Jadi sekarang kita sudah berurusan dengan array, kami memiliki beberapa keakraban. 71 00:04:01,590 --> 00:04:03,780 Sekarang kita akan beralih ke perintah argumen baris, yang akan menjadi 72 00:04:03,780 --> 00:04:05,890 cukup relevan dengan masalah set ini. 73 00:04:05,890 --> 00:04:09,670 >> Jadi sampai sekarang, setiap kali Anda sudah menyatakan fungsi utama Anda, kami telah 74 00:04:09,670 --> 00:04:11,230 kata int void main. 75 00:04:11,230 --> 00:04:14,070 Jadi batal hanya berarti bahwa kita tidak melewati setiap 76 00:04:14,070 --> 00:04:16,440 argumen untuk fungsi ini. 77 00:04:16,440 --> 00:04:19,190 Sekarang kita akan melihat utama yang dapat mengambil beberapa argumen. 78 00:04:19,190 --> 00:04:22,470 Di sini kita menyebutnya int argc dan benang kurung argv. 79 00:04:22,470 --> 00:04:26,930 Tanda kurung, sekali lagi, menunjukkan bahwa kita sedang berhadapan dengan array. 80 00:04:26,930 --> 00:04:31,850 Jadi di sini, kurung String argv, kami berurusan dengan sebuah array dari string. 81 00:04:31,850 --> 00:04:35,360 Jadi argc, itu akan menunjukkan berapa banyak argumen kita sudah 82 00:04:35,360 --> 00:04:37,580 dilewatkan ke program ini. 83 00:04:37,580 --> 00:04:46,050 Dan untuk melihat apa artinya, mari kita tutup ini. 84 00:04:46,050 --> 00:04:46,490 >> OK. 85 00:04:46,490 --> 00:04:50,790 Jadi sampai sekarang, kami telah menjalankan setiap program seperti usia slash dot. 86 00:04:50,790 --> 00:04:55,250 Kami juga bisa, pada baris perintah, melewati melewati argumen, sehingga istilah, perintah 87 00:04:55,250 --> 00:04:56,550 argumen baris. 88 00:04:56,550 --> 00:04:59,760 Jadi argumen pertama, hello world. 89 00:04:59,760 --> 00:05:03,350 Jadi di sini, argc akan menjadi tiga. 90 00:05:03,350 --> 00:05:07,720 Ini hitungan argumen pada baris perintah. 91 00:05:07,720 --> 00:05:12,840 Argc selalu setidaknya 1, karena dot slash usia, itu sendiri, dianggap sebagai salah satu 92 00:05:12,840 --> 00:05:14,490 argumen baris perintah. 93 00:05:14,490 --> 00:05:17,010 >> Kemudian halo adalah yang pertama. 94 00:05:17,010 --> 00:05:20,460 Jika usia slash dot adalah zeroth, maka halo adalah yang pertama, dan dunia adalah 95 00:05:20,460 --> 00:05:22,830 kedua argumen baris perintah. 96 00:05:22,830 --> 00:05:29,490 Jadi string argv, kita akan melihat, berisi string, dot slash 97 00:05:29,490 --> 00:05:33,830 usia, halo, dan dunia. 98 00:05:33,830 --> 00:05:38,945 Dan, dengan permintaan Daud, kita akan untuk memutar video memperkenalkan itu. 99 00:05:38,945 --> 00:05:42,486 100 00:05:42,486 --> 00:05:43,890 >> [VIDEO PLAYBACK] 101 00:05:43,890 --> 00:05:46,240 >> -Sampai sekarang dalam program kita sudah ditulis, kami telah mendeklarasikan 102 00:05:46,240 --> 00:05:48,500 utama seperti int void main. 103 00:05:48,500 --> 00:05:51,170 Dan selama ini, kekosongan itu memiliki hanya telah menetapkan bahwa 104 00:05:51,170 --> 00:05:54,430 Program tidak mengambil argumen baris perintah. 105 00:05:54,430 --> 00:05:57,750 Dengan kata lain, ketika pengguna menjalankan sebuah Program, ia dapat memberikan perintah 106 00:05:57,750 --> 00:06:01,710 baris argumen dengan menulis tambahan kata atau frase setelah program 107 00:06:01,710 --> 00:06:03,000 nama pada prompt. 108 00:06:03,000 --> 00:06:06,550 >> Nah, jika Anda ingin program Anda untuk mengambil argumen baris perintah, satu atau 109 00:06:06,550 --> 00:06:10,540 kata yang lebih seperti itu, kita perlu mengganti membatalkan dengan beberapa argumen. 110 00:06:10,540 --> 00:06:12,200 Jadi mari kita lakukan itu. 111 00:06:12,200 --> 00:06:15,750 Sertakan CS50.h. 112 00:06:15,750 --> 00:06:19,360 Sertakan io.h. standar 113 00:06:19,360 --> 00:06:20,760 Int utama. 114 00:06:20,760 --> 00:06:26,330 Dan sekarang, bukannya batal, aku akan menentukan int disebut argc, dan 115 00:06:26,330 --> 00:06:28,780 array dari string disebut argv. 116 00:06:28,780 --> 00:06:31,820 Sekarang, argc dan argv adalah hanya konvensi. 117 00:06:31,820 --> 00:06:34,000 >> Kita bisa disebut argumen ini apa yang paling kita inginkan. 118 00:06:34,000 --> 00:06:37,630 Tapi yang penting adalah bahwa argc adalah int karena, menurut definisi, adalah 119 00:06:37,630 --> 00:06:41,360 akan berisi jumlah argumen, yang jumlah kata dalam jumlah yang 120 00:06:41,360 --> 00:06:43,380 pengguna telah diketik pada nya prompt. 121 00:06:43,380 --> 00:06:47,910 argv, sementara itu, vektor argumen, adalah akan benar-benar menjadi sebuah array menyimpan 122 00:06:47,910 --> 00:06:52,020 semua kata-kata bahwa pengguna memiliki diketik pada nya prompt. 123 00:06:52,020 --> 00:06:54,500 >> Mari kita lanjutkan untuk melakukan sesuatu sekarang dengan satu atau lebih dari ini 124 00:06:54,500 --> 00:06:55,660 argumen baris perintah. 125 00:06:55,660 --> 00:07:00,070 Secara khusus, mari kita pergi ke depan dan mencetak kata apa pun jenis pengguna 126 00:07:00,070 --> 00:07:03,960 setelah nama program pada prompt. 127 00:07:03,960 --> 00:07:04,730 Buka braket. 128 00:07:04,730 --> 00:07:06,240 Tutup braket. 129 00:07:06,240 --> 00:07:10,510 Printf persen s backslash dan koma. 130 00:07:10,510 --> 00:07:14,550 Dan sekarang saya harus memberitahu printf nilai apa untuk plug ke placeholder itu. 131 00:07:14,550 --> 00:07:18,600 Saya ingin kata pertama yang pengguna memiliki diketik setelah nama program, 132 00:07:18,600 --> 00:07:23,130 dan jadi saya akan menentukan argv bracket 1, dekat 133 00:07:23,130 --> 00:07:24,830 kurung, titik koma. 134 00:07:24,830 --> 00:07:27,290 >> Sekarang, mengapa braket 1 dan tidak braket 0? 135 00:07:27,290 --> 00:07:30,990 Nah, ternyata, secara otomatis disimpan dalam argv 0 akan menjadi 136 00:07:30,990 --> 00:07:32,620 nama sebenarnya program. 137 00:07:32,620 --> 00:07:36,180 Jadi kata pertama yang jenis pengguna setelah nama program ini adalah, dengan 138 00:07:36,180 --> 00:07:38,990 konvensi, akan disimpan dalam argv 1. 139 00:07:38,990 --> 00:07:42,380 Sekarang mari kita mengkompilasi dan menjalankan program ini. 140 00:07:42,380 --> 00:07:47,780 >> Membuat argv 0, dot slash argv 0. 141 00:07:47,780 --> 00:07:50,520 Dan sekarang kata seperti halo. 142 00:07:50,520 --> 00:07:51,670 Enter. 143 00:07:51,670 --> 00:07:53,520 Dan ada yang kita miliki, halo. 144 00:07:53,520 --> 00:07:55,750 >> [END VIDEO PEMUTARAN] 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 Tutup itu. 148 00:08:01,230 --> 00:08:16,730 Jadi mengambil melihat program yang yang kami hanya diperkenalkan kepada kami, baik, hanya 149 00:08:16,730 --> 00:08:24,710 untuk menunjukkan, jika kita mencetak argv 0, membuat, sekarang apa itu, argv 0, dot slash argv 0. 150 00:08:24,710 --> 00:08:30,440 Jadi, seperti yang diharapkan, itu mencetak keluar nama program, karena argv 0 adalah 151 00:08:30,440 --> 00:08:32,970 selalu akan menjadi nama program. 152 00:08:32,970 --> 00:08:35,640 Tapi mari kita melakukan sesuatu yang sedikit lebih menarik. 153 00:08:35,640 --> 00:08:42,080 >> Jadi di set masalah, Anda akan diperkenalkan ke 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 mengkonversi String ke integer. 156 00:08:48,550 --> 00:08:53,280 Jadi jika saya lulus string, satu dua tiga, untuk atoi, yang akan mengkonversi 157 00:08:53,280 --> 00:08:56,910 ke integer, satu dua tiga. 158 00:08:56,910 --> 00:09:01,480 Jadi kita akan mengkonversi pertama baris argumen perintah untuk integer, 159 00:09:01,480 --> 00:09:05,690 dan kemudian hanya mencetak integer yang. 160 00:09:05,690 --> 00:09:09,680 >> Jadi pada dasarnya, kami jenis reimplementing getInt, hanya 161 00:09:09,680 --> 00:09:12,350 integer masuk pada perintah baris bukan di program 162 00:09:12,350 --> 00:09:14,560 interaktif. 163 00:09:14,560 --> 00:09:23,170 Jadi, membuat argv 0, mari kita lakukan di sini, dan menutup itu. 164 00:09:23,170 --> 00:09:27,670 Jadi berjalan argv 0, dan mari kita masukkan integer, satu dua tiga empat satu dua. 165 00:09:27,670 --> 00:09:30,840 Jadi itu akan mencetak integer, satu dua tiga empat satu dua. 166 00:09:30,840 --> 00:09:35,500 Ada beberapa kehalusan untuk atoi bahwa itu akan berhenti peduli tentang apa pun 167 00:09:35,500 --> 00:09:39,040 di luar karakter numerik yang valid, tapi itu tidak masalah. 168 00:09:39,040 --> 00:09:42,870 >> Jadi apa yang Anda pikirkan terjadi jika saya melakukan ini? 169 00:09:42,870 --> 00:09:45,520 170 00:09:45,520 --> 00:09:47,050 Kesalahan segmentasi. 171 00:09:47,050 --> 00:09:50,410 Jadi kenapa begitu? 172 00:09:50,410 --> 00:09:56,060 Jika Anda melihat kembali pada program kami, kami mengkonversi argv 1, argumen pertama 173 00:09:56,060 --> 00:09:59,610 setelah nama program, ke integer. 174 00:09:59,610 --> 00:10:03,350 Tetapi tidak ada argumen yang dilewatkan setelah nama program. 175 00:10:03,350 --> 00:10:08,060 Jadi di sini, kita melihat bahwa ini adalah kereta program, karena, jika kita mencoba untuk menjalankannya 176 00:10:08,060 --> 00:10:10,530 tanpa argumen, itu hanya akan crash. 177 00:10:10,530 --> 00:10:16,950 >> Jadi lain pola umum Anda akan melihat adalah sesuatu seperti, jika argc kurang 178 00:10:16,950 --> 00:10:21,100 dari dua, menunjukkan bahwa tidak ada setidaknya nama program dan 179 00:10:21,100 --> 00:10:29,100 Argumen pertama, maka kita akan melakukan sesuatu seperti printf, tidak cukup 180 00:10:29,100 --> 00:10:31,190 argumen baris perintah. 181 00:10:31,190 --> 00:10:33,170 Itu mungkin tidak bagus untuk mencetak, itu mungkin sesuatu, seperti 182 00:10:33,170 --> 00:10:35,440 Anda harus memasukkan sebuah integer pada baris perintah. 183 00:10:35,440 --> 00:10:37,450 Aku 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 bahwa pada akhir kami Program, jika kita kembali 0, semacam 186 00:10:44,740 --> 00:10:47,060 menunjukkan keberhasilan. 187 00:10:47,060 --> 00:10:50,940 Dan utama juga secara otomatis mengembalikan 0 jika Anda tidak. 188 00:10:50,940 --> 00:10:55,800 >> Jadi di sini, kita retuning 1 untuk menunjukkan bahwa itu tidak sukses. 189 00:10:55,800 --> 00:11:01,000 Dan Anda dapat kembali apapun yang Anda inginkan, hanya, 0 menunjukkan keberhasilan, dan 190 00:11:01,000 --> 00:11:03,390 apa pun mengindikasikan kegagalan. 191 00:11:03,390 --> 00:11:04,855 Jadi mari kita menjalankan versi ini hal. 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 perintah argumen, benar akan memberitahu 194 00:11:16,600 --> 00:11:18,290 kami, tidak cukup baris perintah. 195 00:11:18,290 --> 00:11:20,610 Tidak menyelesaikan kalimatnya. 196 00:11:20,610 --> 00:11:24,950 Yang lain, jika kita benar-benar lulus satu, dapat menyelesaikan program. 197 00:11:24,950 --> 00:11:27,920 Jadi ini adalah bagaimana Anda akan menggunakan argc di untuk memvalidasi jumlah 198 00:11:27,920 --> 00:11:30,630 argumen baris perintah yang benar-benar 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 iterasi hal. 201 00:11:42,180 --> 00:11:46,310 Jadi sekarang, kita tidak hanya mencetak pertama argumen baris perintah. 202 00:11:46,310 --> 00:11:51,210 Di sini, kita iterasi dari int i equals 0, i kurang dari argc, i ditambah 203 00:11:51,210 --> 00:11:55,280 ditambah, dan pencetakan argv, indeks i. 204 00:11:55,280 --> 00:11:59,300 Jadi pola ini, sekali lagi, ini adalah sama Pola seperti sebelumnya, kecuali bukan 205 00:11:59,300 --> 00:12:02,600 memanggil variabel n, kita menggunakan argc. 206 00:12:02,600 --> 00:12:09,520 >> Jadi ini iterasi setiap indeks dalam array, dan mencetak masing-masing 207 00:12:09,520 --> 00:12:11,910 elemen dalam array itu. 208 00:12:11,910 --> 00:12:20,300 Jadi, ketika kita menjalankan program ini, baik, Saya tidak memasukkan baris perintah 209 00:12:20,300 --> 00:12:22,540 argumen, sehingga hanya sidik jari nama program. 210 00:12:22,540 --> 00:12:26,053 Jika saya memasukkan berbagai hal, itu 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 ini satu langkah lebih jauh. 214 00:12:34,770 --> 00:12:38,890 Dan bukannya mencetak setiap argumen pada baris sendiri, mari kita mencetak masing-masing 215 00:12:38,890 --> 00:12:42,590 karakter setiap argumen pada baris sendiri. 216 00:12:42,590 --> 00:12:46,700 Jadi ingat bahwa argv adalah array dari string. 217 00:12:46,700 --> 00:12:50,960 Jadi apa adalah string, tapi array karakter? 218 00:12:50,960 --> 00:12:57,140 Jadi itu berarti bahwa argv adalah benar-benar array array karakter. 219 00:12:57,140 --> 00:13:04,920 Jadi mengambil keuntungan dari itu, mari kita mengabaikan hal ini untuk saat ini. 220 00:13:04,920 --> 00:13:08,190 Mari kita mempertimbangkan string argv 0. 221 00:13:08,190 --> 00:13:14,170 >> Jadi jika kita ingin membawa setiap karakter argv 0 pada baris sendiri, maka saya ingin 222 00:13:14,170 --> 00:13:19,500 untuk melakukan pola kita terbiasa, i adalah kurang dari panjang array, 223 00:13:19,500 --> 00:13:23,990 yang di sini, adalah strlen dari, itu bukan apa yang ingin saya 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 kurang dari panjang kami array, yang dalam hal ini adalah array 226 00:13:30,390 --> 00:13:34,410 karakter, i plus plus. 227 00:13:34,410 --> 00:13:41,040 Dan, seperti yang kita lihat minggu lalu, itu ideal jika kita bergerak bahwa strlen luar 228 00:13:41,040 --> 00:13:45,210 kondisi, karena n akan menambahkan strlen dari s setiap kali kita pergi 229 00:13:45,210 --> 00:13:47,720 melalui loop, dan itu tidak akan berubah. 230 00:13:47,720 --> 00:13:50,230 Jadi kita akan mengaturnya 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, kita iterasi setiap indeks dalam array. 234 00:14:01,320 --> 00:14:05,630 Jadi, jika kita ingin mencetak masing-masing karakter dalam array, persen c adalah 235 00:14:05,630 --> 00:14:06,880 bendera kita ingin menggunakan untuk karakter. 236 00:14:06,880 --> 00:14:10,750 237 00:14:10,750 --> 00:14:19,770 Dan sekarang saya braket akan menjadi String, indeks karakter i, jadi jika 238 00:14:19,770 --> 00:14:20,970 String adalah halo. 239 00:14:20,970 --> 00:14:27,530 maka s 0 akan menjadi h, s braket 1 akan menjadi e, dan sebagainya. 240 00:14:27,530 --> 00:14:30,800 >> Jadi sekarang kita ingin menggabungkan dua hal. 241 00:14:30,800 --> 00:14:35,440 Kami ingin mencetak setiap karakter dari setiap argumen baris perintah. 242 00:14:35,440 --> 00:14:38,950 Jadi kita akan memiliki bersarang untuk loop. 243 00:14:38,950 --> 00:14:47,480 Dan konvensional, counter pertama adalah saya, berikutnya akan menjadi j, n 244 00:14:47,480 --> 00:14:54,450 akan menjadi strlen dari argv i, i kurang dari n, i plus plus. 245 00:14:54,450 --> 00:14:59,150 246 00:14:59,150 --> 00:15:06,870 Dan sekarang bukan cetak argv i, sehingga argv braket i akan index - 247 00:15:06,870 --> 00:15:14,280 yang akan menjadi baris perintah ke-i argumen, argv i, j akan 248 00:15:14,280 --> 00:15:16,925 menjadi karakter j dari -i argumen. 249 00:15:16,925 --> 00:15:20,580 250 00:15:20,580 --> 00:15:24,810 Aku akan menyingkirkan ini di sini sekarang karena kita memasukkannya ke dalam lingkaran itu. 251 00:15:24,810 --> 00:15:33,900 Jadi setara dengan equals string s argv i, dan kemudian s braket j. 252 00:15:33,900 --> 00:15:36,980 >> Yah, kita tidak perlu mendeklarasikan s variabel ini. 253 00:15:36,980 --> 00:15:44,530 Sebaliknya, kita hanya akan menggabungkan dua menjadi apa yang kita miliki, argv i, j. 254 00:15:44,530 --> 00:15:45,780 >> SPEAKER 1: [Tak terdengar]. 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 rusak. 258 00:15:52,936 --> 00:15:55,510 Jika saya benar-benar berlari itu, kita akan telah menyadari hal ini. 259 00:15:55,510 --> 00:16:01,210 Jadi meja saya peduli dalam hal ini khususnya untuk 260 00:16:01,210 --> 00:16:05,410 loop j, iterator. 261 00:16:05,410 --> 00:16:08,560 Jadi, Anda akan mengalami masalah, mungkin infinite loop, jika kita 262 00:16:08,560 --> 00:16:09,540 tidak tetap itu. 263 00:16:09,540 --> 00:16:12,220 Itu sebabnya kita juga berbicara tentang 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 benar-benar menambahkan printf terpisah di sini yang hanya akan mencetak 267 00:16:21,200 --> 00:16:27,480 baris lain, karena ini berarti ketika kita menjalankan program, akan ada kosong 268 00:16:27,480 --> 00:16:31,830 garis di antara setiap karakter setiap argumen baris perintah. 269 00:16:31,830 --> 00:16:33,448 Nah, kita akan melihat apa artinya. 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 Kesalahan implisit menyatakan fungsi perpustakaan strlen. 274 00:16:42,860 --> 00:16:51,630 >> Jadi akan kembali ke program kami, saya lupa 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 file header yang menyatakan 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, itu mengkompilasi. 280 00:17:06,060 --> 00:17:09,109 Sekarang, mari kita jalankan. 281 00:17:09,109 --> 00:17:10,930 Jadi hanya itu. 282 00:17:10,930 --> 00:17:17,790 Ini akan mencetak kami nama program, hello world. 283 00:17:17,790 --> 00:17:23,510 Ini akan mencetak setiap hal, masing-masing karakter, pada baris 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 lebih jauh. 286 00:17:30,625 --> 00:17:34,050 287 00:17:34,050 --> 00:17:39,700 Dan alih-alih menggunakan string.h, mari kita berpikir tentang bagaimana kita akan menerapkan 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 tanda tangan fungsi. 290 00:17:45,600 --> 00:17:52,900 Jadi mari kita sebut di my_strlen, dan itu akan mengambil string sebagai argumen, 291 00:17:52,900 --> 00:17:57,220 dan kami berharap untuk kembali panjang string itu. 292 00:17:57,220 --> 00:18:03,430 Jadi, di mana orang 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 dari slide sebelumnya bahwa juga dari minggu lalu, bahwa 296 00:18:12,900 --> 00:18:18,890 array karakter, baik, string, jadi mari kita mengatakan ini adalah kami string s. 297 00:18:18,890 --> 00:18:29,870 Jadi, jika s adalah string, halo, kemudian, H-E-L-L-O, dalam memori, yang akan 298 00:18:29,870 --> 00:18:35,610 menjadi, dan kemudian backslash ini 0 karakter. 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, trik mencari ini serangan balik 0 karakter, null ini 301 00:18:43,190 --> 00:18:44,380 terminator. 302 00:18:44,380 --> 00:18:50,270 Jadi algoritma Apakah akan menjadi sesuatu seperti beberapa 303 00:18:50,270 --> 00:18:51,510 cukup karakter yang - 304 00:18:51,510 --> 00:18:56,180 mari kita tangan ini mewakili beberapa counter, mari kita sebut panjang int ini. 305 00:18:56,180 --> 00:19:00,060 Jadi, mulai dari di sini, kami akan iterate atas string kita. 306 00:19:00,060 --> 00:19:04,100 >> Jadi karakter pertama, itu H, dan itu tidak kembali memangkas 0, sehingga 307 00:19:04,100 --> 00:19:05,170 panjangnya 1. 308 00:19:05,170 --> 00:19:08,050 Iterate ke karakter berikutnya, E, dan itu tidak backslash 0. 309 00:19:08,050 --> 00:19:09,630 Panjangnya 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 backslash 0, dan agar sarana, baik, 314 00:19:16,690 --> 00:19:17,780 string 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 benar-benar menerapkan bahwa, pertama, panjang n saya sama dengan 0, tangan kananku. 317 00:19:33,630 --> 00:19:36,088 Dan kita akan iterate - 318 00:19:36,088 --> 00:19:38,000 >> SPEAKER 1: [Tak terdengar] 319 00:19:38,000 --> 00:19:38,640 >> ROB BODEN: Oh, menembak. 320 00:19:38,640 --> 00:19:39,870 Baik panggilan. 321 00:19:39,870 --> 00:19:42,680 Boom. 322 00:19:42,680 --> 00:19:44,140 Jadi panjang n sama dengan 0. 323 00:19:44,140 --> 00:19:46,910 324 00:19:46,910 --> 00:19:58,310 Jadi sekarang, panjang sementara s tidak sama dan kemudian, backslash 0. 325 00:19:58,310 --> 00:20:04,660 Jadi ingat, backslash ini 0, itu adalah karakter yang sebenarnya, dan itu menunjukkan 326 00:20:04,660 --> 00:20:05,820 akhir string. 327 00:20:05,820 --> 00:20:09,850 Sama seperti, juga, backslash n adalah karakter yang sebenarnya. 328 00:20:09,850 --> 00:20:14,040 Backslash 0 akan menunjukkan akhir string kami. 329 00:20:14,040 --> 00:20:15,414 Saya tidak ingin menempatkan bahwa ada. 330 00:20:15,414 --> 00:20:19,190 331 00:20:19,190 --> 00:20:25,620 Dan sementara s diindeks oleh panjangnya tidak sama dengan terminator null, maka 332 00:20:25,620 --> 00:20:27,130 kita hanya akan untuk kenaikan panjang. 333 00:20:27,130 --> 00:20:29,860 334 00:20:29,860 --> 00:20:34,880 Jadi, pada akhir program kami, panjang akhirnya akan 335 00:20:34,880 --> 00:20:37,610 menjadi 5 dalam hal ini. 336 00:20:37,610 --> 00:20:39,210 Dan kami hanya 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 di sini, saya tidak lakukan my_strlen. 340 00:20:48,290 --> 00:20:50,700 Mari kita compile untuk memastikan semuanya berjalan lancar. 341 00:20:50,700 --> 00:20:55,820 342 00:20:55,820 --> 00:20:58,210 Yang saya lakukan di 2? 343 00:20:58,210 --> 00:21:00,565 Atau adalah bahwa 1? 344 00:21:00,565 --> 00:21:01,940 Yang harus Anda lakukan. 345 00:21:01,940 --> 00:21:02,690 Baik. 346 00:21:02,690 --> 00:21:08,490 Jadi ini adalah argv 2. 347 00:21:08,490 --> 00:21:11,585 Bekerja seperti yang diharapkan, meskipun adalah bahwa salah satu yang saya lakukan di? 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 hal tidak memiliki baris baru printf setelah, tetapi 352 00:21:21,820 --> 00:21:22,910 tidak ada bedanya. 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 bahkan dapat menggabungkan satu langkah lanjut, di mana pemberitahuan di sini, baik, 356 00:21:34,750 --> 00:21:38,920 pertama, kita meraih strlen dari argv i, dan kemudian kita iterasi 357 00:21:38,920 --> 00:21:41,450 setiap karakter dalam string tersebut. 358 00:21:41,450 --> 00:21:47,480 Jadi, bukannya melakukan itu, bagaimana jika kita hanya menggabungkan logika ini menunggu 359 00:21:47,480 --> 00:21:50,740 sampai kita memukul backslash 0 benar ke ini untuk loop? 360 00:21:50,740 --> 00:21:53,740 361 00:21:53,740 --> 00:22:07,490 Jadi iterate sementara argv i, j tidak tidak sama backslash 0. 362 00:22:07,490 --> 00:22:10,680 Jadi mari kita jalankan dulu. 363 00:22:10,680 --> 00:22:19,838 364 00:22:19,838 --> 00:22:21,180 >> Baik. 365 00:22:21,180 --> 00:22:27,655 Jadi di sini, kondisi ini mengatakan - 366 00:22:27,655 --> 00:22:38,090 367 00:22:38,090 --> 00:22:40,060 mari kita jelas itu. 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 Jadi ketika saya hanya berlari program yang sebelumnya, argv adalah array dari string. 370 00:22:55,290 --> 00:23:03,100 Jadi, jika saya menjalankannya dengan dot slash argv 2, hello world, maka argv tersebut 371 00:23:03,100 --> 00:23:07,650 sendiri adalah panjang 3, untuk argv nol, halo, dan dunia. 372 00:23:07,650 --> 00:23:11,700 373 00:23:11,700 --> 00:23:19,660 >> Dan dalam setiap indeks tersebut adalah, sendiri sebuah array, di mana hal ini akan 374 00:23:19,660 --> 00:23:23,780 dot, ini akan menjadi slash, saya tidak tahu apakah itu ke arah yang benar, saya 375 00:23:23,780 --> 00:23:25,680 tidak berpikir itu. 376 00:23:25,680 --> 00:23:30,110 A-R-V dash, membutuhkan lebih banyak ruang. 377 00:23:30,110 --> 00:23:32,570 Mari kita potong array ini. 378 00:23:32,570 --> 00:23:38,230 A-R-V dasbor 0, dan kemudian backslash 0. 379 00:23:38,230 --> 00:23:43,160 Dan kemudian berantakan akan halo. 380 00:23:43,160 --> 00:23:45,910 Katakanlah, H-E backslash 0. 381 00:23:45,910 --> 00:23:51,130 Dan akhirnya, W-O backslash 0. 382 00:23:51,130 --> 00:23:59,730 >> Jadi algoritma yang baru saja kita menulis, yang bersarang untuk loop, apa yang mereka 383 00:23:59,730 --> 00:24:07,321 melakukan adalah, pertama-tama kita memiliki melawan i dan j kemudian. 384 00:24:07,321 --> 00:24:15,206 Ini akan lebih mudah dengan kode pada layar, Mari kita kembali ke ini. 385 00:24:15,206 --> 00:24:17,476 OK. 386 00:24:17,476 --> 00:24:24,600 Jadi melihat bahwa saya adalah iterator yang iterasi setiap perintah 387 00:24:24,600 --> 00:24:25,610 argumen baris. 388 00:24:25,610 --> 00:24:28,870 Dan j adalah iterasi iterator atas masing-masing karakter dalam 389 00:24:28,870 --> 00:24:30,410 argumen baris perintah. 390 00:24:30,410 --> 00:24:46,755 Jadi apa printf terdalam ini adalah 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, tapi sekarang, argv 0 7 akan 392 00:24:58,680 --> 00:25:00,670 sama backslash 0. 393 00:25:00,670 --> 00:25:05,730 >> Jadi kita keluar bahwa untuk loop, dan sekarang saya iterates 1. 394 00:25:05,730 --> 00:25:10,910 Dan sekarang kita akan print argv 1 0, argv 1 1 - 395 00:25:10,910 --> 00:25:17,040 baik, sekarang, karena saya memotong pendek halo, argv 1 2 sekali lagi akan menjadi 396 00:25:17,040 --> 00:25:18,170 backslash 0. 397 00:25:18,170 --> 00:25:25,050 Jadi, kenaikan i dan terus, dan seterusnya, sampai kita mencetak semua 398 00:25:25,050 --> 00:25:28,580 dunia, dan mereka adalah tiga baris perintah argumen, dan kita akan keluar dari 399 00:25:28,580 --> 00:25:31,670 loop terluar, dan menyelesaikan 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 ke sini. 404 00:25:46,795 --> 00:25:49,670 405 00:25:49,670 --> 00:25:52,370 Jadi, Anda akan mendapatkan beberapa keakraban dengan argumen baris perintah ini 406 00:25:52,370 --> 00:25:54,460 masalah khusus yang ditetapkan. 407 00:25:54,460 --> 00:25:56,630 >> Sekarang, debugging. 408 00:25:56,630 --> 00:26:01,680 Jadi Anda mungkin sudah harus melakukan beberapa debugging dengan Anda sebelumnya 409 00:26:01,680 --> 00:26:03,120 masalah ditetapkan. 410 00:26:03,120 --> 00:26:08,420 Dan salah satu cara yang sangat mudah debugging, pertama, mari kita lihat program buggy. 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, ambil bilangan bulat itu, dan kemudian, sewenang-wenang, kita memiliki loop sementara yang 414 00:26:29,350 --> 00:26:32,280 hanya akan pengurangan i sampai itu sama dengan 10. 415 00:26:32,280 --> 00:26:35,820 Mari kita berasumsi aku memasuki integer lebih besar dari 10. 416 00:26:35,820 --> 00:26:38,700 Jadi pengurangan i sampai itu sama dengan 10. 417 00:26:38,700 --> 00:26:42,630 >> Dan kemudian kita memiliki lingkaran sementara yang lain bahwa, sementara saya tidak sama dengan 0, kita 418 00:26:42,630 --> 00:26:44,540 akan pengurangan i oleh 3. 419 00:26:44,540 --> 00:26:49,790 Jadi jika Anda melihat maksud dari bug di sini, itu adalah bahwa ini akan pengurangan i untuk 420 00:26:49,790 --> 00:26:57,010 menjadi 10, dan kemudian ini while loop akan pengurangan i dari 10, 7, 4, 1, 421 00:26:57,010 --> 00:27:02,880 negatif 2, negatif 5, dan seterusnya, hingga tak terbatas negatif, karena saya akan 422 00:27:02,880 --> 00:27:05,920 pernah benar-benar sama dengan 0. 423 00:27:05,920 --> 00:27:08,610 Dan kemudian pada akhir program ini, kita memiliki fungsi foo yang 424 00:27:08,610 --> 00:27:12,130 terjadi print out yang saya. 425 00:27:12,130 --> 00:27:16,520 >> Jadi ini adalah program pendek dan sepele, dan bug yang jelas, 426 00:27:16,520 --> 00:27:18,790 terutama setelah saya hanya mengatakan apa bug itu. 427 00:27:18,790 --> 00:27:24,840 Tapi maksud di sini adalah, baik, ini mungkin benar-benar terlihat seperti beberapa Anda 428 00:27:24,840 --> 00:27:30,040 solusi dari serakah dari terakhir masalah set, dan mungkin Anda harus 429 00:27:30,040 --> 00:27:32,800 beberapa infinite loop dalam program Anda, dan Anda tidak tahu 430 00:27:32,800 --> 00:27:34,100 apa penyebabnya. 431 00:27:34,100 --> 00:27:38,690 Jadi teknik debugging yang sangat berguna adalah dengan hanya menambahkan printfs 432 00:27:38,690 --> 00:27:40,180 seluruh kode Anda. 433 00:27:40,180 --> 00:27:49,200 >> Jadi di sini saya ingin printf luar pertama loop sementara. 434 00:27:49,200 --> 00:27:53,155 Dan di sini saya ingin printf a, dan aku hanya akan mencetak i. 435 00:27:53,155 --> 00:27:55,670 436 00:27:55,670 --> 00:27:58,330 Aku bahkan akan lakukan pertama while, i. 437 00:27:58,330 --> 00:28:05,130 438 00:28:05,130 --> 00:28:09,040 Di luar, kedua while loop. 439 00:28:09,040 --> 00:28:12,170 Sekali lagi, 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 jalankan ini. 442 00:28:17,520 --> 00:28:22,620 443 00:28:22,620 --> 00:28:24,800 >> Jadi dot men-debug slash. 444 00:28:24,800 --> 00:28:25,610 Masukkan integer. 445 00:28:25,610 --> 00:28:28,150 Mari kita lakukan 13. 446 00:28:28,150 --> 00:28:28,760 Dan boom. 447 00:28:28,760 --> 00:28:33,300 Kita melihat bahwa kita adalah perulangan tak terbatas bagian dalam while loop kedua. 448 00:28:33,300 --> 00:28:36,305 Jadi sekarang kita tahu apa bug tersebut. 449 00:28:36,305 --> 00:28:39,610 450 00:28:39,610 --> 00:28:45,610 Tapi printf debugging sempurna besar, tetapi sekali Anda mendapatkan program 451 00:28:45,610 --> 00:28:50,560 lebih lama dan lebih rumit, ada solusi yang lebih canggih untuk 452 00:28:50,560 --> 00:28:51,705 mendapatkan sesuatu yang bekerja. 453 00:28:51,705 --> 00:28:52,955 Jadi mari kita menghapus semua printfs ini. 454 00:28:52,955 --> 00:29:06,242 455 00:29:06,242 --> 00:29:08,896 Dan mari kita pastikan saya tidak memutuskan apa-apa. 456 00:29:08,896 --> 00:29:09,850 OK. 457 00:29:09,850 --> 00:29:14,180 >> Jadi program kita akan untuk memperkenalkan disebut 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 menghapus debug untuk kedua, dan membuat men-debug lagi. 461 00:29:27,510 --> 00:29:31,420 462 00:29:31,420 --> 00:29:34,440 Nah, sebenarnya pertama kali, pelajaran yang baik dalam argumen baris perintah. 463 00:29:34,440 --> 00:29:37,780 Perhatikan bahwa perintah dentang ini yaitu kompilasi semuanya sedang berlalu 464 00:29:37,780 --> 00:29:41,300 pada baris perintah, ini argumen baris perintah. 465 00:29:41,300 --> 00:29:46,250 Jadi persis bagaimana Anda akan menggunakan argumen baris perintah, seperti yang kita 466 00:29:46,250 --> 00:29:51,500 lakukan sebelumnya, dan karena anda akan di PSET 2, itulah bagaimana dentang menggunakan mereka. 467 00:29:51,500 --> 00:30:00,070 >> Jadi melihat bahwa ini pertama bendera, dasbor ggdb3, apa yang katakan adalah, dentang, 468 00:30:00,070 --> 00:30:03,790 Anda harus mengkompilasi file ini dengan maksud bahwa kita akhirnya akan 469 00:30:03,790 --> 00:30:05,380 perlu debug itu. 470 00:30:05,380 --> 00:30:13,840 Jadi selama Anda memiliki bendera itu, maka kita dapat GDB debug. 471 00:30:13,840 --> 00:30:17,380 Dan itu akan membuka GNU Debugger. 472 00:30:17,380 --> 00:30:22,920 >> Jadi ada banyak perintah bahwa Anda perlu untuk membiasakan diri. 473 00:30:22,920 --> 00:30:27,100 Yang pertama yang mungkin Anda akan segera butuhkan adalah Run. 474 00:30:27,100 --> 00:30:28,200 Jadi apa yang Jalankan lakukan? 475 00:30:28,200 --> 00:30:30,910 Ini akan memulai program kami. 476 00:30:30,910 --> 00:30:36,180 Jadi menjalankan program awal, program ini meminta kita untuk integer, 13. 477 00:30:36,180 --> 00:30:39,170 Dan maka itu perulangan tak terbatas sebagai diharapkan, kecuali saya dihapus 478 00:30:39,170 --> 00:30:40,500 printfs, jadi kami bahkan tidak melihat itu. 479 00:30:40,500 --> 00:30:43,320 480 00:30:43,320 --> 00:30:44,600 Keluar secara normal. 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 Ada kemungkinan bahwa itu dibungkus semua jalan di sekitar, kembali ke - mengabaikan itu. 484 00:30:53,640 --> 00:30:55,170 Menganggap itu tidak keluar secara normal. 485 00:30:55,170 --> 00:30:59,500 486 00:30:59,500 --> 00:31:03,370 Ada jawaban yang rumit untuk itu. 487 00:31:03,370 --> 00:31:07,890 >> Jadi sekarang, itu tidak terlalu berguna. 488 00:31:07,890 --> 00:31:11,480 Jadi hanya menjalankan program kami dalam debugger ini tidak membantu kami dalam 489 00:31:11,480 --> 00:31:15,610 cara, karena kita bisa saja melakukan dot slash debug dari luar GDB. 490 00:31:15,610 --> 00:31:21,250 Jadi satu perintah yang Anda mungkin akan - 491 00:31:21,250 --> 00:31:22,970 dan aku akan berhenti ini. 492 00:31:22,970 --> 00:31:25,850 Control-d atau berhenti, keduanya bekerja. 493 00:31:25,850 --> 00:31:29,550 Jadi mari kita membukanya lagi. 494 00:31:29,550 --> 00:31:31,130 >> Perintah lain yang mungkin Anda akan segera ingin 495 00:31:31,130 --> 00:31:33,600 biasakan adalah Break. 496 00:31:33,600 --> 00:31:37,120 Jadi kita akan istirahat pada utama untuk saat ini, dan kemudian saya akan menjelaskan itu. 497 00:31:37,120 --> 00:31:41,010 498 00:31:41,010 --> 00:31:46,370 Nah, di sini kita melihat kita mengatur breakpoint di baris ini di debug.c. 499 00:31:46,370 --> 00:31:50,160 Jadi apa istirahat berarti adalah bahwa ketika saya mengetikkan run, program ini akan 500 00:31:50,160 --> 00:31:53,560 terus berjalan sampai Aku memukul breakpoint. 501 00:31:53,560 --> 00:31:59,390 Jadi ketika saya menekan run, program dijalankan, dan kemudian istirahat secepat itu 502 00:31:59,390 --> 00:32:01,940 memasuki fungsi utama. 503 00:32:01,940 --> 00:32:06,930 Istirahat utama akan menjadi sesuatu Anda cukup sering dilakukan. 504 00:32:06,930 --> 00:32:11,340 >> Dan sekarang, untuk memperkenalkan Anda untuk beberapa perintah lagi. 505 00:32:11,340 --> 00:32:14,330 Perhatikan di sini, bahwa itu mengatakan kita pecah pada baris 11, yang 506 00:32:14,330 --> 00:32:16,230 printf, masukkan integer. 507 00:32:16,230 --> 00:32:21,260 Jadi perintah berikutnya akan menjadi bagaimana kita pergi ke baris berikutnya kode. 508 00:32:21,260 --> 00:32:24,810 Ini akan memungkinkan kita untuk melangkah melalui kami program baris demi baris. 509 00:32:24,810 --> 00:32:26,260 Jadi berikutnya. 510 00:32:26,260 --> 00:32:29,820 >> Sekarang baris 12, kita akan untuk mendapatkan integer. 511 00:32:29,820 --> 00:32:30,450 Berikutnya. 512 00:32:30,450 --> 00:32:34,290 Dan jika Anda hanya tekan Enter lagi, itu akan mengulang hal terakhir yang Anda lakukan. 513 00:32:34,290 --> 00:32:36,480 Jadi saya tidak perlu mengetik selanjutnya 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, jalur 14, sementara saya lebih besar dari 10, dan aku akan lakukan selanjutnya. 516 00:32:46,940 --> 00:32:48,685 Dan kita melihat kita akan pengurangan i. 517 00:32:48,685 --> 00:32:50,210 Jadi kita akan pengurangan i lagi. 518 00:32:50,210 --> 00:32:53,620 >> Jadi sekarang, lain yang berguna perintah Print. 519 00:32:53,620 --> 00:32:55,750 Jadi Print akan mencetak nilai variabel. 520 00:32:55,750 --> 00:32:57,825 Mari kita membawa nilai variabel i. 521 00:32:57,825 --> 00:32:58,705 Mari kita mencetak i. 522 00:32:58,705 --> 00:33:00,910 Ini akan mengatakan saya adalah 11. 523 00:33:00,910 --> 00:33:03,330 Sekarang kita Next lagi sementara i lebih besar dari 10. 524 00:33:03,330 --> 00:33:05,590 Jadi saya masih lebih besar dari 10, karena itu 11. 525 00:33:05,590 --> 00:33:06,920 i dikurangi dikurangi. 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 diharapkan, itu 10. 528 00:33:10,950 --> 00:33:12,510 >> Jadi sekarang, berikutnya. 529 00:33:12,510 --> 00:33:16,250 Ini akan kembali ke kondisi, i adalah lebih besar dari 10, tetapi saya sekarang 10, sehingga 530 00:33:16,250 --> 00:33:20,040 itu tidak lebih besar dari 10, jadi kami berharap itu jatuh dari while loop. 531 00:33:20,040 --> 00:33:22,220 Dan sekarang kita di bawah baris kode. 532 00:33:22,220 --> 00:33:28,750 Dan perintah lain, Daftar, hanya akan untuk menampilkan sebelumnya dan berikutnya 533 00:33:28,750 --> 00:33:31,240 beberapa baris kode, dalam Jika Anda kehilangan diri sendiri. 534 00:33:31,240 --> 00:33:35,420 Jadi kita hanya keluar while loop ini, dan sekarang kita telah memasuki ini 535 00:33:35,420 --> 00:33:37,080 while, baris 18. 536 00:33:37,080 --> 00:33:39,860 Jadi sementara saya tidak sama dengan 0. 537 00:33:39,860 --> 00:33:46,570 Dan, selanjutnya, saya sama i minus 3, dan kita akan perhatikan, ini hanya akan terus berjalan. 538 00:33:46,570 --> 00:33:48,270 Dan kita dapat mencetak i. 539 00:33:48,270 --> 00:33:49,990 >> Setiap perintah semacam memiliki cara pintas. 540 00:33:49,990 --> 00:33:51,720 Jadi p adalah singkatan Print. 541 00:33:51,720 --> 00:33:53,400 Jadi kita bisa p i. 542 00:33:53,400 --> 00:33:57,550 Hanya tetap memegang n, atau tetap melakukan Next. 543 00:33:57,550 --> 00:33:58,340 Cetak i lagi. 544 00:33:58,340 --> 00:34:00,380 Anda lihat sekarang itu negatif 167. 545 00:34:00,380 --> 00:34:06,030 Jadi ini akan berlangsung selamanya, tetapi tidak benar-benar selamanya, karena Anda hanya melihat, itu 546 00:34:06,030 --> 00:34:09,330 sebenarnya akan berakhir di beberapa titik. 547 00:34:09,330 --> 00:34:15,699 >> Jadi yang Mulai GDB. 548 00:34:15,699 --> 00:34:19,504 Tapi mari kita lakukan satu hal lagi di 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 kasus ini, infinite loop kebetulan berada dalam 552 00:34:28,534 --> 00:34:30,050 fungsi utama. 553 00:34:30,050 --> 00:34:35,779 Dan untuk saat ini, hanya menerima bahwa bahwa aku akan memindahkan infinite loop ke 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 bahwa, pada akhir ini Program, baik, ini awalnya 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 Tapi sekarang kita memanggil foo, yang akan pengurangan i sampai itu 0, dan 559 00:34:51,880 --> 00:34:54,548 kemudian mencetak variabel tersebut. 560 00:34:54,548 --> 00:34:55,469 OK. 561 00:34:55,469 --> 00:34:57,970 Simpan itu. 562 00:34:57,970 --> 00:35:00,175 Membuat debug. 563 00:35:00,175 --> 00:35:03,310 Dan sekarang, gdb debug. 564 00:35:03,310 --> 00:35:04,090 OK. 565 00:35:04,090 --> 00:35:10,580 >> Jadi jika saya hanya Run maka aku tidak akan dapat benar-benar langkah melalui saya 566 00:35:10,580 --> 00:35:11,730 program baris demi baris. 567 00:35:11,730 --> 00:35:19,820 Jadi mari kita istirahat di utama, dan kemudian ketik run. 568 00:35:19,820 --> 00:35:28,160 Jadi pergi 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 terus decrementing sampai saya lebih besar dari 10. 571 00:35:37,490 --> 00:35:42,840 Kemudian kita akan jatuh melalui while, dan sampai ke baris - 572 00:35:42,840 --> 00:35:44,364 mari kita membukanya dalam jendela terpisah. 573 00:35:44,364 --> 00:35:48,720 574 00:35:48,720 --> 00:35:53,300 Jadi kita dikurangi sampai saya tidak lagi lebih besar dari 10, dan kemudian kita 575 00:35:53,300 --> 00:35:55,700 disebut fungsi, foo. 576 00:35:55,700 --> 00:36:01,340 >> Jadi apa yang terjadi segera setelah saya memukul fungsi foo, baik, aku menelepon foo, dan 577 00:36:01,340 --> 00:36:04,030 maka saya tidak lagi memiliki kontrol atas GDB. 578 00:36:04,030 --> 00:36:10,230 Jadi, segera setelah aku memukul Berikutnya di baris ini, hal ini berlanjut sampai terjadi, 579 00:36:10,230 --> 00:36:12,400 di mana program keluar saat - 580 00:36:12,400 --> 00:36:14,450 menganggap itu tidak ada akhirnya. 581 00:36:14,450 --> 00:36:16,390 Anda melihatnya berhenti untuk sedikit sekalipun. 582 00:36:16,390 --> 00:36:22,040 Jadi kenapa saya kehilangan kontrol atas program pada saat itu? 583 00:36:22,040 --> 00:36:27,540 Nah, ketika saya ketik selanjutnya, yang masuk ke literal baris berikutnya kode yang 584 00:36:27,540 --> 00:36:28,850 akan mengeksekusi. 585 00:36:28,850 --> 00:36:35,950 Jadi setelah baris 21, baris berikutnya kode yang akan mengeksekusi adalah baris 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 ingin hanya pergi ke baris berikutnya kode. 588 00:36:43,810 --> 00:36:48,170 Saya ingin pergi ke fungsi, foo, dan kemudian juga langkah melalui 589 00:36:48,170 --> 00:36:49,830 orang-orang baris kode. 590 00:36:49,830 --> 00:36:53,726 >> Jadi untuk itu, kami memiliki alternatif. 591 00:36:53,726 --> 00:36:56,770 Mari kita berhenti lagi. 592 00:36:56,770 --> 00:36:58,020 Istirahat utama. 593 00:36:58,020 --> 00:37:00,520 594 00:37:00,520 --> 00:37:06,370 Uh, 1, next, next, 13, berikutnya, next, next, hati-hati, 595 00:37:06,370 --> 00:37:09,820 sebelum kita memukul garis foo. 596 00:37:09,820 --> 00:37:10,520 OK. 597 00:37:10,520 --> 00:37:13,700 >> Jadi sekarang, kita berada di garis 21, di mana kita sebut foo. 598 00:37:13,700 --> 00:37:17,100 Kami tidak ingin mengetik berikutnya, karena itu hanya akan memanggil fungsi foo, dan 599 00:37:17,100 --> 00:37:18,710 pergi ke baris berikutnya kode. 600 00:37:18,710 --> 00:37:20,840 Apa yang ingin kita gunakan adalah Step. 601 00:37:20,840 --> 00:37:25,690 Jadi ada perbedaan antara Langkah dan Berikutnya, di mana Langkah langkah ke 602 00:37:25,690 --> 00:37:28,190 berfungsi, dan Next pergi alih fungsi. 603 00:37:28,190 --> 00:37:32,830 Itu hanya mengeksekusi keseluruhan fungsi dan terus terjadi. 604 00:37:32,830 --> 00:37:37,210 >> Jadi Langkah ini akan membawa kita ke dalam fungsi, foo. 605 00:37:37,210 --> 00:37:41,160 Dan kita lihat di sini, sekarang, kita kembali pada while ini itu, dalam teori, 606 00:37:41,160 --> 00:37:44,190 akan terus selamanya. 607 00:37:44,190 --> 00:37:50,420 Dan jika anda menekan Step, jika tidak bahkan fungsi untuk memanggil, maka itu 608 00:37:50,420 --> 00:37:51,720 identik dengan Next. 609 00:37:51,720 --> 00:37:55,320 Jadi itu hanya ketika Anda berada di garis yang memanggil fungsi yang Langkah 610 00:37:55,320 --> 00:37:56,970 akan berbeda dari Next. 611 00:37:56,970 --> 00:37:57,930 Jadi Step akan membawa kami di sini. 612 00:37:57,930 --> 00:38:02,100 Langkah, langkah, langkah, langkah, langkah, langkah, dan kita hanya akan terbatas loop forever. 613 00:38:02,100 --> 00:38:06,810 >> Jadi Anda mungkin terbiasa dengan bahwa Anda cara mengidentifikasi loop tak terbatas, adalah 614 00:38:06,810 --> 00:38:08,960 hanya memegang ini Enter untuk melihat di mana Anda terjebak. 615 00:38:08,960 --> 00:38:11,610 616 00:38:11,610 --> 00:38:14,780 Ada cara yang lebih baik untuk melakukan itu, tapi untuk saat ini, yang cukup sempurna. 617 00:38:14,780 --> 00:38:17,967 Dan Gaya, agar sesuai dengan Gaya 50, aku harus 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 salah satu perintah terakhir untuk memperkenalkan. 621 00:38:28,400 --> 00:38:30,810 Nah, mari kita men-debug gdb masuk 622 00:38:30,810 --> 00:38:35,580 Jadi, bukannya melanggar di utama, jika saya mengetahui fungsi foo juga 623 00:38:35,580 --> 00:38:39,230 masalah, maka saya bisa saja berkata, istirahat di foo, sebagai gantinya. 624 00:38:39,230 --> 00:38:42,310 Katakanlah saya istirahat di baik utama dan foo. 625 00:38:42,310 --> 00:38:45,390 Jadi Anda dapat mengatur sebanyak breakpoints seperti yang Anda inginkan. 626 00:38:45,390 --> 00:38:49,230 Ketika saya mengetikkan run, itu akan untuk berhenti di - 627 00:38:49,230 --> 00:38:52,180 ooh, mari kita mengkompilasi ulang, karena Saya mengubah hal-hal. 628 00:38:52,180 --> 00:38:55,950 Anda akan melihat baris ini, Peringatan, sumber File lebih baru daripada dieksekusi. 629 00:38:55,950 --> 00:38:59,680 Jadi itu berarti bahwa saya hanya pergi di sini dan mengubah ini agar sesuai dengan Gaya 630 00:38:59,680 --> 00:39:03,100 50, tapi aku tidak mengkompilasi ulang program. 631 00:39:03,100 --> 00:39:04,870 Jadi GDB membuat saya menyadari itu. 632 00:39:04,870 --> 00:39:10,130 Aku akan berhenti, membuat men-debug lagi, memukul gdb debug. 633 00:39:10,130 --> 00:39:10,700 OK. 634 00:39:10,700 --> 00:39:12,800 >> Jadi sekarang, kembali ke apa yang saya lakukan. 635 00:39:12,800 --> 00:39:15,720 Istirahat utama, istirahat foo. 636 00:39:15,720 --> 00:39:20,680 Sekarang jika saya menjalankan program, sehingga akan berlanjut sampai hits 637 00:39:20,680 --> 00:39:21,320 breakpoint. 638 00:39:21,320 --> 00:39:24,680 Breakpoint yang terjadi pada menjadi yang pertama di utama. 639 00:39:24,680 --> 00:39:28,630 Sekarang, bukannya melakukan next, next, next, next, next, sampai aku memukul foo, saya 640 00:39:28,630 --> 00:39:35,230 dapat mengetik terus, yang akan terus sampai Anda menekan breakpoint berikutnya. 641 00:39:35,230 --> 00:39:37,200 Saya harus memasukkan bilangan bulat pertama. 642 00:39:37,200 --> 00:39:40,570 Lanjutkan akan berlanjut sampai aku memukul breakpoint berikutnya, yaitu bahwa 643 00:39:40,570 --> 00:39:43,320 fungsi foo. 644 00:39:43,320 --> 00:39:50,130 >> Jadi Run akan berjalan sampai Anda mencapai breakpoint, tapi Anda hanya mengetikkan run saat 645 00:39:50,130 --> 00:39:54,060 Anda mulai program, dan kemudian, sejak saat itu, itu terus. 646 00:39:54,060 --> 00:40:01,950 Jika saya hanya melakukan istirahat utama dan kemudian berlari, itu akan istirahat di 647 00:40:01,950 --> 00:40:03,670 utama, dan kemudian melanjutkan. 648 00:40:03,670 --> 00:40:10,050 Karena saya tidak memiliki titik istirahat di foo, masukkan integer, maka sekarang aku 649 00:40:10,050 --> 00:40:11,380 tidak akan istirahat di foo. 650 00:40:11,380 --> 00:40:16,318 Ini hanya akan tak terbatas loop sampai 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 itulah Intro ke GDB. 654 00:40:24,420 --> 00:40:27,790 Anda harus mulai menggunakannya di set masalah Anda. 655 00:40:27,790 --> 00:40:30,550 Hal ini dapat sangat membantu untuk mengidentifikasi bug. 656 00:40:30,550 --> 00:40:35,280 Jika Anda benar-benar adil, baris demi baris, pergi melalui kode Anda, dan membandingkan apa yang 657 00:40:35,280 --> 00:40:39,740 sebenarnya terjadi dengan apa yang Anda harapkan terjadi, maka cukup 658 00:40:39,740 --> 00:40:41,060 sulit untuk melewatkan bug 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 lalu David dibesarkan ini hal kriptografi secret-key untuk 663 00:40:54,040 --> 00:40:59,350 pertama kalinya, di mana kita tidak ingin password hanya disimpan pada kami 664 00:40:59,350 --> 00:41:03,210 komputer dalam beberapa file teks biasa, di mana seseorang bisa datang dan hanya 665 00:41:03,210 --> 00:41:04,660 membukanya dan membacanya. 666 00:41:04,660 --> 00:41:07,530 Idealnya, mereka akan dienkripsi dalam beberapa cara. 667 00:41:07,530 --> 00:41:13,340 Dan pada Soal Set 2, Anda akan berurusan dengan satu metode enkripsi, 668 00:41:13,340 --> 00:41:16,520 atau, baik, dua metode, tetapi mereka tidak begitu besar. 669 00:41:16,520 --> 00:41:20,050 Jika Anda melakukan edisi hacker, Anda juga akan berurusan dengan 670 00:41:20,050 --> 00:41:22,150 mendekripsi beberapa hal. 671 00:41:22,150 --> 00:41:29,770 >> Jadi masalah sekarang adalah, baik, bahkan jika kita memiliki enkripsi terkuat 672 00:41:29,770 --> 00:41:34,830 algoritma di dunia, jika Anda memilih Sandi sangat miskin, maka 673 00:41:34,830 --> 00:41:37,720 tidak akan membantu Anda sangat banyak, karena orang-orang akan tetap dapat mengetahuinya. 674 00:41:37,720 --> 00:41:41,530 Bahkan jika melihat string terenkripsi dan sepertinya berantakan sampah 675 00:41:41,530 --> 00:41:44,760 itu tidak ada artinya bagi mereka, jika mereka masih hanya perlu mencoba beberapa password 676 00:41:44,760 --> 00:41:50,560 untuk mengetahuinya, maka Anda tidak sangat aman. 677 00:41:50,560 --> 00:41:55,890 Jadi menonton video yang membuat titik itu. 678 00:41:55,890 --> 00:41:59,587 679 00:41:59,587 --> 00:42:00,970 >> [VIDEO PLAYBACK] 680 00:42:00,970 --> 00:42:02,100 >> -Helm, Anda iblis. 681 00:42:02,100 --> 00:42:03,370 Apa yang terjadi? 682 00:42:03,370 --> 00:42:05,170 Apa yang Anda lakukan untuk anak saya? 683 00:42:05,170 --> 00:42:09,910 >> -Ijinkan saya untuk memperkenalkan brilian ahli bedah plastik muda, Dr Phillip 684 00:42:09,910 --> 00:42:13,730 Schlotkin, hidung terbesar man kerja di seluruh yang 685 00:42:13,730 --> 00:42:16,080 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-job? 688 00:42:18,070 --> 00:42:18,670 Saya tidak mengerti. 689 00:42:18,670 --> 00:42:20,090 Dia sudah memiliki pekerjaan hidung. 690 00:42:20,090 --> 00:42:21,910 Itu adalah sweet sixteen 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 pikirkan. 693 00:42:23,690 --> 00:42:25,420 Ini jauh, jauh lebih buruk. 694 00:42:25,420 --> 00:42:30,300 Jika Anda tidak memberi saya kombinasi untuk perisai udara, Dr Schlotkin akan 695 00:42:30,300 --> 00:42:34,226 memberikan hidung tuanya putri Anda kembali. 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 Dimana kau dapatkan itu? 699 00:42:40,516 --> 00:42:41,440 >> Baiklah. 700 00:42:41,440 --> 00:42:42,180 Aku akan memberitahu. 701 00:42:42,180 --> 00:42:43,381 Aku 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 harus. 704 00:42:45,590 --> 00:42:46,860 >> -Kau benar, sayangku. 705 00:42:46,860 --> 00:42:48,450 Aku akan merindukan hidung baru Anda. 706 00:42:48,450 --> 00:42:52,090 Tapi aku tidak akan mengatakan kepadanya kombinasi, tidak peduli apa. 707 00:42:52,090 --> 00:42:53,680 >> -Sangat baik. 708 00:42:53,680 --> 00:42:55,685 Dr Schlotkin, lakukan terburuk Anda. 709 00:42:55,685 --> 00:42:56,914 >> -My kesenangan. 710 00:42:56,914 --> 00:43:00,690 >> [ALAT sedang 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 Aku akan memberitahu. 715 00:43:05,300 --> 00:43:06,880 Aku akan memberitahu. 716 00:43:06,880 --> 00:43:09,130 >> -Aku tahu itu akan berhasil. 717 00:43:09,130 --> 00:43:09,900 Baik. 718 00:43:09,900 --> 00:43:12,850 Berikan padaku. 719 00:43:12,850 --> 00:43:16,918 >> -Kombinasi 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 kombinasi adalah satu, dua, tiga, empat, lima. 735 00:43:34,770 --> 00:43:37,460 Itu kombinasi terbodoh Yang pernah saya dengar dalam hidup saya. 736 00:43:37,460 --> 00:43:39,710 Itulah jenis hal idiot akan ada pada bagasi. 737 00:43:39,710 --> 00:43:42,000 >> -Terima kasih, Yang Mulia. 738 00:43:42,000 --> 00:43:43,530 >> -Apa yang Anda lakukan? 739 00:43:43,530 --> 00:43:44,490 >> -Aku berbalik dari dinding. 740 00:43:44,490 --> 00:43:45,420 >> -Tidak Anda tidak. 741 00:43:45,420 --> 00:43:45,840 Anda mematikan seluruh film. 742 00:43:45,840 --> 00:43:46,930 >> -Saya harus telah menekan tombol yang salah. 743 00:43:46,930 --> 00:43:48,265 >> -Well, meletakkannya kembali. 744 00:43:48,265 --> 00:43:49,110 Menempatkan film kembali. 745 00:43:49,110 --> 00:43:49,510 >> -Ya, Pak. 746 00:43:49,510 --> 00:43:49,917 Ya, Pak. 747 00:43:49,917 --> 00:43:50,324 >> -Mari kita pergi, Arnold. 748 00:43:50,324 --> 00:43:51,140 Ayo, Gretchen. 749 00:43:51,140 --> 00:43:53,060 Tentu saja, kau tahu aku masih akan harus menagih Anda untuk ini. 750 00:43:53,060 --> 00:43:53,440 >> [END VIDEO PEMUTARAN] 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 berbicara tentang keamanan dalam beberapa hal, baik 754 00:44:08,430 --> 00:44:16,050 sedikit poster film, sehingga dalam baru-baru ini hari, masalah ini dengan NSA 755 00:44:16,050 --> 00:44:17,300 memantau semuanya. 756 00:44:17,300 --> 00:44:21,840 757 00:44:21,840 --> 00:44:26,930 Ini bisa sulit untuk merasa seperti Anda memiliki semacam privasi di 758 00:44:26,930 --> 00:44:34,540 dunia online, meskipun saya tidak tahu Anda sebagian besar rincian PRISM. 759 00:44:34,540 --> 00:44:42,130 Jadi bergerak di luar PRISM, kita tidak akan untuk berbicara tentang itu, sekarang 760 00:44:42,130 --> 00:44:44,030 berpikir tentang laptop Anda. 761 00:44:44,030 --> 00:44:48,360 Jadi di sini, saya ingin beralih ke akun saya yang sebenarnya, 762 00:44:48,360 --> 00:44:50,370 dengan penguin kecil saya. 763 00:44:50,370 --> 00:44:57,310 Jadi saya memiliki satu set password, dan bahwa password apa pun yang saya inginkan. 764 00:44:57,310 --> 00:45:02,430 >> Tapi ingat bahwa apa yang saya penebangan dengan, jadi login ini 765 00:45:02,430 --> 00:45:04,850 prompt, beberapa program tersebut. 766 00:45:04,850 --> 00:45:07,910 Ini beberapa program yang tidak ditulis oleh beberapa orang. 767 00:45:07,910 --> 00:45:13,250 Jadi, orang itu, jika mereka terutama berbahaya, mereka bisa 768 00:45:13,250 --> 00:45:17,780 mengatakan, baik-baik saja, jadi jika password yang saya masukkan adalah sama dengan saya 769 00:45:17,780 --> 00:45:22,800 password yang sebenarnya, atau itu sama beberapa sandi khusus - 770 00:45:22,800 --> 00:45:25,550 David mengagumkan atau sesuatu - 771 00:45:25,550 --> 00:45:27,190 kemudian biarkan mereka masuk 772 00:45:27,190 --> 00:45:33,760 Jadi programmer berbahaya bisa memiliki akses ke semua Mac Anda, atau 773 00:45:33,760 --> 00:45:36,150 Windows, atau apa pun. 774 00:45:36,150 --> 00:45:41,980 >> Sehingga tidak banyak perhatian, karena, Maksudku, ini adalah program login 775 00:45:41,980 --> 00:45:48,720 yang dikirimkan dengan OS X, ratusan atau ribuan orang 776 00:45:48,720 --> 00:45:50,020 Ulasan kode ini. 777 00:45:50,020 --> 00:45:55,330 Jadi, jika, dalam kode Anda di suatu tempat, Anda mengatakan jika string ini sama dengan equals 778 00:45:55,330 --> 00:45:58,860 David mengagumkan, login, maka seseorang yang akan menjadi, seperti, tunggu. 779 00:45:58,860 --> 00:45:59,800 Ini tidak benar. 780 00:45:59,800 --> 00:46:01,790 Hal ini seharusnya tidak berada di sini. 781 00:46:01,790 --> 00:46:06,650 Jadi itulah salah satu cara kita mendapatkan hal-hal menjadi semacam aman. 782 00:46:06,650 --> 00:46:10,300 >> Tapi pikirkan bahkan program bahwa Anda menulis. 783 00:46:10,300 --> 00:46:13,000 Katakanlah Anda menulis program login. 784 00:46:13,000 --> 00:46:20,440 Jadi program login ini yang Anda tulis, jadi jelas, Anda baik seorang 785 00:46:20,440 --> 00:46:21,210 programmer. 786 00:46:21,210 --> 00:46:25,610 Anda tidak akan menempatkan setiap berbahaya jika x sama dengan sama dengan David mengagumkan 787 00:46:25,610 --> 00:46:27,860 ke dalam kode Anda. 788 00:46:27,860 --> 00:46:31,930 Namun program ini, apa yang Anda gunakan untuk mengkompilasi program ini? 789 00:46:31,930 --> 00:46:34,180 Sesuatu seperti dentang. 790 00:46:34,180 --> 00:46:38,460 Jadi bagaimana jika orang yang kebetulan menulis dentang cased khusus di dentang 791 00:46:38,460 --> 00:46:44,310 sesuatu seperti, jika saya kompilasi Program login, kemudian masukkan kode ini 792 00:46:44,310 --> 00:46:49,720 ke dalam program login yang mengatakan, jika x sama sama David mengagumkan? 793 00:46:49,720 --> 00:46:59,890 Jadi tidak cukup, tapi kami memiliki yang sama mengeluarkan sini, di mana dentang, baik, 794 00:46:59,890 --> 00:47:03,790 ribuan, jika tidak puluhan ribu orang, telah melihat dentang, memiliki 795 00:47:03,790 --> 00:47:07,160 melihat garis-garis kode dan berkata, apa-apa, tidak ada yang buruk di sini. 796 00:47:07,160 --> 00:47:10,680 Jelas, tidak ada yang melakukan hal ini berbahaya. 797 00:47:10,680 --> 00:47:15,780 >> Tapi apa yang dentang itu sendiri, seperti, bagaimana jika saya mengkompilasi dentang? 798 00:47:15,780 --> 00:47:20,900 Bagaimana jika saya memiliki beberapa kompiler yang mengkompilasi dentang yang memasukkan ke dentang 799 00:47:20,900 --> 00:47:25,610 hack khusus ini yang mengatakan, baik-baik saja, ketika saya mengkompilasi dentang, maka 800 00:47:25,610 --> 00:47:31,290 executable saya mendapatkan khusus harus melihat dalam program login dan masukkan 801 00:47:31,290 --> 00:47:34,230 sandi ini, sama dengan equals Dave mengagumkan? 802 00:47:34,230 --> 00:47:37,990 Jadi ingat bahwa kompiler Anda sendiri perlu dikompilasi di beberapa titik. 803 00:47:37,990 --> 00:47:42,810 Jadi, jika apa yang Anda pilih untuk mengkompilasi dentang dengan, itu sendiri adalah berbahaya, maka Anda 804 00:47:42,810 --> 00:47:45,580 dapat mengacaukan keseluruhan cara di telepon. 805 00:47:45,580 --> 00:47:49,630 >> Jadi di sini, kami memiliki Ken Thompson dan Dennis Ritchie. 806 00:47:49,630 --> 00:47:53,780 Jadi ini adalah foto 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 Dia adalah besar - 809 00:47:58,740 --> 00:48:03,640 cukup banyak menulis C. Jadi Anda bisa berterima kasih padanya untuk kelas ini. 810 00:48:03,640 --> 00:48:04,840 Ken Thomson ada di sebelah kiri. 811 00:48:04,840 --> 00:48:07,780 Keduanya pada dasarnya menulis UNIX. 812 00:48:07,780 --> 00:48:10,140 Yah, mereka adalah kontributor utama di UNIX. 813 00:48:10,140 --> 00:48:11,310 Ada beberapa orang lain. 814 00:48:11,310 --> 00:48:16,240 Jadi Ken Thompson, di beberapa titik, ia memenangkan Turing Award. 815 00:48:16,240 --> 00:48:20,860 Dan penghargaan Turing, Aku selalu mendengar itu direferensikan dengan cara ini, itu adalah 816 00:48:20,860 --> 00:48:23,100 Hadiah Nobel ilmu komputer. 817 00:48:23,100 --> 00:48:27,500 >> Jadi pada Turing Award, dia harus memberikan pidato penerimaannya. 818 00:48:27,500 --> 00:48:31,790 Dan dia memberikan pidato yang sangat terkenal ini sekarang, disebut Refleksi Mempercayai 819 00:48:31,790 --> 00:48:35,620 Trust, yang telah kita terkait Untuk di website saja. 820 00:48:35,620 --> 00:48:41,670 Dan dalam pidato ini, katanya, semua yang benar, jadi saya menulis UNIX, dan sekarang 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, mengingat sekarang ini bahwa Linux adalah keturunan langsung dari 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, tapi banyak ide diambil dari UNIX. 825 00:48:53,810 --> 00:48:59,220 >> Jadi dia naik ke panggung dan berkata, semua benar, saya menulis UNIX. 826 00:48:59,220 --> 00:49:03,940 Dan agar kalian tahu, aku bisa login 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 Karena saya menempatkan satu ini khusus jika x sama sama Ken Thomson is awesome, 829 00:49:14,280 --> 00:49:16,350 maka aku diizinkan untuk login. 830 00:49:16,350 --> 00:49:18,370 Jadi orang-orang seperti, baik, bagaimana kau melakukan itu? 831 00:49:18,370 --> 00:49:21,090 Kami melihat program login dan tidak ada di sana. 832 00:49:21,090 --> 00:49:24,700 Dia seperti, baik, saya memodifikasi compiler login program login 833 00:49:24,700 --> 00:49:30,490 sehingga program login sekarang akan memiliki bahwa x sama sama Ken Thompson 834 00:49:30,490 --> 00:49:31,700 mengagumkan. 835 00:49:31,700 --> 00:49:33,120 >> Dan mereka mengatakan, baik, itu tidak benar. 836 00:49:33,120 --> 00:49:35,740 Kami sedang melihat compiler, dan compiler tidak memiliki baris 837 00:49:35,740 --> 00:49:36,400 kode seperti itu. 838 00:49:36,400 --> 00:49:40,540 Dia seperti, OK, tapi apa yang Anda kompilasi compiler dengan? 839 00:49:40,540 --> 00:49:44,810 Dan mereka berpikir, dan dia, seperti, baik, Akulah yang memberi Anda compiler 840 00:49:44,810 --> 00:49:50,580 Anda menggunakan compiler untuk mengkompilasi, sehingga Anda kompilasi kompilator, yang 841 00:49:50,580 --> 00:49:56,390 sendiri adalah berbahaya, dan akan memecahkan program login. 842 00:49:56,390 --> 00:49:59,360 Jadi pada dasarnya, pada saat itu, ada ada cara Anda bisa melihat sumber 843 00:49:59,360 --> 00:50:02,450 kode program login untuk melihat apa yang salah. 844 00:50:02,450 --> 00:50:04,220 Anda bahkan tidak bisa melihat di kode sumber kompilator 845 00:50:04,220 --> 00:50:06,790 untuk melihat apa yang salah. 846 00:50:06,790 --> 00:50:11,940 >> Anda akan perlu melihat mesin kode, biner sebenarnya dari 847 00:50:11,940 --> 00:50:16,760 dikompilasi compiler untuk melihat, tunggu, ini baris kode seharusnya tidak berada di sini. 848 00:50:16,760 --> 00:50:22,130 Tapi Ken Thompson mengambil satu langkah lebih lanjut dan mengatakan, baik, ada 849 00:50:22,130 --> 00:50:25,980 program-program khusus yang benar-benar membantu Anda membaca biner program, 850 00:50:25,980 --> 00:50:29,340 dan jadi jika seseorang menggunakan program tersebut untuk membaca biner, mereka akan melihat ini 851 00:50:29,340 --> 00:50:30,490 baris kode. 852 00:50:30,490 --> 00:50:34,020 Ia memodifikasi program-program untuk mengatakan, semua tepat, jika Anda mencari di 853 00:50:34,020 --> 00:50:38,460 compiler, tidak menunjukkan khusus ini set biner. 854 00:50:38,460 --> 00:50:42,830 >> Jadi Anda perlu mengambil langkah lebih lebih lanjut dan pada dasarnya, yang bisa memiliki 855 00:50:42,830 --> 00:50:46,210 diambil beberapa tingkat tipuan, dan di beberapa titik, tidak ada yang benar-benar 856 00:50:46,210 --> 00:50:47,990 akan memeriksa. 857 00:50:47,990 --> 00:50:52,590 Jadi moral dari cerita ini adalah, Anda tidak akan menulis 858 00:50:52,590 --> 00:50:54,340 Dentang di kelas ini. 859 00:50:54,340 --> 00:50:57,020 Anda akan menggunakan climbing Dentang banyak di kelas ini. 860 00:50:57,020 --> 00:51:00,490 Untuk semua yang Anda tahu, dentang adalah berbahaya program yang menyabotase setiap 861 00:51:00,490 --> 00:51:03,520 program tunggal yang pernah dikompilasi. 862 00:51:03,520 --> 00:51:08,206 Dan untuk meninggalkan Anda pada yang sangat menyenangkan perhatikan, melihat Anda 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 berikutnya. 865 00:51:12,935 --> 00:51:14,580 >> SPEAKER 3: Jangan kau berani mengatakan bahwa. 866 00:51:14,580 --> 00:51:15,930 Anda dapat melakukan hal ini. 867 00:51:15,930 --> 00:51:19,440 Anda telah melakukan ini sebelumnya, Anda dapat melakukan ini hari ini, Anda dapat melakukan hal ini besok. 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 hal ini. 870 00:51:22,790 --> 00:51:24,310 Anda dapat melakukan hal ini. 871 00:51:24,310 --> 00:51:26,102 >> [MUSIC PLAYING]