[MUSIC PLAYING] Doug LLOYD: Baiklah, jadi mari kita berbicara tentang argumen baris perintah. Jadi, sejauh ini dalam kursus cukup banyak semua program Anda mungkin sudah mulai seperti this-- void main int. Kami telah mengumpulkan input pengguna jika kita membutuhkannya dalam program kami, seperti Program Mario, misalnya, oleh di program petunjuknya. Kami telah tidak diperlukan untuk memodifikasi deklarasi utama, karena bukan dalam kita main hanya mengatakan, Anda mungkin menyebutnya untuk mendapatkan int. Seberapa besar Anda ingin piramida menjadi? Atau Anda dapat menghubungi untuk mendapatkan float-- berapa banyak perubahan harus saya output ke pengguna? Ada cara lain meskipun, dan jika kita ingin pengguna kami untuk dapat memberikan Data untuk program kami saat runtime, bukan sementara program ini berjalan, perbedaan halus namun kadang-kadang yang sangat berguna, kita membutuhkan bentuk baru menyatakan utama. Kita tidak bisa menggunakan int void main jika kita ingin mengumpulkan data lain pada baris perintah ketika pengguna menjalankan program, maka argumen baris perintah. Untuk mengumpulkan ini baris perintah argumen dari pengguna, mengubah deklarasi Anda utama terlihat seperti int this-- utama, paren terbuka, int argc, koma, String argv, kurung persegi, dan kemudian membuka penjepit keriting. Jadi apa artinya sudah? Nah, kita melewati dua parameter, atau argumen, atau input untuk utama. Satu, integer disebut argc, dan yang lainnya adalah apa? Ini sebuah array dari string, kan? Kita melihat bahwa notasi persegi braket. Ini array dari string. Ini bukan string individu, itu array dari string. Dan dua argumen, argc dan argv, memungkinkan Anda untuk mengetahui data pengguna apa telah disediakan di baris perintah dan berapa banyak hal yang mereka disediakan di baris perintah. Hal yang cukup berguna untuk bekerja dengan. Argc singkatan hitungan argumen, dan Anda harus tahu, dengan cara, Anda bisa menelepon argc apa pun yang Anda inginkan. Anda dapat menghubungi argv apa pun yang Anda inginkan. Ini adalah nama hanya konvensional yang kita gunakan untuk them-- count argumen, dan seperti yang kita akan melihat dalam satu detik, Argumen vektor, argv. Tapi Anda tidak harus memanggil mereka argc dan argv jika Anda tidak ingin, tapi konvensional, itulah yang kami lakukan. Jadi, argc, jumlah argumen. Ini adalah variabel integer-jenis dan begitu, sebagai Anda mungkin berharap, jika kita memiliki dua hal bahwa kita akan menemukan apa ini diketik dan berapa banyak barang yang pengguna mengetik, argc adalah akan memberitahu kita berapa banyak barang pengguna mengetik. Jadi itu memberi Anda beberapa argumen baris perintah pengguna diketik ketika program dieksekusi. Jadi jika program anda adalah menjalankan dot slash serakah, dan dalam serakah Anda memprogram fungsi utama Anda memiliki deklarasi int int main argc, String argv kurung persegi, maka argc dalam kasus itu adalah salah satu. Sekarang perhatikan kita tidak menghitung berapa banyak hal pengguna mengetik setelah nama program. Nama program itu sendiri menghitung sebagai argumen baris perintah. Jadi dot slash serakah, di hal, argc adalah salah satu. Jika pengguna mengetik slash serakah 1024 CS50 pada baris perintah, argc dalam kasus yang akan menjadi tiga. Dan kita tahu ini karena jalan bahwa pembagian antara string terdeteksi adalah apakah ada ruang, atau tab, atau sesuatu seperti itu di antara mereka. Jadi setiap jumlah ruang putih, yang disebut, antara nilai-nilai diketik baris perintah menunjukkan berapa banyak ada. Jadi dot slash ruang serakah 1024 ruang CS50, argc, dalam kasus itu, adalah tiga. Argv adalah vektor argumen. Vektor, dengan cara, hanya kata lain untuk array, dan ini adalah sebuah array yang menyimpan string. Satu string per elemen, yaitu string yang sebenarnya pengguna diketik di baris perintah ketika program dieksekusi. Sekarang, seperti yang terjadi dengan berbagai apapun, jika Anda ingat dari diskusi kami array, elemen pertama dari argv selalu akan ditemukan di argv braket persegi nol. Itulah indeks pertama dari array argv. Sehingga will-- dan pada kenyataannya, akan bahwa selalu menjadi nama program, akan selalu berada di argv braket persegi nol. Unsur terakhir dari argv selalu ditemukan di argv argc kurung minus satu. Apakah Anda melihat mengapa? Ingat berapa banyak elemen ada di array ini. Nah, kita tahu itu-- itu jumlah argc elemen. Jika pengguna mengetik tiga hal di baris perintah, argc tiga. Tapi karena di c, ketika kita sedang bekerja dengan array, setiap elemen dari array, atau lebih tepatnya indeks array, mulai dari nol. Jika kita memiliki tiga elemen di kami array, kita memiliki unsur di argv nol, elemen di argv satu, dan unsur di argv dua. Tidak ada unsur di argv tiga, dan berbagai ukuran tiga. Jadi itu sebabnya yang terakhir unsur argv selalu bisa ditemukan di argv persegi kurung argc minus satu. Jadi mari kita asumsikan mengeksekusi pengguna program serakah sebagai follows-- jika mereka ketik di baris perintah dot memangkas serakah ruang 1024 ruang CS50, dan untuk alasan apa pun kita sudah sudah menyiapkan program serakah kami untuk mengetahui dan bekerja dengan orang- argumen baris perintah. Kami sebelumnya tidak ketika kita bekerja di atasnya untuk masalah serakah, tapi katakanlah kita sekarang sudah dimodifikasi sehingga kita lakukan proses argumen baris perintah dalam beberapa cara. Dalam hal ini, argv nol adalah dot slash serakah. Apa satu argv? Nah, itu 1024, kan? Ini adalah 1024, tapi di sini adalah distinction-- benar-benar penting Anda ingat jenis data argv? Ini menyimpan string, kan? Tapi sepertinya 1024 adalah nilai integer. Ini adalah benar-benar penting perbedaan, dan sebenarnya akan menjadi sesuatu yang Anda mungkin hadapi dalam masalah di kemudian. Segala sesuatu di argv adalah disimpan sebagai string. Jadi isi argv seseorang adalah tali satu, nol, dua, empat, terdiri dari empat karakter. Seolah-olah pengguna mengetik satu, nol, dua, empat sebagai huruf individu atau karakter. Hal ini tidak integer 1024, dan sehingga Anda tidak bisa langsung bekerja dengan itu dengan mengatakan int 1000, atau bukan int x sama argv satu dikurangi 24. Secara intuitif, Anda mungkin berpikir bahwa sebagai, OK, baik itu 1024 dikurangi 24, jadi x sama dengan 1.000. Namun pada kenyataannya, itu tidak terjadi, karena salah satu argv adalah string. String 1.024. Sekarang ada fungsi yang bisa digunakan untuk mengkonversi string ke integer. Saya tidak akan merusaknya untuk Anda sekarang, tapi aku yakin Zamyla akan senang untuk memberitahu Anda tentang hal itu di walkthrough untuk masalah masa depan. Tapi Anda juga dapat menemukan masalah like-- alasan saya, fungsi yang akan melakukan hal ini dalam referensi 50, jika Anda pergi ke panduan referensi Anda dapat menemukan fungsi yang akan membuat konversi ini untuk Anda. Tapi sekali lagi, di walkthrough untuk masalah masa depan, Zamyla akan dengan senang hati memberitahu Anda apa fungsi itu yang akan mengkonversi String 1024 ke integer 1024. Baiklah, jadi pindah. Kami telah membahas nol argv kami, kita telah membahas argv satu. Apa yang ada di argv dua? CS50. Satu yang mungkin cukup jelas. Apa yang ada di argv tiga? Nah lagi, kita tidak benar-benar tahu, kan? Kami memiliki sebuah array dari ukuran tiga, itu berapa banyak elemen user diketik di baris perintah, jadi jika kita pergi ke argv tiga, kita sekarang melangkahi batas array kita. Compiler akan membiarkan kita melakukan ini, tidak ada masalah intuitif dengan itu, tetapi dalam hal sebenarnya apa yang terjadi terjadi, kita tidak benar-benar tahu. Hal ini tergantung pada apa yang terletak di memori mana argv tiga akan diharapkan. Dan jadi kita bisa berakhir semakin jauh scot gratis. Lebih mungkin daripada tidak, terutama ketika Anda bekerja dengan argv sebagai lawan ke array lain yang ada di program kami, kita mungkin akan menderita kesalahan segmentasi. Jadi sekali lagi, akan pastikan untuk tidak melanggar batas array Anda, terutama argv, mengingat tingkat tinggi dari penting dalam program Anda. Aku Doug Lloyd. Ini adalah CS50.