>> [Bermain muzik]
>> DOUG LLOYD: Baiklah, jadi mari kita bercakap mengenai hujah-hujah baris arahan.
Jadi, setakat ini dalam perjalanan cantik banyak semua program anda
telah mungkin bermula seperti this-- sah utama int.
Kami telah mengumpul input pengguna jika kita memerlukannya
dalam program-program kami, seperti yang Program Mario, sebagai contoh,
oleh dalam program-arahan.
Kita tidak diperlukan untuk mengubah suai pengisytiharan utama,
kerana bukan di dalam kita utama hanya berkata, anda boleh menghubungi untuk mendapatkan int.
Berapa besar yang anda ingin piramid untuk menjadi?
Atau anda boleh menghubungi untuk mendapatkan float-- perubahan berapa banyak
perlu saya output kepada pengguna?
>> Terdapat satu lagi cara walaupun, dan jika kita mahu pengguna kami
dapat menyediakan data untuk program kami
pada masa berjalan dan bukannya semasa program sedang berjalan,
perbezaan yang halus tetapi kadang-kadang satu yang sangat berguna,
kita perlu satu bentuk baru mengisytiharkan utama.
Kita tidak boleh menggunakan sah utama int jika kita mahu mengumpul data lain pada baris arahan
apabila pengguna menjalankan program ini, oleh itu hujah baris arahan.
>> Mengumpul ini baris arahan hujah-hujah daripada pengguna,
menukar akuan anda utama untuk kelihatan seperti int this--
utama, paren terbuka, int argc, koma, rentetan argv, tanda kurung siku,
dan kemudian membuka pendakap kerinting.
Jadi apa maksudnya sudah?
Nah, kita lulus dalam dua parameter, atau hujah-hujah, atau input kepada utama.
Satu, integer yang dikenali argc, dan yang lain adalah apa?
Ia adalah pelbagai rentetan, bukan?
Kita lihat bahawa notasi kurungan persegi.
Ia merupakan satu pelbagai rentetan.
Ia bukan satu rentetan individu, ia adalah pelbagai rentetan.
Dan dua hujah ini, argc dan argv, membolehkan anda untuk mengetahui apa data pengguna
telah disediakan di baris arahan dan berapa banyak yang mereka
disediakan di baris arahan.
Perkara yang cukup berguna untuk bekerja dengan.
>> Argc bermaksud kiraan hujah, dan anda akan melihat, dengan cara itu,
bahawa anda boleh memanggil argc apa sahaja yang anda mahu ia.
Anda boleh memanggil argv apa sahaja yang anda mahu.
Ini adalah nama-nama hanya konvensional yang kita gunakan untuk mereka, kelak kiraan hujah,
dan seperti yang kita akan lihat dalam satu saat, vektor hujah, argv.
Tetapi anda tidak perlu untuk memanggil mereka argc dan argv jika anda tidak mahu,
tetapi konvensional, itulah yang kita lakukan.
>> Jadi anyway, argc, kiraan hujah.
Ia merupakan satu pembolehubah integer-jenis dan sebagainya, kerana yang anda jangkakan, jika kita mempunyai dua perkara
bahawa kita akan mencari tempat apa ini ditaip
dan barangan berapa banyak pengguna ditaip, argc adalah
akan memberitahu kita berapa banyak barangan pengguna ditaip.
Jadi ia memberi anda beberapa hujah baris arahan pengguna
ditaip apabila program itu dilaksanakan.
Jadi, jika program anda adalah menjalankan dot mengurangkan tamak,
dan dalam tamak anda program fungsi utama anda
mempunyai int pengisytiharan int utama argc, rentetan argv tanda kurung siku, kemudian
argc dalam kes itu adalah satu.
Sekarang perhatikan kita tidak mengira berapa banyak perkara
pengguna ditaip selepas nama program.
Nama Program itu sendiri yang diambil kira sebagai hujah baris arahan.
>> Jadi dot mengurangkan tamak, dalam kes itu, argc adalah satu.
Jika pengguna ditaip slash tamak 1024 CS50 di baris arahan, argc dalam kes itu
akan menjadi tiga.
Dan kita tahu ini kerana cara bahawa pembahagian di antara tali
dikesan ialah sama ada terdapat ruang, atau tab,
atau sesuatu seperti itu di antara mereka.
Jadi apa-apa jumlah ruang putih, yang dipanggil, antara nilai ditaip baris arahan
menunjukkan berapa banyak terdapat.
Jadi dot mengurangkan ruang tamak 1024 ruang CS50, argc, dalam kes itu, adalah tiga.
>> Argv adalah vektor hujah.
Vektor, dengan cara itu, hanya perkataan lain untuk pelbagai,
dan ini adalah array yang menyimpan tali.
Satu rentetan setiap elemen, iaitu tali yang pengguna sebenarnya
ditaip di baris arahan apabila program itu dilaksanakan.
Sekarang, seperti yang berlaku dengan mana-mana lokasi, jika anda
ingat dari perbincangan kita tentang tatasusunan, elemen pertama argv
sentiasa akan didapati di argv kurungan persegi sifar.
Itulah indeks pertama array argv.
Supaya will-- dan sebenarnya, wasiat yang sentiasa merupakan nama program,
akan sentiasa terletak di argv kurungan persegi sifar.
>> Elemen terakhir argv sentiasa dijumpai di argv kurungan persegi argc tolak satu.
Adakah anda melihat mengapa?
Ingat berapa banyak unsur-unsur wujud dalam pelbagai ini.
Baik, kita tahu bahawa- ia nombor argc unsur-unsur.
Jika pengguna ditaip tiga perkara di perintah-line, argc adalah tiga.
Tetapi kerana dalam c, apabila kita bekerja dengan pameran, setiap elemen array,
atau lebih tepat indeks bagi pelbagai, bermula dari sifar.
Jika kita mempunyai tiga elemen dalam kita lokasi, kami mempunyai unsur di argv sifar,
elemen di argv satu, dan elemen di argv dua.
Tiada unsur di argv tiga, dan pelbagai saiz tiga.
Jadi itulah sebabnya terakhir unsur argv boleh sentiasa
didapati di argv persegi kurungan argc tolak satu.
>> Jadi mari kita andaikan yang bermaksud melaksanakan pengguna program yang tamak sebagai follows--
jika mereka menaip dalam baris arahan dot mengurangkan tamak ruang 1024 ruang CS50,
dan untuk apa-apa sebab kita ada telah menyediakan program tamak kami
mengetahui dan bekerja dengan ini hujah-hujah baris arahan.
Kami tidak sebelum ini apabila kami bekerja di atasnya untuk masalah yang tamak,
tetapi katakan kami telah sekarang diubahsuai agar kita melakukan proses
hujah-hujah baris arahan dalam beberapa cara.
Dalam kes ini, argv sifar adalah slash dot tamak.
Apa yang salah argv?
Nah, itu 1024, bukan?
Ia adalah 1024, tetapi di sini adalah distinction-- benar-benar penting
adakah anda ingat jenis data bagi argv?
>> Ia menyimpan tali, bukan?
Tetapi ia kelihatan seperti 1024 adalah satu nilai integer.
Ini adalah benar-benar penting perbezaan, dan sebenarnya
akan menjadi sesuatu yang anda mungkin hadapi dalam masalah kemudian.
Segala-galanya dalam argv adalah disimpan sebagai rentetan.
Jadi kandungan argv seseorang adalah rentetan satu, sifar, dua, empat,
yang terdiri dari orang-orang empat huruf.
Ia seolah-olah pengguna ditaip satu, sifar, dua, empat
huruf individu atau watak.
Ia bukan integer 1024, dan supaya anda tidak boleh terus
bekerja dengannya dengan mengatakan int 1000, atau agak int x sama satu argv tolak 24.
>> Intuitif, anda mungkin berfikir bahawa sebagai, OK, baik itu 1024 tolak 24,
jadi x sama dengan 1,000.
Tetapi yang sebenarnya, itu bukan kes itu, kerana salah argv adalah rentetan.
Rentetan 1024.
Sekarang terdapat fungsi yang boleh menjadi digunakan untuk menukar rentetan kepada integer.
Saya tidak akan merosakkan untuk anda sekarang, tetapi saya pasti Zamyla
akan gembira untuk memberitahu anda mengenainya dalam yang Walkthrough bagi masalah masa depan.
Tetapi anda juga boleh mencari masalah like-- alasan
saya, fungsi yang akan melakukan ini dalam rujukan 50,
jika anda pergi ke panduan yang anda boleh mencari fungsi yang
akan membuat penukaran ini untuk anda.
Tetapi sekali lagi, dalam Walkthrough bagi masalah masa depan,
Zamyla akan dengan senang hati memberitahu anda apa fungsi
sahaja yang akan menukar rentetan 1024 kepada integer 1024.
>> Baiklah, jadi beralih.
Kami telah dilindungi sifar argv kami, kami telah dilindungi argv satu.
Apa yang ada dalam argv dua?
CS50.
Salah satu yang mungkin yang cukup jelas dengan sendirinya.
Apa yang ada dalam argv tiga?
Baik lagi, kita tidak benar-benar tahu, bukan?
Kami mempunyai pelbagai saiz tiga, itulah bagaimana banyak unsur pengguna
ditaip di baris perintah, jadi jika kita pergi ke argv tiga,
kami kini melampaui batas-batas pelbagai kami.
Pengkompil akan membiarkan kita melakukan ini, tidak ada masalah intuitif dengan itu,
tetapi dari segi sebenarnya apa yang berlaku berlaku, kita tidak tahu.
Ia bergantung kepada apa yang terletak di memori di mana
argv tiga dijangkakan menjadi.
Dan dengan itu kita boleh berakhir semakin terlepas begitu percuma.
Lebih mungkin daripada tidak, terutamanya apabila anda bekerja dengan argv berbanding
kepada mana-mana lokasi lain yang dalam program kami,
kita mungkin akan mengalami kesalahan segmentasi. Jadi sekali lagi,
pastikan anda tidak melampaui batas array anda, terutamanya argv,
memandangkan tahap yang tinggi daripada kepentingan dalam program-program anda.
>> Saya Doug Lloyd.
Ini adalah CS50.