[Powered by Google Translate] [Kommandolinjeargumenter]
[Christopher Bartholomew - Harvard University]
[Dette er CS50 - CS50.TV]
En nyttig funktion for et program er at acceptere brugerinput.
Indtil videre har vi undersøgt nogle funktioner inden for CS50 biblioteket
at acceptere brugerinput, såsom "få strengen"
som beder brugeren, mens programmet kører, efter en streng.
>> Men der er tilfælde, hvor du ønsker at give dit program input
før det rent faktisk kører.
På denne måde behøver du ikke at spørge yderligere oplysninger fra din bruger
under udførelse af en enkel opgave.
Tag for eksempel mv eller flytte kommandoen i UNIX.
Denne kommando gør det muligt at flytte en fil fra et sted til et andet.
Ifølge de manualsider, accepterer mv to kommandolinjeargumenter:
den fil, der flyttes, og placeringen af ​​filen bliver flyttet til.
Så dette eksempel har en kommando med to argumenter.
Så hvordan kan vi fortælle vores C-program til at udnytte disse kommandolinjeargumenter?
>> Tja, det viser sig, at main, som vi bruger i alle C-programmer, har en hemmelighed.
Main accepterer to parametre: argc og argv.
Lad os gå over disse vilkår.
>> Den første parameter, argc, der står for argument tæller,
har en datatype heltal.
Den argc parameter indeholder antallet af argumenter, herunder kommando.
I vores flytte kommandoen, selvom vi kun har to argumenter vist
argc værdi vil være 3.
Den anden parameter, argv, der står for argument vektor,
er en vifte af char pegepinde, der peger på strenge.
>> Dette betyder, at hvert element i argv, fra nul,
indeholder kommandoen og argumenter.
For eksempel, argv [0], som jeg vil henvise til som argv nul,
vil altid indeholde kommandoen der køres -
i dette tilfælde. mv
argv [1] vil indeholde det første argument, file.txt,
og argv [2] vil indeholde det andet argument, ~ / CS50 /.
Den sidste argument argv vil altid være null.
Så lad os gennemføre disse kommandolinjeargumenter.
I tidligere øvelser, placeret vi ugyldig, betyder ingenting, som vigtigste er parameter.
Men for for os at bruge kommandolinje-argumenter,
vi nødt til at fjerne ugyldige og sted inde i main int argc, char * argv [].
Nu, at få adgang til hele elementet fra argv, som er dine argumenter,
kan du blot gentage, eller loop gennem arrayet som denne.
Så inde i hoved krop, vil vi gå videre og skriv en for-løkke:
for (int i = 0; i <argc, i + +).
>> Vi har ikke brug for en klammeparentes her, fordi vi kun udføre én linje kode
inden i legemet af denne sløjfe.
Vi vil gå videre og ramte fanen én gang,
derefter skrive printf ("argv [% d], til at repræsentere et heltal værdi,
er% s, for streng, så den nye linje karakter.
Så vi giver printf i for den aktuelle iteration af løkken
og argv [i] efter strengen repræsentation af den aktuelle kommando-line argument.
Når vi kører den med to argumenter, vil vi se de argumenter, der vises i terminalen.
Tidligere sagde vi, at argv holdt en række char pointers.
>> Så hvis dette er tilfældet, hvordan kan vi så få adgang til enkelte tegn i hvert argument?
For eksempel, hvad hvis jeg ønskede at lede efter et bestemt tegn i den første argument
Tja, svaret er, at vi er nødt til at anvende en indlejret løkke
der vil så gentage gennem hver af elementerne i argumentet strengen.
Dette er, hvordan du gør det.
>> Først vil vi lave en kopi af example2.c.
Derefter indersiden af ​​den første for-løkken,
vi vil tilføje en ekstra for-løkke.
Så for (int j = 0, n = strlen (argv [i]),
som derefter giver os længden af ​​den aktuelle argument,
J <n j + +)
Vi kommer til at udskrive placeringen af ​​hvert tegn
indersiden af ​​den aktuelle argument ved hjælp printf.
Så printf ("argv [% d], til at repræsentere indekset for den aktuelle argument,
derefter [% d] igen for at repræsentere den aktuelle karakter af den nuværende argument,
er:% c, for det aktuelle tegn i argumentet.
Endelig giver vi printf med indekset for den ydre løkke, i,
derefter indekset for den indre sløjfes.
>> Og vores sidste argument til printf er den faktiske tegn fra den argument
på kommandolinjen.
Nu, fordi jeg brugte den streng funktionen strlen at få længden af ​​en streng,
Jeg må også tilføje string.h bibliotek til toppen af ​​vores inkluderer.
Så for at gøre det, vil vi gå op, og lige under stdio.h, vi vil gøre
# Include .
>> Så lad os kompilere og køre og give det et virkeligt argument.
>> Og som vi kan se, har vi nu den nøjagtige placering af hver enkelt char i argumentet.
Så det er det. Jeg er Christopher Bartholomew, det er CS50.
[CS50.TV]