Komandozeilenargument in Eclipse



  • Hallo, ich versuche gerade in C mit Komandozeilenparametern umzugehen, dabei möchte ich, dass mein Programm drei Funktionen erfüllt.

    Programmstart mit Parameter: msg1 -> Ausgabe Nachricht 1
    Programmstart mit Parameter: msg2 -> Ausgabe Nachricht 2
    Programmstart ohne Parameter: -> Ausgabe Nachricht 3

    Letzteres funktioniert leider nur wenn ich als Parameter eine sinnlose aneinanderreihung von Buchstaben oder Sonderzeichen setze. z.b. msg3.. oder xxx. Lasse ich den Parameter leer, passiert einfach gar nichts, das Consolenfenster in Eclipse bleibt leer. Im Terminalfenster von Ubuntu passiert auch nichts.

    Auch sehr kurios finde ich, dass das ganze zu Anfang 2,3 Mal funktioniert hat.

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    int main(int narg, char *arg[]) {
    
    	// Vergleichskonstanten für Komandozeilenparameter
    	const char vgl1[] = { "msg1" };
    	const char vgl1[] = { "msg2" };
    
    	// Aufruf Nachricht 1
    	if (strcmp(arg[1], vgl1) == 0) {
    		printf("-> Aufruf mit Parameter msg1\n");
    	}
    
    	// Aufruf Nachricht 2
    	else if (strcmp(arg[1], vgl2) == 0) {
    		printf("-> Aufruf mit Parameter msg2\n");
    	}
    	// Aufruf Nachricht 3
    	else {
    		printf("-> Aufruf ohne Parameter\n");
    	}
    
    	return 0;
    }
    

    Für eure Hilfe wäre ich sehr dankbar!



  • Überprüfe anhand des Parameters 'narg' die Anzahl der übergebenen Kommandozeilenparameter:

    if (narg > 0)
    {
      printf("-> Aufruf mit Parameter\n");
    }
    else
    {
      printf("-> Aufruf ohne Parameter\n");
    }
    


  • narg ist zumindest immer größer als 0, da der Programmname in arg[0] steht.

    BTW: die üblichen (historische) Namen sind argc und argv
    ARGument Counter und ARGument Vector
    (falls dir das mal über den Weg läuft)



  • Das hat schon ganz gut geholfen, wichtig ist wohl noch zu erwähnen, dass als 1. Argument bei mir immer der Programmname steht, wodurch ich prüfen muss ob zwei Argumente in narg vorhanden sind.

    if (narg > 1)
    {
      printf("-> Aufruf mit Parameter\n");
    }
    else
    {
      printf("-> Aufruf ohne Parameter\n");
    }
    

    Danke für deine Hilfe!


Anmelden zum Antworten