Funkcia argumenty hlavné c vizuálne štúdio. Argumenty funkcie MAIN().

Voliteľné a pomenované argumenty

Voliteľné argumenty

C# 4.0 predstavuje novú funkciu, ktorá uľahčuje špecifikovanie argumentov pri volaní metódy. Tento prostriedok sa nazýva voliteľné argumenty a umožňuje vám definovať predvolenú hodnotu pre parameter metódy. Táto hodnota sa štandardne použije, ak pri volaní metódy nie je pre parameter zadaný žiadny zodpovedajúci argument. Preto nie je potrebné uvádzať argument pre takýto parameter. Voliteľné argumenty uľahčujú volanie metód, kde sa na niektoré parametre aplikujú predvolené argumenty. Dajú sa použiť aj ako „skratková“ forma preťaženia metódy.

Hlavným impulzom pre pridávanie voliteľných argumentov bola potreba zjednodušiť interakciu s objektmi COM. V niekoľkých objektových modeloch spoločnosti Microsoft (napr. Microsoft Office) funkčnosť je poskytovaná prostredníctvom objektov COM, z ktorých mnohé boli napísané už dávno a sú navrhnuté tak, aby používali voliteľné parametre.

Príklad použitia voliteľných argumentov je uvedený nižšie:

Používanie systému; pomocou System.Collections.Generic; pomocou System.Linq; pomocou System.Text; menný priestor ConsoleApplication1 ( trieda Program ( // Argumenty b a c sú voliteľné pri volaní static int mySum(int a, int b = 5, int c = 10) ( return a + b + c; ) static void Main() ( int sum1 = mySum(3) int sucet2 = mySum(3,12);

Treba mať na pamäti, že všetky voliteľné argumenty musia byť uvedené napravo od požadovaných. Okrem metód možno v konštruktoroch, indexátoroch a delegátoch použiť aj voliteľné argumenty.

Jednou z výhod voliteľných argumentov je, že uľahčujú programátorovi zvládnuť zložité volania metód a konštruktorov. Koniec koncov, často je potrebné špecifikovať viac parametrov v metóde, ako sa zvyčajne vyžaduje. A v takýchto prípadoch môžu byť niektoré z týchto parametrov nastavené ako voliteľné, a to starostlivým používaním voliteľných argumentov. To znamená, že musíte odovzdať len tie argumenty, ktoré sú v danej veci dôležité konkrétny prípad namiesto všetkých argumentov, ktoré by sa inak vyžadovali. Tento prístup vám umožňuje racionalizovať metódu a zjednodušiť programátorovi manipuláciu s ňou.

Pomenované argumenty

Ešte jeden funkčnosť, ktorý bol do C# pridaný s vydaním .NET 4.0, je podpora pre tzv pomenované argumenty. Ako viete, pri odovzdávaní argumentov metóde sa ich poradie spravidla musí zhodovať s poradím, v ktorom sú parametre definované v samotnej metóde. Inými slovami, hodnota argumentu je priradená parametru na základe jeho pozície v zozname argumentov.

Pomenované argumenty sú navrhnuté tak, aby prekonali toto obmedzenie. Pomenovaný argument vám umožňuje zadať názov parametra, ktorému je priradená jeho hodnota. A v tomto prípade už na poradí argumentov nezáleží. Pomenované argumenty sú teda trochu podobné predtým uvedeným inicializátorom objektov, hoci sa od nich líšia svojou syntaxou. Ak chcete zadať argument podľa názvu, použite nasledujúcu formu syntaxe:

názov_parametra: hodnota

Tu názov_parametra označuje názov parametra, ktorému sa odovzdáva hodnota. Samozrejme, parameter_name musí byť názov skutočného parametra pre volanú metódu.

Stáva sa, že údaje sa prenesú do programu z príkazového riadku pri jeho volaní. Takéto údaje sa nazývajú argumenty príkazového riadku. Vyzerá to napríklad takto:

./a.out test.txt ls -lt /home/peter/

Tu sa volajú programy a.out (z aktuálneho adresára) a ls (z rovnakého adresára špecifikovaného v premennej prostredia PATH). Prvý program z príkazového riadku dostane jedno slovo - test.txt, druhý - dve: -lt a /home/peter/.

Ak je program napísaný v jazyku C, potom pri jeho spustení sa riadenie okamžite prenesie do funkcie main(), teda je to funkcia, ktorá prijíma argumenty príkazového riadku, ktoré sú priradené k premenným parametrov.

Predtým sme definovali funkciu main() tak, ako keby nebrala žiadne parametre a nič nevracala. V skutočnosti v jazyku C akákoľvek funkcia štandardne (ak nie je definované nič iné) vracia celé číslo. Môžete si byť tým istý. Ak kód napíšete takto:

main() ( printf ("Ahoj \n"); návrat 0; )

Potom sa počas kompilácie nevyskytne žiadne varovanie ani chyba. To isté sa stane, ak napíšete int main() . To dokazuje, že funkcia štandardne vracia celé číslo a nie nič (void). Hoci to, čo funkcia vracia, môže byť vždy „prepísané“, napríklad voidmain() alebo float main() .

Pri volaní programu z príkazového riadku sa do neho vždy odovzdá nasledujúca dvojica údajov:

  1. celé číslo s uvedením počtu slov (prvkov oddelených medzerami) na príkazovom riadku pri volaní,
  2. ukazovateľ na pole reťazcov, kde každý riadok je samostatné slovo z príkazového riadku.

Majte na pamäti, že sa počíta aj samotný názov programu. Ak hovor vyzerá napríklad takto:

./a.out 12 téma 2

Potom má prvý argument programu hodnotu 4 a pole reťazcov je definované ako (./a.out“, „12“, „téma“, „2“).

Všimnite si terminológiu, existujú len dva argumenty programu (číslo a pole), ale toľko argumentov príkazového riadku, koľko chcete. Argumenty príkazového riadku sú "konvertované" na argumenty programu (na argumenty funkcie main().
Tieto údaje (číslo a ukazovateľ) sú odovzdané programu, aj keď je jednoducho volaný menom bez toho, aby sa mu čokoľvek odovzdalo: ./a.out. V tomto prípade má prvý argument hodnotu 1 a druhý ukazuje na pole pozostávajúce len z jedného riadku (./a.out).

To, že sa do programu prenášajú údaje, neznamená, že ich funkcia main() musí akceptovať. Ak je funkcia main() definovaná bez parametrov, potom nie je možné získať prístup k argumentom príkazového riadka. Hoci vám nič nebráni v ich prenose. Nedôjde k žiadnej chybe.

Ak chcete získať prístup k údajom odovzdaným programu, musia byť priradené k premenným. Keďže argumenty sú okamžite odovzdané do main(), jej hlavička by mala vyzerať takto:
hlavné (int n, znak *arr)

Prvá premenná (n) obsahuje počet slov a druhá premenná obsahuje ukazovateľ na pole reťazcov. Druhý parameter sa často zapisuje ako **arr . Ide však o to isté. Pripomeňme si, že samotné pole reťazcov obsahuje ako prvky ukazovatele na reťazce. A funkcii odovzdáme ukazovateľ na prvý prvok poľa. Ukazuje sa, že odovzdávame ukazovateľ na ukazovateľ, t.j. **arr.

Cvičenie
Napíšte takýto program:

#include int main(int argc, char ** argv) ( int i; printf ("%d \n", argc); pre (i= 0; i< argc; i++ ) puts (argv[ i] ) ; }

Pri volaní zobrazuje počet slov na príkazovom riadku a každé slovo s Nový riadok. Zavolajte to bez argumentov príkazového riadku a s argumentmi.

V programe sme použili premenné parametrov argc a argv. Je zvykom používať tieto mená, ale v skutočnosti to môže byť čokoľvek. Je lepšie sa držať tohto štandardu, aby boli vaše programy zrozumiteľnejšie nielen vám, ale aj ostatným programátorom.

Praktický význam prenosu údajov do programu

Ak máte nejaké skúsenosti s príkazovým riadkom GNU/Linux, viete, že väčšina príkazov má prepínače a argumenty. Napríklad pri prezeraní obsahu adresárov sa ako argumenty zadávajú kopírovanie, presúvanie, objekty systém súborov, na ktorom sa vykoná príkaz. Vlastnosti jeho implementácie sa určujú pomocou kľúčov. Napríklad v tíme

Cp -r ../les_1 ../les_101

cp je názov príkazu, -r je prepínač a ../les_1 a ../les_101 sú argumenty príkazu.

Vo všeobecnosti sa adresy súborov a „modifikátory“ (to sú kľúče) procesu vykonávania programu najčastejšie prenášajú do programov pri ich spustení.

Napíšme program, ktorý otvorí súbory určené používateľom na príkazovom riadku na zápis alebo pridanie a zapíše (pridá) tam rovnaké informácie, ktoré používateľ zadá z klávesnice počas vykonávania programu:

#include #include main (int argc, char ** argv) ( int i, ch; FILE * f[ 5 ] ; if (argc< 3 || argc >7) (ukladá ( "Neplatný počet parametrov"); návrat 1; ) if (strcmp (argv[ 1 ] , "-w" ) != 0 && strcmp (argv[ 1 ], "-a" ) != 0 ) ( vloží ( "Prvý parameter môže byť -w alebo -a"); návrat 2; ) pre (i= 0; i< argc- 2 ; i++ ) { f[ i] = fopen (argv[ i+ 2 ] , argv[ 1 ] + 1 ) ; if (f[ i] == NULL) { printf ("Súbor %s sa nedá otvoriť\n " argv[i+2]); návrat 3; ) ) while ((ch = getchar () ) != EOF) pre (i= 0; i< argc- 2 ; i++ ) putc (ch, f[ i] ) ; for (i= 0 ; i < argc- 2 ; i++ ) fclose (f[ i] ) ; return 0 ; }

Vysvetlenia pre kód:

  1. Vytvorí sa pole piatich ukazovateľov súborov. Preto nemôžete súčasne otvoriť viac ako päť súborov. Ukazovateľ súboru prvého súboru bude uložený v prvku poľa f, druhý - v f atď.
  2. Kontroluje sa počet argumentov príkazového riadku. Mali by byť aspoň tri, pretože... prvý je názov programu, druhý je režim otvárania súboru, tretí je prvý alebo jediný súbor, do ktorého sa má zapisovať. Keďže program umožňuje otvoriť iba päť súborov, celkový počet argumentov príkazového riadku nemôže byť väčší ako sedem. Ak je teda počet argumentov menší ako 3 alebo väčší ako 7, program končí, pretože Príkaz return spôsobí ukončenie funkcie, aj keď je za ním ďalší kód. Hodnotu vrátenú z funkcie, ktorá sa nerovná 0, môže nadradený proces interpretovať ako správu, že program skončil s chybou.
  3. Skontroluje platnosť druhého argumentu príkazového riadka. Ak to nie je ani "-w" ani "-a", potom podmienený výraz v druhom if vráti 1 (pravda). Funkcia strcmp() vám umožňuje porovnávať reťazce a vracia 0, ak sú rovnaké.
  4. IN pre slučku súbory sa otvárajú na zadaných adresách, ktoré začínajú tretím prvkom poľa argv. To je dôvod, prečo sa k i pridá 2, aby sa získali prvky poľa argv, počnúc od tretieho. Výraz argc-2 označuje počet odovzdaných názvov súborov; pretože argc ukladá celkový počet argumentov príkazového riadku, z ktorých prvé dva nie sú názvy súborov.
  5. Výraz argv+1 vám umožňuje „vystrihnúť“ podreťazec „w“ (alebo „a“) ​​z reťazca „-w“ (alebo „-a“), pretože argv je v podstate ukazovateľ na prvý prvok reťazca. Pridaním jedného do ukazovateľa ho presunieme na ďalší prvok poľa.
  6. Ak sa súbor nedá otvoriť, funkcia fopen() vráti hodnotu NULL. V tomto prípade program končí.
  7. Každý znak zadaný používateľom na klávesnici sa zapíše do všetkých otvorených súborov.
  8. Na konci sú súbory uzavreté.

Pri automatickom vytváraní konzolovej aplikácie v programovacom jazyku C++ sa automaticky vytvorí hlavná funkcia veľmi podobná tejto:

int main(int argc, char * argv)
{…}

Hlavička funkcie obsahuje podpis hlavná funkcia main() s argumentmi argс a argv.
Ak spustíte program cez príkazový riadok, potom je možné preniesť niektoré informácie do tohto programu. Na to existujú argumenty príkazového riadku argc a argv.
Parameter argc je typu int a obsahuje počet parametrov odovzdaných hlavnej funkcii. Okrem toho je argc vždy aspoň 1, aj keď sa do hlavnej funkcie neodovzdávajú žiadne informácie, pretože prvým parametrom je názov aplikácie.
Parameter argv je pole ukazovateľov na reťazce. Cez príkazový riadok možno preniesť iba reťazcové údaje.

Pri spustení programu cez príkazový riadok Reťazec systému Windows Môžete jej poskytnúť nejaké informácie. V tomto prípade bude príkazový riadok vyzerať takto:
Jednotka:\cesta\názov.exe argument1 argument2 ...

Argumenty príkazového riadka sú oddelené jednou alebo viacerými medzerami.

Argument argv obsahuje úplný názov aplikácie:

#include
pomocou menného priestoru std;

cout<< argv << endl;

Návrat 0;
}

Výsledok popravy

Príklad: Výpočet súčinu dvoch celých čísel
Program používa funkciu na konverziu reťazca na celé číslo StrToInt() odtiaľto.

#include
pomocou menného priestoru std;
int StrToInt(char *s) (…)
int main(int argc, char * argv) (

Int a = 0, b = 0;

Ak (argc > 1)

a = StrToInt(argv);

Ak (argc > 2)

b = StrToInt(argv);

cout<< a <<«*» << b << «= « << a*b << endl;

Návrat 0;
}

Program sa spúšťa nasledovne:

Výsledok popravy

Ladenie programu pomocou argumentov príkazového riadku

Ak chcete odovzdať argumenty príkazového riadka pri ladení programu, musíte vstúpiť do ponuky Vlastnosti projektu.


Na karte Vlastnosti konfigurácie -> Ladenie vybrať Príkazové argumenty a nastaviť ich hodnoty.

Pri spustení programu v režime ladenia bude program zaobchádzať so zadanými argumentmi ako s argumentmi príkazového riadka.


Niekedy je užitočné pri spustení programu odovzdať mu nejaké informácie. Zvyčajne sa tieto informácie odovzdávajú do main() prostredníctvom argumentov príkazového riadku. Argument príkazového riadku je informácia, ktorá sa zadáva do príkazového riadka operačného systému za názvom programu. Napríklad, ak chcete začať kompilovať program, musíte do príkazového riadka po výzve napísať niečo ako nasledovné:

Kópia názov_programu

názov_programu je argument príkazového riadku, ktorý určuje názov programu, ktorý sa chystáte skompilovať.

Na prijatie argumentov príkazového riadka sa používajú dva špeciálne vstavané argumenty: argc a argv. Parameter argc obsahuje počet argumentov príkazového riadku a je to celé číslo a vždy je aspoň 1, pretože prvý argument je názov programu. A parameter argv je ukazovateľ na pole ukazovateľov na reťazce. V tomto poli každý prvok ukazuje na argument príkazového riadka. Všetky argumenty príkazového riadku sú reťazce, takže prevod akýchkoľvek čísel do požadovaného binárneho formátu musí byť poskytnutý v programe pri jeho vývoji.

Tu je jednoduchý príklad použitia argumentu príkazového riadka. Na obrazovke sa zobrazí slovo Ahoj a vaše meno, ktoré musíte zadať ako argument príkazového riadka.

#include #include int main(int argc, char *argv) ( if(argc!=2) ( printf("Zabudli ste zadať svoje meno.\n"); exit(1); ) printf("Ahoj %s", argv) návrat 0;

Ak ste tento program nazvali názvom (meno) a vaše meno je Tom, potom na spustenie programu by ste mali do príkazového riadku zadať meno Tom. V dôsledku spustenia programu sa na obrazovke objaví správa Ahoj, Tom.

V mnohých prostrediach musia byť všetky argumenty príkazového riadka oddelené medzerou alebo tabulátorom. Čiarky, bodkočiarky a podobné znaky sa nepovažujú za oddeľovače. Napríklad,

Bež Spot, bež

pozostáva z troch reťazcov znakov, zatiaľ čo

Eric, Rick, Fred

predstavuje jeden reťazec znakov - čiarky sa spravidla nepovažujú za oddeľovače.

Ak reťazec obsahuje medzery, v niektorých prostrediach môžete reťazec uzavrieť do dvojitých úvodzoviek, aby ste zabránili vytváraniu viacerých argumentov. Výsledkom je, že celý reťazec sa bude považovať za jeden argument. Ak sa chcete dozvedieť viac o tom, ako váš operačný systém určuje parametre príkazového riadka, pozrite si dokumentáciu vášho operačného systému.

Je veľmi dôležité správne deklarovať argv. Najčastejšie sa to robí takto:

Char *argv;

Prázdne hranaté zátvorky označujú, že pole má neurčitú dĺžku. Jednotlivé argumenty sú teraz prístupné indexovaním poľa argv. Napríklad argv ukazuje na prvý znakový reťazec, ktorý je vždy názvom programu; argv poukazuje na prvý argument a tak ďalej.

Ďalším malým príkladom použitia argumentov príkazového riadku je nasledujúci program, odpočítavanie. Tento program počíta spätne, počnúc od nejakej hodnoty (špecifikovanej na príkazovom riadku) a pípne, keď dosiahne 0. Všimnite si, že prvý argument, ktorý obsahuje počiatočnú hodnotu, je konvertovaný na celočíselné hodnoty pomocou štandardnej funkcie atoi (). Ak je druhý argument príkazového riadka (a ak za argument považujeme názov programu, potom tretí) je riadok „zobrazenie“ (zobrazenie), na obrazovke sa zobrazí výsledok počítania (v opačnom poradí).

/* Program počítania v opačnom poradí. */ #include #include #include #include int main(int argc, char *argv) ( int disp, count; if(argc<2) { printf("В командной строке необходимо ввести число, с которого\n"); printf("начинается отсчет. Попробуйте снова.\n"); exit(1); } if(argc==3 && !strcmp(argv, "display")) disp = 1; else disp = 0; for(count=atoi(argv); count; --count) if(disp) printf("%d\n", count); putchar("\a"); /* здесь подается звуковой сигнал */ printf("Счет закончен"); return 0; }

Upozorňujeme, že ak nie sú zadané argumenty príkazového riadka, zobrazí sa chybové hlásenie. Programy, ktoré používajú argumenty príkazového riadka, často robia nasledovné: Keď používateľ spustí tieto programy bez zadania požadovaných informácií, zobrazia sa pokyny, ako správne zadať argumenty.

Ak chcete získať prístup k jednotlivému znaku jedného z argumentov príkazového riadka, zadajte druhý index do argv. Napríklad nasledujúci program vypíše znak po znaku všetky argumenty, s ktorými bol volaný:

#include int main(int argc, char *argv) ( int t, i; for(t=0; t

Pamätajte, že prvý index argv poskytuje prístup k reťazcu a druhý index poskytuje prístup k jeho jednotlivým znakom.

Typicky sa argc a argv používajú na zadanie počiatočných príkazov programu, ktoré bude potrebovať pri spustení. Napríklad argumenty príkazového riadka často určujú informácie, ako je názov súboru, možnosť alebo alternatívne správanie. Použitie argumentov príkazového riadku dáva vášmu programu "profesionálny vzhľad" a uľahčuje jeho používanie v dávkových súboroch.

Názvy argc a argv sú tradičné, ale nevyžadujú sa. Tieto dva parametre vo funkcii main() môžete volať, ako chcete. Navyše, niektoré kompilátory môžu podporovať ďalšie argumenty pre main(), takže si nezabudnite skontrolovať dokumentáciu kompilátora.

Keď program nevyžaduje parametre príkazového riadka, je najbežnejšie explicitne deklarovať funkciu main() ako bez parametrov. V tomto prípade sa kľúčové slovo void použije v zozname parametrov tejto funkcie.

Borland C++ podporuje tri argumenty pre main(). Prvé dva sú tradičné argc a argv. Toto sú jediné argumenty pre main() definované štandardom ANSI C. Umožňujú odovzdanie argumentov príkazového riadka programu. Argumenty príkazového riadka sú informácie, ktoré nasledujú za názvom programu na príkazovom riadku operačného systému. Napríklad, keď je program kompilovaný pomocou riadkového kompilátora Borland, zvyčajne sa zadáva bcc názov_programu

Kde názov_programu je program, ktorý je potrebné skompilovať. Názov programu sa odovzdá kompilátoru ako argument.

Parameter argc obsahuje počet argumentov príkazového riadku a je to celé číslo. Vždy sa rovná aspoň 1, pretože názov programu sa kvalifikuje ako prvý argument. Parameter argv je ukazovateľ na pole ukazovateľov znakov. Každý prvok tohto poľa ukazuje na argument príkazového riadka. Všetky argumenty príkazového riadku sú reťazce. Všetky čísla prevedie program do interného formátu. Nasledujúci program vypíše „Ahoj“, za ktorým nasleduje používateľské meno, keď je napísané priamo za názvom programu:

#include

{
if(argc!=2)
{
printf("Zabudli ste zadať svoje meno\n");
návrat 1;
}
printf("Ahoj %s", argv);
návrat 0;
}

Ak zavoláte tento názov programu a používateľské meno je Sergey, na spustenie programu by ste mali zadať:
meno Sergey.
V dôsledku programu sa zobrazí nasledovné:
"Ahoj Sergey."

Argumenty príkazového riadka musia byť oddelené medzerami alebo tabulátormi. Čiarky, bodkočiarky a podobné znaky sa nepovažujú za oddeľovače. Napríklad:

Pozostáva z troch riadkov, pričom

Herb, Rick, Fred

Toto je jeden riadok – čiarky nie sú oddeľovače.

Ak potrebujete zadať reťazec obsahujúci medzery alebo tabulátory ako jeden argument, musíte ho uzavrieť do dvojitých úvodzoviek. Napríklad toto je jeden argument:

"toto je test"

Je dôležité správne deklarovať argv. Najtypickejšia metóda je:

Prázdne zátvorky označujú, že pole nemá pevnú dĺžku. K jednotlivým prvkom sa dostanete pomocou indexovania argv. Napríklad argv ukazuje na prvý riadok, ktorý vždy obsahuje názov programu. argv ukazuje na ďalší riadok atď.

Nižšie je uvedený malý príklad použitia argumentov príkazového riadku. Odpočítava od hodnoty zadanej na príkazovom riadku a vyšle signál, keď dosiahne nulu. Všimnite si, že prvý argument obsahuje číslo prevedené na celé číslo pomocou štandardnej funkcie atoi(). Ak je reťazec "zobrazenie" prítomný ako druhý argument, potom sa na obrazovke zobrazí samotné počítadlo.

/* program na počítanie */

#include
#include
#include
int main(int argc, char *argv)
{
int disp, počet;
if(argc<2)
{
printf("Musíte zadať dĺžku počítania\n");
printf("na príkazovom riadku. Skúste to znova.\n");
návrat 1;
}
if (argc==3 && !strcmp(argv,"zobrazit")) disp = 1;
inak disp = 0;
for(count=atoi(argv); count; -count)
if (disp) printf("%d ", pocet);
printf("%c", "\a"); /* na väčšine počítačov ide o hovor */
návrat 0;
}

Upozorňujeme, že ak nie sú zadané žiadne argumenty, zobrazí sa chybové hlásenie. Toto je najtypickejšie pre programy, ktoré používajú argumenty príkazového riadka na zadávanie pokynov, ak bol vykonaný pokus o spustenie programu bez správnych informácií.

Ak chcete získať prístup k jednotlivým znakom príkazového riadka, pridajte do argv druhý index. Napríklad nasledujúci program vypíše všetky argumenty, s ktorými bol volaný, jeden znak po druhom:

#include
int main(int argc, char *argv)
{
int t, i;
for(t=0; t {
i = 0;
while(argv[t][i])
{
printf("%c", argv[t][i]);
}
printf(" ");
}
návrat 0;
}

Musíme si uvedomiť, že prvý index slúži na prístup k reťazcu a druhý je na prístup k znaku v reťazci.

Typicky sa argc a argv používajú na získanie zdrojových príkazov. Teoreticky je možné mať až 32 767 argumentov, no väčšina operačných systémov vám ani nedovolí sa k tomu priblížiť. Tieto argumenty sa zvyčajne používajú na určenie názvu súboru alebo možností. Použitie argumentov príkazového riadku dáva programu profesionálny vzhľad a umožňuje použitie programu v dávkových súboroch.

Ak zahrniete súbor WILDARGS.OBJ dodávaný s Borland C++, môžete použiť šablóny v argumentoch typu *.EXE. (Borland C++ automaticky spracováva zástupné znaky a zodpovedajúcim spôsobom zvyšuje argc.) Napríklad, ak pripojíte WILDARGS.OBJ k nasledujúcemu programu, povie vám, koľko súborov zodpovedá názvu súboru zadanému v príkazovom riadku:

/* Prepojte tento program s WILDARGS.OBJ */

#include
int main(int argc, char *argv)
{
register int i;
printf("%d súborov zodpovedá zadanému názvu\n", argc-1);
printf("Sú to: ");
pre (i=1; i printf("%s", argv[i]);
návrat 0;
}

Ak tento program nazveme WA, potom ho spustíme nasledovne, dostaneme počet súborov s príponou EXE a zoznam názvov týchto súborov:

Okrem argc a argv poskytuje Borland C++ aj tretí argument príkazového riadka -env. Parameter env umožňuje programu pristupovať k informáciám o prostredí operačného systému. Parameter env musí nasledovať po argc a argv a je deklarovaný takto:

Ako vidíte, env sa deklaruje rovnakým spôsobom ako argv. Rovnako ako argv, je to ukazovateľ na pole reťazcov. Každý riadok je reťazec prostredia definovaný operačným systémom. Parameter env nemá žiadny ekvivalentný parameter argc, ktorý hovorí, koľko riadkov prostredia existuje. Namiesto toho je posledný riadok prostredia nulový. Nasledujúci program vytlačí všetky reťazce prostredia aktuálne definované v operačnom systéme:

/* tento program zobrazí všetky riadky prostredia */

#include
int main(int argc, char *argv, char *env)
{
int;
for(t=0; env[t]/t++)
printf("%s\n", env[t]);
návrat 0;
}

Upozorňujeme, že hoci argc a argv program nepoužíva, musia byť uvedené v zozname parametrov. C nepozná názvy parametrov. Namiesto toho je ich použitie určené poradím, v ktorom sú parametre deklarované. V skutočnosti môžete parameter nazvať akokoľvek chcete. Keďže argc, argv a env sú tradičné názvy, je najlepšie ich naďalej používať, aby každý, kto číta program, okamžite pochopil, že ide o argumenty funkcie main().

Typickou úlohou programov je vyhľadať hodnotu definovanú v reťazci prostredia. Napríklad obsah riadku PATH umožňuje programom používať vyhľadávacie cesty. Nasledujúci program ukazuje, ako nájsť reťazce, ktoré deklarujú štandardné vyhľadávacie cesty. Používa štandardnú knižničnú funkciu strstr(), ktorá má nasledujúci prototyp:

Char *strstr(const char *str1, const char *str2);

Funkcia strstr() hľadá reťazec, na ktorý ukazuje str1, v reťazci, na ktorý ukazuje str2. Ak sa takýto reťazec nájde, vráti sa ukazovateľ na prvú pozíciu. Ak sa nenájdu žiadne zhody, funkcia vráti hodnotu NULL.

/* program hľadá medzi reťazcami prostredia riadok obsahujúci PATH */

#include
#include
int main (int argc, char *argv, char *env)
{
int;
for(t=0; env[t]; t++)
{
if(strstr(env[t], "PATH"))
printf("%s\n", env[t]);
}
návrat 0;
}



Načítava...
Hore