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.