Probleme beim Lesen aus der Commandozeile



  • Hallo!

    Ich habe folgenden Code geschrieben:

    #include <stdio.h>
    
    /* Dieses Programm tut bisher nichts weiter als Argumente aus der Commandozeile einzulesen und wieder auszugeben */
    int main(int argc, char *argv[]) {
        char *x,*y, op;
    
        // 1) Kommandozeile auswerten 
        if (argc != 4) {
           printf("Aufruf: %s <x> <op> <y> \n",argv[0]);
           return 1;
        } else {
          x = argv[1];
          op = argv[2][0];
          y = argv[3];
          printf("%c", x);
          printf("%c", op);
          printf("%c", y);
          getchar();
        }
        return 0;
    
    }
    

    (Ich habe ihn an dieser Stelle vereinfacht, damit ihr euch aufs wesentliche konzentrieren koennt)

    In Zeile 7 werden 4 Argumente erwartet.
    Gebe ich nun in die Kommandozeile "main.exe 2 + 3" ein, funktioniert das Programm einwandfrei. Ebenso bei den Eingaben "2 - 3" und "2 / 3".
    Lediglich bei der Eingabe "main.exe 2 * 3" Bekomme ich die Meldung aus Zeile 8, dass zu wenig Argumente eingegeben wurden.

    Weiss jemand, wieso "*" nicht verarbeitet werden kann?
    Danke, Sassy



  • Versuch doch mal herauszufinden, wieviele (und welche) Kommandoparameter tatsächlich im Programm angekommen sind ( for(i=0;i<argc;++i)printf("%s",argv[i]); ). Ich würde ja spontan vermuten, daß * als Wildcard interpretiert und vom Betriebssystem zu irgenwas anderem erweitert wurde.

    PS: Strings (char*) solltest du lieber mit %s ausgeben als mit %c (letzteres ist für einzelne Zeichen).



  • Also sowohl mit deiner for schleife als auch ohne liest er die korrekten zeichen ein. Ausser bei * eben, das kann er nicht interpretieren.



  • Was liest er denn anstelle des * ein?



  • Er liest nichts ein, er spuckt direkt die Meldung aus, dass er zu wenig Argumente hat.

    Zeile 8: if(argc != 4){
    Zeile 9: printf("Aufruf: %s <x> <op> <y> \n",argv[0]);



  • Dann lass mal die if()-Abfrage weg und gib einfach alle übergebenen Argumente aus.

    (ich weiß selber, daß das nichts mehr mit deinem ursprünglichen Priogramm zu tun hat - aber hier geht es darum, den Fehler einzugrenzen)



  • Ich hab ne Loesung.. und die ist sowas von billig 😉

    Ich geb einfach 'main.exe 4 "*" 2' ein, dann klappts *lol*

    danke fuer die muehe


Anmelden zum Antworten