runde Klammern als Kommandozeilenparameter



  • Hallo,

    ich habe eine Programm zur Syntaxanalyse geschrieben. Der String der untersucht werden soll, soll als Parameter in der Konsole eingegeben werden. Mein Problem ist jetzt, dass der Syntax es vorschreibt, dass der String mit einer runden Klammer beginnt, was aber unter Linux und Windows zu Fehlern führt.
    Als Bsp. gebe ich ein (2+a). In argv[1] steht aber nur 2+a. Wie kann ich das umgehen?



  • Evtl in Hochkommata einschließen?



  • mad1Z schrieb:

    Hallo,

    ich habe eine Programm zur Syntaxanalyse geschrieben. Der String der untersucht werden soll, soll als Parameter in der Konsole eingegeben werden. Mein Problem ist jetzt, dass der Syntax es vorschreibt, dass der String mit einer runden Klammer beginnt, was aber unter Linux und Windows zu Fehlern führt.
    Als Bsp. gebe ich ein (2+a). In argv[1] steht aber nur 2+a. Wie kann ich das umgehen?

    Du machst vermutlich irgendentwas falsch. Eigentlich geht das problemlos:

    #include <iostream>
    
    int main(int argc, char** argv)
    {
        for(int count = 1; argc > 1 && count != argc; ++count)
        {
            std::cout << argv[count] << std::endl;
        }
    }
    
    test.exe (aaa) (a,b) (acb)
    
    Ausgabe:
    (aaa)
    (a,b)
    (acb)
    


  • Tachyon schrieb:

    Du machst vermutlich irgendentwas falsch. Eigentlich geht das problemlos:

    Kommt auf die shell drauf an, aus der das aufgerufen wird. Einige könnten die Klammern durchaus "irgendwie" ersetzen...



  • pumuckl schrieb:

    Tachyon schrieb:

    Du machst vermutlich irgendentwas falsch. Eigentlich geht das problemlos:

    Kommt auf die shell drauf an, aus der das aufgerufen wird. Einige könnten die Klammern durchaus "irgendwie" ersetzen...

    Mit den unter Windows und Linux üblichen "Standardshells" geht es aber.


  • Mod

    Tachyon schrieb:

    Mit den unter Windows und Linux üblichen "Standardshells" geht es aber.

    Nö. Bash (und standardmäßiger geht's wohl nicht) sieht das als einen fehlerhaften Funktionsaufruf an. Muss man escapen oder quoten.



  • Es geht durchaus standardmäßiger als Bash: Der POSIX-Standard definiert eine Shell-Sprache. Mit der ginge das allerdings auch nicht, und dementsprechend geht das nicht nur mit den üblichen Standardshells nicht; du wirst überhaupt Probleme haben, unter irgendeinem UNIX irgendeine Shell zu finden, die sich darüber nicht beschwert.

    Schreib ein Paar Apostrophe um den Ausdruck, dann geht es.



  • SeppJ schrieb:

    Tachyon schrieb:

    Mit den unter Windows und Linux üblichen "Standardshells" geht es aber.

    Nö. Bash (und standardmäßiger geht's wohl nicht) sieht das als einen fehlerhaften Funktionsaufruf an. Muss man escapen oder quoten.

    Da hast Du recht.


Log in to reply