>> [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.