ROB Bowden: Hi, saya Rob Bowden, dan mari kita bercakap tentang quiz0. Jadi, soalan pertama. Ini isu yang mana Anda perlu memberi kod kepada bilangan 127 dalam mentol binari. Jika anda mahu, anda boleh membuat penukaran biasa dari bi-- atau, daripada perpuluhan kepada binari. Tetapi itu mungkin akan untuk mengambil banyak masa. Maksud saya, anda dapat memikirkan itu, OK, 1 adalah di sana, 2 adalah di sana, 4 adalah di sana, 8 adalah di sana. Cara yang lebih mudah, 127 adalah 128 kurang satu. Bahawa bola lampu paling kiri adalah 128-bit. Jadi 127 adalah benar-benar hanya semua dari bola lampu yang lain, karena itulah yang paling kiri bola lampu tolak 1. Itu saja untuk soalan itu. Soalan satu. Jadi dengan 3 bit yang anda boleh 8 mewakili nilai-nilai yang berbeza. Mengapa, maka, adalah 7 bukan negatif terbesar integer desimal anda boleh mewakili? Nah, jika kita hanya boleh mewakili 8 nilai-nilai yang berbeza, maka apa yang kita akan berada mewakili 0 hingga 7. 0 mengambil salah satu nilai. Soalan dua. Dengan n bit, berapa banyak berbeza nilai-nilai yang boleh anda mewakili? Jadi, dengan n bit, anda mempunyai 2 nilai yang mungkin bagi setiap bit. Jadi kita mempunyai 2 nilai yang mungkin bagi bit pertama, 2 nilai yang mungkin untuk yang kedua, 2 mungkin bagi ketiga. Dan itulah 2 kali 2 kali 2, dan akhirnya jawapannya adalah 2 hingga n. Pertanyaan ketiga. Apa yang 0x50 dalam binari? Jadi ingat bahawa perenambelasan mempunyai sangat penukaran mudah untuk binari. Jadi di sini, kita hanya perlu melihat 5 dan 0 secara bebas. Jadi apa 5 di binari? 0101, itu bit 1 dan bit 4. Apa 0 dalam binari? Tidak rumit. 0000. Jadi hanya meletakkan mereka bersama-sama, dan itu jumlah penuh dalam perduaan. 01010000. Dan jika anda mahu anda boleh mengambil kira yang paling kiri nol. Itu tidak relevan. Karena itu sebagai alternatif, apa yang 0x50 dalam perpuluhan? Jika anda mahu, anda could-- jika anda lebih selesa dengan biner, Anda boleh mengambil bahawa jawapan binari dan ditukar kepada perpuluhan. Atau kita hanya ingat perenambelasan itu. Sehingga 0 adalah di tempat ke-0-dan 5 adalah dalam 16 ke tempat pertama. Jadi di sini, kami mempunyai 5 kali 16 kepada pertama, ditambah 0 kali 16 kepada sifar, ialah 80. Dan jika anda melihat tajuk kepada soalan, itu CS 80, yang merupakan jenis yang petunjuk untuk jawapan kepada masalah ini. Soalan lima. Kami mempunyai skrip Scratch ini, yang diulang 4 kali mentega kacang jeli. Jadi bagaimana kita sekarang kod yang di C? Nah, kita mempunyai di sini-bahagian dalam huruf tebal adalah satu-satunya bahagian anda harus dilaksanakan. Jadi kita mempunyai gelung 4 yang perulangan 4 kali, printf-ing selai kacang jeli, dengan baris baru sebagai masalah meminta. Soalan enam, masalah Scratch lain. Kita lihat bahawa kita berada dalam gelung selama-lamanya. Kita katakan yang saya boleh ubah dan kemudian incrementing i oleh 1. Sekarang kita ingin melakukan itu di C. Ada pelbagai cara kita dapat melakukan semua ini. Di sini kita berlaku untuk kode selamanya gelung sebagai sementara (benar). Oleh itu, kita mengisytiharkan pembolehubah i, hanya seperti kita memiliki pembolehubah i dalam Scratch. Mengisytiharkan saya berubah-ubah, dan selama-lamanya sementara (benar), kita katakan pembolehubah i. Jadi printf% aku-- atau anda boleh telah digunakan% d. Kami berkata variabel itu, dan maka kenaikan itu, i ++. Soalan tujuh. Sekarang kita ingin melakukan sesuatu yang sangat mirip kepada Mario dot c dari permasalahan yang satu. Kami ingin mencetak hashtags ini, kita ingin mencetak lima oleh tiga segi empat tepat hash ini. Jadi bagaimana kita akan berbuat demikian? Nah, kami memberikan secara keseluruhan sekumpulan kod, dan anda hanya perlu mengisi fungsi grid cetak. Jadi, apa PrintGrid kelihatan seperti? Nah anda masa lalu lebar dan ketinggian. Jadi kita mempunyai satu luar 4 gelung, itu menggelung atas semua baris ini grid yang kita ingin mencetak. Kemudian kami mempunyai 4 gelung antara bersarang, itu mencetak pada setiap lajur. Jadi bagi setiap baris, kami cetak untuk setiap lajur, hash tunggal. Kemudian pada akhir baris kami mencetak baris baru tunggal untuk pergi ke barisan seterusnya. Dan itu sahaja untuk seluruh grid. Soalan lapan. Fungsi seperti PrintGrid dikatakan mempunyai kesan sampingan, tetapi tidak kembali nilai. Terangkan perbezaan tersebut. Jadi, ini bergantung kepada anda mengingat apa kesan sampingan adalah. Nah, pulangan yang value-- kita tahu PrintGrid tidak mempunyai nilai kembali, sejak di sini dikatakan tidak sah. Jadi apa pun yang mengembalikan sah tidak benar-benar kembali apa-apa. Jadi apa kesan sampingan? Nah, kesan sampingan adalah apa-apa yang semacam berterusan selepas hujung fungsi itu bukan saja kembali, dan ia bukan hanya dari input. Jadi, sebagai contoh, kita mungkin mengubah pembolehubah global. Itu akan menjadi kesan sampingan. Dalam kes ini, sebuah kesan sampingan yang sangat penting sedang mencetak ke layar. Jadi itu adalah kesan sampingan PrintGrid yang mempunyai. Kami mencetak perkara-perkara ini ke layar. Dan yang boleh anda fikirkan bahawa sebagai kesan sampingan, sejak itu sesuatu yang berterusan selepas majlis ini berakhir. Itu sesuatu yang di luar skop fungsi ini yang pada akhirnya sedang berubah, kandungan skrin. Soalan sembilan. Pertimbangkan program di bawah, yang nombor baris telah ditambah untuk demi perbincangan. Jadi dalam program ini kita hanya memanggil GetString, menyimpannya dalam s berubah-ubah, dan kemudian percetakan yang berubah-ubah ini. OK. Jadi menjelaskan mengapa talian ada yang hadir. #include CS50 dot h. Mengapa kita perlu #include CS50 dot h? Nah, kita panggil GetString fungsi, dan GetString ditakrifkan di perpustakaan CS50 ini. Jadi, jika kita tidak mempunyai #include CS50 titik h, kita akan mendapatkan bahwa pernyataan tersirat dari kesalahan fungsi GetString dari compiler. Oleh itu, kita perlu menyertakan library-- yang kita perlu menyertakan fail header, atau compiler tidak akan menyedari bahawa GetString ada. Terangkan mengapa garis dua hadir. Jadi standar dot h io. Ini betul-betul sama sebagai masalah yang lalu, kecuali bukan berurusan dengan GetString, kita berbicara tentang printf. Jadi, jika kita tidak mengatakan kita perlu untuk memasukkan standard io titik h, maka kita tidak akan dapat untuk menggunakan fungsi printf, kerana pengkompil tidak akan tahu mengenainya. Why-- apa signifikansinya dari membatalkan selaras empat? Jadi di sini kita mempunyai int main (void). Itu hanya mengatakan bahawa kita tidak mendapat sebarang baris perintah argumen untuk utama. Ingatlah bahawa kita boleh mengatakan int int argc kurungan tali argv utama. Jadi di sini kita hanya mengatakan tidak sah untuk mengatakan bahawa kita mengabaikan argumen baris perintah. Menjelaskan, sehubungan dengan ingatan, betul-betul apa GetString sejajar enam pulangan. GetString kembali blok memori, pelbagai karakter. Ia benar-benar mengembalikan pointer dengan watak yang pertama. Ingatlah bahawa string adalah bintang arang. Jadi adalah pointer ke pertama watak dalam apa jua string adalah untuk setiap pengguna yang dimasukkan pada papan kekunci. Dan memori yang kebetulan malloced, sehingga memori yang ada di tumpukan. Soalan 13. Pertimbangkan program di bawah. Jadi semua program ini adalah melakukan adalah printf-ing 1 dibahagikan dengan 10. Oleh itu, apabila dikumpulkan dan dilaksanakan, program ini output 0,0, walaupun 1 dibahagikan dengan 10 adalah 0.1. Jadi mengapa 0.0? Nah, ini adalah kerana bahagian integer. Jadi 1 adalah integer, 10 adalah integer. Jadi 1 dibahagikan dengan 10, segala-galanya diperlakukan sebagai bilangan bulat, dan C, apabila kita melakukan pembagian bilangan bulat, kita memotong mana-mana titik perpuluhan. Jadi 1 dibahagikan dengan 10 adalah 0, dan kemudian kita cuba untuk mencetak sebagai pelampung, jadi sifar dicetak sebagai pelampung adalah 0.0. Dan sebab itulah kita akan mendapat 0.0. Pertimbangkan program di bawah. Sekarang kami sedang mencetak 0.1. Jadi tidak ada pembagian bilangan bulat, kami hanya mencetak 0.1, tapi kami mencetaknya hingga 28 tempat perpuluhan. Dan kami mendapatkan ini 0,1000, sejumlah besar sifar, 5 5 5, bla bla bla. Jadi soalan di sini adalah mengapa ia mencetak, bukannya betul-betul 0.1? Jadi sebab itu di sini kini floating point ketidaktepatan. Ingatlah bahawa apungan hanya 32 bit. Oleh itu kita hanya boleh mewakili jumlah terbatas terapung mata yang dengan mereka 32 bit. Yah ada akhirnya tak terhingga banyak mata yang terapung, dan ada tak terhingga banyaknya terapung mata yang di antara 0 dan 1, dan kami jelas dapat mewakili nilai-nilai yang lebih dari itu. Oleh itu, kita harus berkorban untuk dapat mewakili kebanyakan nilai-nilai. Jadi nilai seperti 0.1, nampaknya kita tidak boleh menyatakan bahawa tepat. Jadi, daripada mewakili 0.1 kita melakukan terbaik yang dapat mewakili ini 0.100000 5 5 5. Dan itu cukup dekat, tetapi untuk banyak aplikasi Anda perlu bimbang tentang floating point ketidaktepatan, kerana kita tidak boleh mewakili semua titik terapung dengan tepat. Soalan 15. Pertimbangkan kod di bawah. Kami hanya mencetak 1 ditambah 1. Jadi tidak ada trik di sini. 1 campur 1 bernilai 2, dan kemudian kami mencetak itu. Ini hanya print 2. Soalan 16. Sekarang kami sedang mencetak watak 1 ditambah karakter 1. Jadi mengapa ini tidak mencetak perkara yang sama? Nah karakter 1 ditambah watak 1, karakter 1 mempunyai nilai ASCII 49. Jadi, ini benar-benar mengatakan 49 ditambah 49 tahun, dan akhirnya ini akan mencetak 98. Jadi ini tidak mencetak 2. Soalan 17. Menyelesaikan pelaksanaan aneh di bawah ini dalam apa-apa cara bahawa fungsi mengembalikan berlaku jika n adalah ganjil dan palsu jika n genap. Ini adalah tujuan yang besar bagi operator mod. Oleh itu, kita mengambil hujah kita n, jika n mod 2 sama dengan 1, dan yang bermakna n dibahagikan sebanyak 2 mempunyai sisa a. Jika n dibagi 2 mempunyai sisa, yang bermakna n adalah ganjil, jadi kami kembali benar. Yang lain kita kembali palsu. Anda juga boleh melakukan n mod 2 sama dengan sifar, pulangan palsu, yang lain kembali benar. Pertimbangkan fungsi rekursif di bawah. Jadi, jika n adalah kurang atau sama dengan 1, kembali 1, lain kembali n kali f n tolak 1. Jadi apa fungsi ini? Nah, ini hanya fungsi faktorial. Ini baik diwakili n faktorial. Maka bertanyalah 19 sekarang, kita mahu mengambil fungsi rekursif ini. Kami mahu menjadikan ia berulang. Jadi bagaimana kita melakukannya? Nah untuk kakitangan penyelesaian, dan sekali lagi ada beberapa cara yang boleh dilakukan itu, kami bermula dengan produk ini int sama dengan 1. Dan sepanjang ini untuk loop, kita akan yang akan mengalikan produk ke akhirnya berakhir dengan faktorial penuh. Jadi untuk int i sama dengan 2, saya adalah kurang daripada atau sama dengan n, i ++. Anda mungkin tertanya-tanya mengapa saya sama dengan 2. Nah, ingatlah bahawa di sini kita harus memastikan kes asas kami adalah betul. Jadi, jika n adalah kurang daripada atau sama 1, kami hanya kembali 1. Jadi di sini, kita mula di i bersamaan 2. Nah jika saya adalah 1, maka the-- atau jika n ialah 1, maka bagi gelung tidak akan melaksanakan sama sekali. Dan dengan itu kita akan hanya produk kembali, yang adalah 1. Begitu juga, jika n ialah sesuatu yang kurang dari 1-- olah ia adalah 0, 1 negatif, whatever-- kita masih akan kembali 1, yang betul-betul apa yang versi rekursif lakukan. Sekarang, jika n lebih besar dari 1, maka kami akan melakukan sekurang-kurangnya satu lelaran gelung ini. Jadi, bila n adalah 5, maka kita akan lakukan kali produk sama dengan 2. Jadi sekarang produk adalah 2. Sekarang kita akan melakukan kali produk sama dengan 3. Sekarang itu 6. Kali produk sama dengan 4, sekarang 24. Kali produk sama dengan 5, sekarang 120. Demikian maka akhirnya, kita kembali 120, yang betul 5 faktorial. Soalan 20. Ini adalah salah satu di mana anda perlu mengisi dalam jadual ini dengan mana-mana algoritma yang diberikan, apa-apa yang telah kita lihat, bahawa sesuai dengan ini jangka algoritma masa-masa jangka asimptot. Jadi apa algoritma yang adalah Omega 1, tetapi O besar n? Jadi tidak boleh menjadi tak terhingga banyak jawapan di sini. Salah satu yang kita telah melihat mungkin paling sering hanya carian linear. Jadi dalam kes ini, senario, item kami cari adalah di bermula dari senarai dan sebagainya omega dari 1 langkah, perkara pertama yang kami cek, kita hanya pulang segera yang kami mendapati barang tersebut. Dalam senario kes terburuk, item tersebut pada akhirnya, atau item yang tiada dalam senarai ini sama sekali. Oleh itu, kita perlu mencari keseluruhan senarai, semua n unsur-unsur, dan itulah sebabnya ia o n. Jadi sekarang ia adalah sesuatu yang baik omega n log n, dan O besar n log n. Baik hal yang paling relevan yang telah kita lihat di sini adalah menggabungkan semacam. Jadi menggabungkan semacam, ingat, akhirnya saya beli n log n, di mana saya beli ditakrifkan jika kedua-dua omega dan O besar adalah sama. Kedua-dua n log n. Apakah sesuatu yang omega n, dan O n kuasa dua? Nah, sekali lagi ada beberapa jawapan yang mungkin. Di sini kita berlaku untuk mengatakan semacam gelembung. Semacam Kemasukkan juga akan bekerja di sini. Ingatlah bahawa bubble sort mempunyai pengoptimuman bahawa jika, jika anda mampu untuk mendapatkan melalui seluruh senarai tanpa perlu melakukan apa-apa pertukaran, maka, baik, kita segera boleh kembali bahawa senarai itu disusun untuk memulakan. Jadi dalam kes senario yang terbaik, ia hanya omega n. Jika ia bukan hanya yang baik senarai bermula dengan disusun, maka kita harus O n kuasa dua swap. Dan akhirnya, kita mempunyai jenis pilihan untuk n kuasa dua, kedua-dua omega dan besar O. Soalan 21. Apa integer overflow? Baik lagi, sama seperti sebelum ini, kami hanya mempunyai finitely banyak bit untuk mewakili integer, jadi mungkin 32 bit. Katakanlah kita mempunyai bilangan bulat yang ditandatangani. Kemudian akhirnya tertinggi angka positif kita dapat mewakili adalah 2 hingga 31 tolak 1. Jadi apa yang berlaku jika kita cuba kemudian kenaikan bilangan bulat itu? Nah, kita akan pergi dari 2 ke 31 tolak 1, semua jalan ke negatif 2 kepada 31. Jadi limpahan integer ini apabila anda menyimpan incrementing, dan akhirnya anda tidak boleh mendapatkan apa-apa yang lebih tinggi dan ia hanya membungkus semua jalan kembali sekitar untuk nilai negatif. Bagaimana dengan buffer overflow? Jadi penyangga overflow-- ingat apa penampan adalah. Ia hanya sepotong memori. Sesuatu seperti array adalah buffer. Jadi buffer overflow adalah ketika anda cuba untuk mengakses memori di luar akhir array. Jadi, jika anda mempunyai pelbagai saiz 5 dan Anda cuba untuk mengakses pelbagai kurungan 5 atau 6 atau pendakap pendakap 7, atau apa-apa di luar tamat, atau bahkan apa-apa pelbagai kurungan below-- negatif 1-- semua itu adalah limpahan penampan. Anda menyentuh memori dalam cara yang buruk. Soalan 23. Jadi, dalam satu ini anda perlu untuk melaksanakan strlen. Dan kita memberitahu anda bahawa anda boleh menganggap s tidak akan menjadi batal, jadi anda tidak perlu melakukan apa-apa cek batal. Dan ada beberapa cara Anda dapat melakukan semua ini. Di sini kita hanya mengambil mudah. Kita mulakan dengan counter, n. n adalah mengira bilangan aksara yang ada. Oleh itu, kita mulai pada 0, dan kemudian kita beralih di atas seluruh senarai. Adalah s kurungan 0 sama dengan terminator watak batal? Ingat yang kami cari watak terminator nol untuk menentukan berapa lama tali kita. Yang akan menamatkan apa-apa tali yang relevan. Jadi adalah s kurungan 0 sama untuk terminator nol? Jika tidak, maka kita akan melihat s kurungan 1, s kurungan 2. Kami tetap akan sampai kita mencari terminator nol. Sebaik sahaja kami telah menemukan itu, maka n mengandungi jumlah panjang tali, dan kami hanya dapat kembali itu. Soalan 24. Jadi, ini adalah salah satu di mana anda perlu membuat trade off. Jadi satu perkara yang baik dalam satu cara, tetapi dalam apa cara itu tidak baik? Jadi di sini, menggabungkan semacam cenderung lebih cepat daripada semacam gelembung. Setelah mengatakan bahawa- baik, ada adalah beberapa jawapan di sini. Tetapi yang utama ialah bubble sort adalah omega n untuk daftar diurutkan. Ingat bahawa jadual kita hanya lihat sebelum ini. Jadi gelembung macam omega dari n, senario kes terbaik adakah ia dapat hanya pergi daftar sekali, tentukan hey perkara ini sudah disusun, dan kembali. Menggabungkan semacam, tidak kira apa Anda lakukan, adalah omega n log n. Jadi untuk daftar diurutkan, gelembung semacam akan menjadi lebih cepat. Sekarang bagaimana dikaitkan senarai? Jadi senarai berpaut boleh tumbuh dan menyusut sesuai sebagai banyak unsur yang diperlukan. Setelah berkata begitu bahawa- biasanya perbandingan langsung akan menjadi yang dikaitkan daftar dengan array. Jadi walaupun array boleh mudah tumbuh dan menyusut sesuai sebagai banyak unsur seperti yang diperlukan, daftar link dibandingkan dengan sebuah array-- array mempunyai akses rawak. Kita boleh indeks ke mana-mana elemen tertentu dari array. Jadi untuk senarai yang disambungkan, kita tidak boleh hanya pergi ke elemen yang kelima, kita harus melintasi dari awal sehingga kita dapat unsur kelima. Dan itu akan menghalang kita daripada melakukan sesuatu seperti carian binari. Bercakap carian binari, carian binari cenderung lebih cepat daripada carian linear. Setelah mengatakan bahawa- begitu, satu perkara yang mungkin adalah bahawa anda tidak boleh melakukan binari mencari pada daftar terkait, Anda hanya boleh melakukannya pada array. Tetapi mungkin lebih penting lagi, Anda tidak dapat melakukan pencarian binari pada sebuah array yang tidak disusun. Pendahuluan Anda mungkin perlu menyusun array, dan hanya kemudian boleh Anda melakukan pencarian binari. Jadi, jika perkara yang anda tidak diurutkan untuk memulakan dengan, maka pencarian linear mungkin akan lebih cepat. Soalan 27. Oleh itu fikirkanlah program di bawah, yang akan di slaid seterusnya. Dan ini adalah salah satu di mana kami akan ingin menyatakan dengan jelas nilai-nilai untuk pelbagai pembolehubah. Jadi mari kita lihat itu. Jadi garis satu. Kami mempunyai int x sama dengan 1. Itulah satu-satunya perkara yang terjadi. Jadi pada saluran satu, kita lihat pada kami meja, y, a, b, dan tmp semua pingsan. Jadi apa x? Baik kita hanya menetapkan sama dengan 1. Dan kemudian garis dua, baik, kita melihat bahawa y ditetapkan pada 2, dan meja itu sudah diisi untuk kita. Jadi x adalah 1 dan y ialah 2. Sekarang, garis tiga, kita sekarang dalam fungsi swap. Apa yang kita lulus untuk menukar? Kami melewati ampersand x untuk dan ampersand y untuk b. Di mana masalah lebih awal menyatakan bahawa alamat x adalah 0x10, dan alamat y adalah 0x14. Jadi a dan b adalah sama dengan 0x10 dan 0x14, masing-masing. Di baris tiga, apakah x dan y? Nah, tidak ada yang berubah tentang x dan y pada titik ini. Walaupun mereka dalam bingkai tindanan utama, mereka masih mempunyai yang sama nilai-nilai yang mereka lakukan sebelum ini. Kami tidak diubah apa-apa memori. Jadi x 1, y ialah 2. Baik. Jadi sekarang kita berkata tmp int sama untuk membintangi sebuah. Jadi pada garis empat, segala-galanya adalah sama kecuali tmp. Kami tidak mengubah apa-apa nilai-nilai apa-apa jua kecuali tmp. Kami sedang mengatur tmp sama untuk membintangi sebuah. Apa yang bintang? Nah, satu mata kepada x, Jadi bintang yang akan x sama, iaitu 1. Jadi semuanya disalin ke bawah, dan tmp diset ke 1. Sekarang baris berikutnya. Bintang yang sama dengan bintang b. Jadi dengan garis five-- baik lagi, segala-galanya adalah sama kecuali apa sahaja bintang adalah. Apa yang bintang? Nah, kita hanya mengatakan bintang adalah x. Oleh itu, kita sedang mengubah x untuk sama b bintang. Apa yang bintang b? y. b mata kepada y. Jadi bintang b ialah y. Oleh itu, kita sedang menyiapkan x sama dengan y, dan segala sesuatu yang lain adalah sama. Jadi kita lihat di barisan depan yang x kini 2, dan selebihnya hanya menyalin. Sekarang di baris berikutnya, bintang b sama dengan tmp. Nah, kita hanya mengatakan bintang b ialah y, jadi kami sedang menyiapkan y sama dengan tmp. Segala sesuatu yang lain adalah sama, jadi semuanya akan disalin ke bawah. Kami sedang menyiapkan y sama dengan tmp, yang satu, dan segala sesuatu yang lain adalah sama. Kini akhirnya, tujuh baris. Kita kembali dalam fungsi utama. Kami selepas pertukaran selesai. Kami telah kehilangan a, b, dan tmp, tetapi akhirnya kita tidak mengubah apa-apa nilai-nilai apa-apa jua pada masa ini, kami hanya copy x dan y ke bawah. Dan kita melihat bahawa x dan y adalah kini 2 dan 1, bukan 1 dan 2. Swap ini telah berjaya dilaksanakan. Soalan 28. Katakan yang anda hadapi mesej ralat di bawah pada waktu pejabat tahun depan sebagai CA atau TF. Nasihat bagaimana untuk memperbaiki setiap kesalahan tersebut. Rujukan itu terdefinisi untuk GetString. Mengapa anda mungkin melihat ini? Nah, jika seseorang pelajar menggunakan GetString dalam kod mereka, mereka telah benar Hash termasuk CS50 dot h termasuk perpustakaan CS50 ini. Nah, apa yang mereka harus memperbaiki kesalahan ini? Mereka perlu melakukan lcs50 dash di baris arahan apabila mereka menyusun. Oleh itu, jika mereka tidak lulus dentang dash lcs50, mereka tidak akan mempunyai sebenar kod yang mengimplementasikan GetString. Soalan 29. Secara implisit menyatakan fungsi perpustakaan strlen. Nah ini sekarang, mereka tidak mempunyai dilakukan hash yang betul termasuk. Dalam kes ini, file header mereka perlu menyertakan adalah rentetan titik h, dan termasuk tali titik h, kini student-- sekarang pengkompil mempunyai akses ke deklarasi strlen, dan ia tahu bahawa kod anda menggunakan strlen betul. Soalan 30. Lebih peratus penukaran daripada hujah-hujah data. Jadi apa ini? Juga ingat bahawa peratus ini signs-- bagaimana ia relevan untuk printf. Jadi dalam printf kita mungkin percent-- kita mungkin mencetak sesuatu seperti peratus Backslash i n. Atau kita mungkin mencetak seperti peratus i, ruang, peratus i, ruang, peratus i. Jadi untuk masing-masing tanda-tanda peratus, kita perlu untuk lulus variabel pada akhir printf. Jadi, jika kita katakan paren printf peratus i Backslash Tanda kurung n dekat, baik, kita katakan bahawa kita siap dicetak integer, tapi kemudian kita tidak lulus printf integer sebenarnya mencetak. Jadi di sini lebih peratus penukaran daripada hujah-hujah data? Itu mengatakan bahawa kita mempunyai sejumlah besar peratus, dan kami tidak mempunyai cukup pembolehubah untuk benar-benar mengisi mereka persen. Kemudian pasti, untuk soalan 31, pasti kehilangan 40 bait dalam satu blok. Jadi ini adalah satu kesilapan yang Valgrind. Ini mengatakan bahawa di suatu tempat di kod anda, anda mempunyai peruntukan yang 40 bait besar sehingga Anda malloced 40 bait, dan anda tidak dibebaskan itu. Kemungkinan besar anda hanya perlu untuk mencari beberapa kebocoran memori, dan mencari di mana anda perlu membebaskan blok ini dari ingatan. Dan bertanyalah 32, tulis tidak sah dari ukuran 4. Sekali lagi ini adalah satu kesilapan yang Valgrind. Hal ini tidak perlu melakukan dengan kebocoran memori sekarang. Hal ini, paling likely-- Maksud saya, itu semacam hak ingatan tidak sah. Dan kemungkinan besar ini adalah beberapa semacam buffer overflow. Jika anda mempunyai array, mungkin array integer, dan mari kita mengatakan itu dari saiz 5, dan anda cuba untuk menyentuh pelbagai braket 5. Jadi, jika anda cuba untuk menulis dengan nilai, itu bukan sekeping memori Anda benar-benar mempunyai akses kepada, dan jadi anda akan mendapat ralat ini, berkata tulis tidak sah dari ukuran 4. Valgrind akan mengenali anda cuba untuk menyentuh memori tidak tepat. Dan itu sahaja untuk quiz0. Saya Rob Bowden, dan ini adalah CS50.