Portál AbcLinuxu, 12. května 2025 06:33

Dotaz: C getopt, vice argumentu

24.3.2012 15:45 Kamil Mikulcik
C getopt, vice argumentu
Přečteno: 538×
Odpovědět | Admin
Ahoj, do meho programu v C bych potreboval predavat pres jeden parametr celkem 3 argumenty nasledovne:
./program -p arg1 arg2 arg3
Na parsovani parametru/argumentu pouzivam getopt takto:
string arguments 

while ((c = getopt (argc, argv, "p:")) != -1)
        switch (c)
        {
           case 'p':
                arguments = optarg;
                break;
        }
Do promenne arguments se mi vsak ulozi pouze prvni argument (arg1). Jakym zpusobem se mohu dostat k tem zbylym dvema?
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

24.3.2012 16:07 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C getopt, vice argumentu
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pokud jsou to stejné vstupy, volejte to jako:
./program -p arg1 -p arg2 -p arg3
Pokud ovšem je každý jiný tak přidejte písmenka
getopt (argc, argv, "p:r:s:")
./program -p arg1 -r arg2 -s arg3
Pokud jsou to jen tři paramtery a jsou povinné a nikdy(to je důležité) jich nebude jiný počet, kašlete na getopt.
./program arg1 arg2 arg3
if(argc == 4){
  //ok
  char* p1 = argv[1];
  char* p2 = argv[2];
  char* p3 = argv[3];
}else{
…
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
24.3.2012 16:34 Kamil Mikulcik
Rozbalit Rozbalit vše Re: C getopt, vice argumentu
Dekuji za reakci, ale ani jedna z tech variant mi nevyhovuje, opravdu je nutne typarametry predavat jako
./program -p arg1 arg2 arg3
24.3.2012 17:09 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: C getopt, vice argumentu
A nechcete říct víc?
V tom případě, dle mého, máte smůlu a musíte sám si sám…
./program -p "arg1;arg2;arg3"
A v tomto případě si optarg rozdělit na středníku, pokud trváte na getopt a tom původním vstupu, budete muset znásilňovat a zasahovat do proměnných
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
24.3.2012 17:10 Marek
Rozbalit Rozbalit vše Re: C getopt, vice argumentu

Podla mna je to "nezmysel", resp. nieco, co ide proti filozofii prepinacov v OS, a hlavne, kniznici getopt.

-p arg moze byt len jeden, ostatne hodnoty su mimo prepinaca -p.

Takze bud si napisete vlastny parser, za -p ocakavam 3 argumenty (ako vam uz bolo naznacene), alebo budete program volat v tvare -p "arg1 arg2 arg3", cim pomocou getopt dostanete retazec "arg1 arg2 arg3", ktory si vnutorne rozparsujete na pozadovane hodnoty. Dalsie sposoby: oddelovac argumentov nie je medzera, ale iny znak, napr. ciarka, potom program volate v tvare -p arg1,arg2,arg3 (bez medzier medzi , a argumentami). Opat sa nevyhnete vnutornemu parsingu.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.