[Powered by Google Translate] [Command-Line argumento]
[Christopher Bartholomew - Harvard University]
[Ito ay CS50 - CS50.TV]
Ang isang kapaki-pakinabang na tampok para sa isang programa upang tanggapin ang pag-input ng user.
Kaya ngayon, ginalugad namin na ang ilang mga function sa loob ng CS50 library
tanggapin ang input ng user, tulad ng "makakuha ng mga string,"
na prompt ng user, habang tumatakbo ang application, para sa isang string.
>> Subalit, may mga kaso kung saan nais mong ibigay ang iyong input sa programa
bago aktwal na ito ay tumatakbo.
Sa ganitong paraan, hindi mo na kailangan upang humingi ng karagdagang impormasyon mula sa iyong user
habang execute ang isang simpleng gawain.
Dalhin, halimbawa, ang mv o ilipat ang utos sa UNIX.
Ang utos na ito ay nagbibigay-daan sa user na ilipat ang isang file mula sa isang lokasyon sa isa pang.
Ayon sa manu-manong mga pahina, mv tumatanggap dalawang argumento sa linya ng command na:
ang file na inilipat at ang lokasyon ng file ay inilipat sa.
Kaya halimbawa na ito ay isang command na may dalawang argumento.
Kaya paano namin sabihin sa aming programa sa C upang gamitin ang mga command-line argumento?
>> Well, lumiliko na ang pangunahing, na ginagamit namin sa lahat ng mga programa C, ay isang lihim.
Pangunahing tumatanggap ng dalawang mga parameter: argc at argv.
Natin pumunta sa mga tuntuning ito.
>> Ang unang parameter, argc, na nakatayo para sa argumento count,
may data uri ng integer.
Ang argc parameter naglalaman ang bilang ng mga argumento, kabilang ang command.
Sa aming ilipat utos, bagaman lamang namin dalawang argumento ipinapakita,
argc ang halaga ay 3.
Ang pangalawang parameter, argv, na nakatayo para sa argumento vector,
ay isang hanay ng magpasinda payo na tumuturo sa string.
>> Nangangahulugan ito na ang bawat elemento sa argv, simula sa zero,
naglalaman ng mga utos at mga argumento.
Halimbawa, argv [0], na kukunin ko na mag-refer sa bilang argv zero,
ay palaging naglalaman ng command na patakbuhin ang -
sa kasong ito, mv.
argv [1] ay naglalaman ng unang argument, file.txt,
at argv [2] ay naglalaman ng pangalawang argumento, ~ / cs50 /.
Ang huling argumento ng argv ay palaging null.
Kaya sabihin ipatupad ang mga command-line argumento.
Sa nakaraang pagsasanay, inilagay namin walang bisa, na nangangahulugang walang, bilang pangunahing ng parameter.
Gayunpaman, upang para sa amin upang gamitin ang command-line na mga argumento,
kailangan namin upang alisin ang walang silbi at lugar sa loob ng pangunahing int argc, magpasinda * argv [].
Ngayon, upang ma-access ang buong elemento mula sa argv, na ang iyong mga argumento,
Maaari mo lamang umulit, o loop, sa pamamagitan ng array tulad nito.
Kaya, sa loob ng pangunahing ng katawan, kami ay pagpunta sa magpatuloy at i-type ang isang para sa loop:
para sa (int i = 0; i <argc; i + +).
>> Hindi namin kailangan ng kulot suhay dito dahil lamang namin execute ng isang linya ng code
sa loob ng katawan ng loop na ito.
Susubukan naming magpatuloy at pindutin ang tab sabay-sabay,
pagkatapos i-type printf ("argv [% d], upang kumatawan ng isang integer value,
ay% s, para sa string, pagkatapos ay ang bagong linya ng character.
Pagkatapos namin magbigay printf i para sa kasalukuyang pag-ulit ng loop
at argv [i] para sa string na representasyon ng kasalukuyang argumento sa command-line.
Kapag namin patakbuhin ang mga ito sa dalawang argumento, makikita namin makita ang mga argumento na ipinapakita sa terminal.
Mas maaga sinabi namin na ang argv gaganapin isang array ng pansamantalang trabaho pointer.
>> Kaya, kung ito ang kaso, kung paano namin pagkatapos-access ang mga indibidwal na mga character sa bawat argumento?
Halimbawa, ano kung gusto ko upang tumingin para sa isang tiyak na character sa unang argumento?
Well, ang sagot ay na kailangan namin mag-apply ng isang nested loop
na umulit sa pamamagitan ng bawat isa ng ang mga elemento sa string ng argumento.
Ito ay kung paano ito gawin.
>> Una, kami ay pagpunta sa gumawa ng isang kopya ng example2.c.
Pagkatapos, sa loob ng unang para sa loop,
kami ay pagpunta upang magdagdag ng karagdagang para sa loop.
Kaya para sa (int j = 0, n = strlen (argv [i]),
na pagkatapos ay nagbibigay sa amin ang haba ng kasalukuyang argument,
; J <n; j + +)
Kami ay pagpunta sa i-print ang lokasyon ng bawat karakter
sa loob ng kasalukuyang argumento sa pamamagitan ng paggamit ng printf.
Kaya, printf ("argv [% d], upang kumatawan sa index ng kasalukuyang argument,
[% d] muli, upang kumatawan sa kasalukuyang katangian ng ang kasalukuyang argumento,
ay:% c, para sa kasalukuyang character sa argumento.
Panghuli, nagbibigay kami printf gamit ang index ng panlabas na loop, i,
index ng panloob na loop.
>> At ang aming huling argumento sa printf ay ang aktwal na character mula sa argumento na ibinigay
sa linya ng command.
Ngayon, dahil ginamit ko ang string function na strlen upang makuha ang haba ng isang string,
Kailangan ko rin idagdag ang string.h library sa tuktok ng aming mga kasama ang.
Kaya, upang gawin iyon, makikita namin pumunta up, at lamang sa ilalim ng stdio.h, kami ay pagpunta sa gawin
# Include .
>> Kaya, sabihin makatipon at patakbuhin at ibigay ito sa isang aktwal na argumento.
>> At, bilang maaari naming makita, na namin ngayon ay ang eksaktong lokasyon ng bawat indibidwal na magpasinda sa argumento.
Kaya na ito. Ako Christopher Bartholomew, ito ay CS50.
[CS50.TV]