[Powered by Google Translate] [Komando-Linio Argumentoj]
[Christopher Bartolomé - Universitato Harvard]
[Jen CS50 - CS50.TV]
Utila trajto por programo estas akcepti uzanto enigo.
Tiel nun, ni esploris iuj funkcioj ene de la CS50 biblioteko
akcepti uzanto enigo, ekzemple "get kordoj,"
kiu pelas la uzanto, dum la apliko kuras, por linio.
>> Tamen, estas kazoj kie vi volas provizi vian programon enigo
antaŭ ol ĝi estas efektive kurante.
Tiel vi ne devas demandi pliajn informojn de via uzanto
dum ekzekuti simpla tasko.
Prenu, ekzemple, la mv aŭ movado komandon en Unikso.
Tiu komando ebligas al la uzanto movas dosiero de unu loko al alia.
Laŭ la manlibro paĝoj, mv akceptas du komandlinio argumentoj:
la dosieron kiu estas movita kaj la situo de la dosiero estas kopiita por.
Do tiu ekzemplo havas komandon kun du argumentojn.
Nu do kiel ni diru nia C programon por uzi ĉi tiuj komand-linio argumentoj?
>> Nu, tio rezultas ke ĉefaj, kiuj ni uzas en ĉiuj C programoj, havas sekreton.
Ĉefa akceptas du parametrojn: argc kaj argv.
Ni iru sur tiuj terminoj.
>> La unua parametro, argc, kiu staras por argumento grafo,
havas datumtipo de entjero.
La argc parametro enhavas la nombro de argumentoj, kiel la komando.
En nia movado komando, kvankam ni nur du argumentojn montrata,
argc valoro estos 3.
La dua parametro, argv, kiu staras por argumento vektoro,
estas tabelo de char punteros ke indikas kordoj.
>> Tio signifas, ke ĉiu elemento en argv, ekde nulo,
enhavas la komando kaj argumentoj.
Ekzemple, argv [0], kiu mi aludas al kiel argv nulo,
ĉiam enhavi la komando kiu estas kuri -
en ĉi tiu kazo, mv.
argv [1] enhavos la unua argumento, file.txt,
kaj argv [2] enhavos la dua argumento, ~ / cs50 /.
La lasta argumento de argv ĉiam estos nula.
Do ni apliki tiujn komand-linio argumentoj.
En antaŭaj ekzercoj, ni metis malplena, signifanta nenion, kiel ĉefa La parametro.
Tamen, por ke ni uzu komand-linio argumentoj,
ni bezonas forigi malplena kaj loko ene de ĉefa int argc, char * argv [].
Nun, por aliri la tutan elementon de argv, kiuj estas via argumentoj,
vi povas simple persisti, aŭ ciklo, tra la tabelo kiel ĉi tio.
Do, ene de ĉefaj la korpo, ni iras al antaŭeniri kaj tajpu a por buklo:
por (_int_ i = 0; i <argc; i + +).
>> Ni ne bezonas frizita streĉa tie ĉar ni nur ekzekuti unu linio de kodo
ene de la korpo de ĉi ciklo.
Ni iru antaŭen kaj batis langeto fojo,
tiam tajpi printf ("argv [% d], por reprezenti entjero valoro,
estas% s, por kordoj, tiam la nova linio karaktero.
Tiam ni ofertas printf i por la aktuala ripeto de la ciklo
kaj argv [i] por la kordo reprezento de la nuna komand-linio argumento.
Kiam ni ruli ĝin kun du argumentoj, ni vidos la argumentoj esti montrata en la terminalo.
Antaŭe ni diris ke la argv tenis serion de char punteros.
>> Do, se ĉi tiu estas la kazo, kiel ni tiam aliro individua karakteroj en ĉiu argumento?
Ekzemple, kio se mi volis serĉi specifan karakteron en la unua argumento?
Nu, la respondo estas, ke ni bezonas apliki anidadas buklo
ke estos tiam persisti tra ĉiu el la elementoj en la argumento kordoj.
Jen kiel vi faru.
>> Unue, ni tuj faros kopion de example2.c.
Tiam, ene de la unua por ciklo,
nin tuj aldoni plia por buklo.
Do por (_int_ j = 0, n = strlen (argv [i]),
kiuj tiam donas al ni la longo de la nuna diskuto,
; J <n; j + +)
Ni tuj presi la situon de ĉiu karaktero
ene de la nuna argumento uzante printf.
Do, printf ("argv [% d], por reprezenti la indekso de la nuna diskuto,
tiam [% d] denove, por reprezenti la nuna karaktero de la nuna diskuto,
estas:% c, por la nuna karaktero en la argumento.
Fine, ni ofertas printf kun la indico de la ekstera iteracio, i,
tiam la indekso de la interna ciklo.
>> Kaj nia lasta argumento por printf estas la efektiva karaktero de la argumento provizita
ĉe la komandlinio.
Nun, ĉar mi uzis la kordo funkcio strlen akiri la longo de kordoj,
Mi devas aldoni ankaŭ la string.h biblioteko sur la supron de nia inkluzivas.
Do, por fari tion, ni iru, kaj ĝuste sub stdio.h, ni faros
# Include .
>> Do, ni kompilos kaj kuras kaj havigi ĝin reala argumento.
>> Kaj, kiel ni povas vidi, ni nun havas la ĝustan lokon de ĉiu individuo char en la argumento.
Do jen ĝi. Mi Christopher Bartolomeo, ĉi tiu estas CS50.
[CS50.TV]