Frage zur main-Methode



  • Wie in Java werden in der main-Methode ja Argumente übergeben. In Java sieht das Ganze so aus:

    public static void main(String[] arguments)
    {
        //Bla
    }
    

    Laut meinem C-Buch macht man es in C so:

    int main(int argc, char *argv[])
    {
        /* ... */
    }
    

    Das argc der Argumenten-Counter ist, weiß ich; aber wofür ein Char-Pointer auf einen Array? Warum keinen direkten Array wie in Java? Wozu braucht man denn hier call-by-reference, man will doch die Argumenten nicht verändern, somit wäre eine Kopie doch vollkommen okay...

    Jedenfalls wird so steht es auch im Buch - ganz normal auf die Elemente zugegriffen:

    printf("Arg 1: %S", argv[0]);
    

    Aber warum schreibt man jetzt nicht

    printf("Arg 1: %S", *argv[0]);
    

    ?
    Man will doch auf den Wert von argv[0] zugreifen und nicht auf die Adresse (man kann ja statt "&argv[0] beim Adressoperator nur argv schreiben)?
    Das verwirrt mich total. 😞



  • Gast#17 schrieb:

    wofür ein Char-Pointer auf einen Array?

    Es ist vielleicht eher ein Array von char pointers.



  • in argv[1] bis argv[n] sind die Startparameter



  • argc = argument count, Anzahl der Argumente. argv[0] ist immer der Programmname
    argv[] = argument vectors, Stringarray mit argc Elementen.



  • general bacardi schrieb:

    in argv[1] bis argv[n] sind die Startparameter

    Stimmt, argv[0] ist ja der Programmname itself.

    Aber ihr habt mir meine Frage immer noch nicht wirklich beantwortet: Warum setzt man hier einen Pointer ein und keinen normalen Array? Also so:
    int main(int argc, char argv[])
    {
    /* ... */
    }



  • Gast#17 schrieb:

    Aber ihr habt mir meine Frage immer noch nicht wirklich beantwortet: Warum setzt man hier einen Pointer ein und keinen normalen Array? Also so:
    int main(int argc, char argv[])
    {
    /* ... */
    }

    Das wäre dann eher ein Array von einzelnen Zeichen (char). Du musst verstehen, dass es in C keinen richtigen String-Typ gibt, wie du ihn wohl aus Java kennst. In C sind Strings einfach nur char-Arrays, was die Anwendung ein wenig anders gestaltet. Ein 'Array of Strings' muss also mit einem Array of arrays of char abgebildet werden...



  • Gast#17 schrieb:

    general bacardi schrieb:

    in argv[1] bis argv[n] sind die Startparameter

    Stimmt, argv[0] ist ja der Programmname itself.

    Das ist oft so, aber muss nicht seon. Das istnicht fetsgelegt



  • general bacardi schrieb:

    Das ist oft so, aber muss nicht seon. Das istnicht fetsgelegt

    Nimmst du am Wettbewerb "wieviele Vertipper kriege ich in eine Zeile" teil? 😃 😉



  • Gehört ihr eigentlich zu den Menschen, die anhand von argv[0] über den Programmablauf entscheiden?



  • Gast#17 schrieb:

    Warum setzt man hier einen Pointer ein und keinen normalen Array? Also so:
    int main(int argc, char argv[])
    {
    /* ... */
    }

    machbar wäre es, mit einem definierten parameter-trennzeichen, es wurde halt von irgendwem so festgelegt.


Anmelden zum Antworten