Portál AbcLinuxu, 6. listopadu 2025 02:46
./program -p arg1 arg2 arg3Na 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?
./program -p arg1 -p arg2 -p arg3./program -p arg1 -r arg2 -s arg3./program arg1 arg2 arg3
if(argc == 4){
//ok
char* p1 = argv[1];
char* p2 = argv[2];
char* p3 = argv[3];
}else{
…
./program -p arg1 arg2 arg3
./program -p "arg1;arg2;arg3"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
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.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.