argc und argv ??
-
guten Abend,
ich habe schwierigkeiten das zu verstehen:
1. if(count%2)
2. int main(int argc, char ** argv)was ist gemeint mit % in der ersten Zeile ?? die argumente von main was haben sie da zu suchen ??
im netz habe ich nichts vernünftiges zu diesen argumenten gefunden.vielen dank
-
1. '%' ist der Module Operator. if(count % 2) heitß "Wenn der Rest der Division von count durch 2 nicht 0 ist, dann ..." speich, "Wenn count ungerade ist ..."
2. Wenn ein Programm externe Information bekommen will (sprich wenn du b.z. das Programm mit Parametern gestartet hast: ./meinprog data1 data2 data3 ...), brauchst du argc und argv.
argc entspricht der Anzahl der angegebene Parameter. Der Aufruf des Programm (im Bsp ./meinprog) ist immer das erste Parameter, d.h. argc ist immer mind. 1.
argv ist ein Array der Größe argc+1. argv[i] ist das i. Parameter des Programms. argv[argc] ist immer NULL.
-
Zu 2: Kommandozeilen-argumente nennt sich das.
aber ist das array nicht argc-1 groß?
(bei argc = 5 ist doch argv[4] das letzte element)
-
manu1984 schrieb:
(bei argc = 5 ist doch argv[4] das letzte element)
argv[argc-1] ist das letzte Element, in dem noch etwas drinsteht. Dahinter steht noch ein mit NULL gefülltes Element.
-
manu1984 schrieb:
(bei argc = 5 ist doch argv[4] das letzte element)
(Offenbar) gängiges Mißverständnis:
Zähl doch mal (am besten an den Fingern), wieviele Elemente argv[0] ... argv[4] sind und vergleiche das Ergebnis mit argc
-
shit. stimmt!!!!
aber wir meinten ja das gleicheaber gut, dass wir gerade den beitrag haben:
so wie oben beschrieben kann ich ja extern diese elemente bekommen.
kann ich mit einem C-programm allerdings auch so eine kommando-zeile bauen?also kurz gesagt:
ich führe ein c-programm mit kommando-zeile aus
und das programm generiert mir dann eine neue kommandozeile.
geht sowas?
-
Du kannst an system(), WinExec() und ähnliche Funktionen theoretisch beliebige Strings übergeben, die vom System als Kommandozeile interpretiert werden (und für das Zielprogramm auch wieder in argc/argv aufgedröselt werden).
-
okay,
also z.b.system("zcat abc.gz > abc");
klappt wunderbar (also wenn ich die 2 dateien abc.gz und abc statisch angebe).
system("zcat %s > %s",argv[1],argv[2]);
mag er nicht. da meckert er rum, zuviele argumente in system()
-
Dann mußt du die Befehlszeile halt erst zusammenbauen (z.B. per sprintf()) und dann an system() übergeben
char cmd[CMD_SIZE]; sprintf(cmd,("zcat %s > %s",argv[1],argv[2]); system(cmd);
-
ach herrje, natürlich!!!!!!
danke!!!!
-
hi
ich hätte jetzt mal ne blöde frage
aber wie ruft man denn ein programm mit parametern auf??
-
Unices:
./program param1 param2 ...
Windows:
program.[exe|com|bat|...] param1 param2 ...
greetz, Swordfish