Mögliche Duplikate:
Was sind die Argumente für main ()?
Was bedeutet int argc, char * argv []?
Jedes Programm beginnt mit der Definition main(int argc, char *argv[])
.
Ich verstehe nicht was es bedeutet. Ich würde mich sehr freuen, wenn jemand erklären könnte, warum wir diese Argumente verwenden, wenn wir sie nicht im Programm verwenden. Warum nicht einfach: int main()
?
Ist der Name des Programms eines der Elemente von *argv[]
Und argc
ist die Anzahl der Argumente in *argv[]
? Welche weiteren Argumente werden an *argv[]
Gesendet? Wie schicken wir sie?
Die Argumente argc
und argv
von main
werden verwendet, um Argumente an ein Programm zu senden. Die wahrscheinlich bekannteste Methode ist die Verwendung des guten alten Terminals, an dem ein Benutzer arbeitet könnte tippen cat file
. Hier ist das Wort cat
ein Programm, das eine Datei aufnimmt und an die Standardausgabe ausgibt (stdout
).
Das Programm empfängt die Anzahl der Argumente in argc
und den Vektor der Argumente in argv
im obigen arg ument c ount wäre zwei (Der Programmname zählt als erstes Argument) und das arg ument v ector würde [cat
, file
, null] enthalten. Während das letzte Element ein Nullzeiger ist.
Normalerweise würden Sie es so schreiben:
int // Specifies that type of variable the function returns.
// main() must return an integer
main ( int argc, char **argv ) {
// code
return 0; // Indicates that everything went well.
}
Wenn Ihr Programm keine Argumente benötigt, ist es genauso gültig, eine main
- -Funktion auf folgende Weise zu schreiben:
int main() {
// code
return 0; // Zero indicates success, while any
// Non-Zero value indicates a failure/error
}
In den frühen Versionen der C-Sprache gab es kein int
vor main
, wie dies impliziert wurde. Dies wird heute als Fehler angesehen.
Auf [~ # ~] posix [~ # ~] - kompatiblen Systemen (und Windows) besteht die Möglichkeit, einen dritten Parameter char **envp
Zu verwenden, der a enthält Vektor der Programme env ironment variables . Es gibt weitere Variationen der Argumentliste der Funktion main
, aber ich werde sie hier nicht näher beschreiben, da sie nicht dem Standard entspricht.
Auch die Benennung der Variablen ist eine Konvention und hat keine tatsächliche Bedeutung. Es ist immer eine gute Idee, sich daran zu halten, um andere nicht zu verwirren, aber es wäre genauso gültig, main
als zu definieren
int main(int c, char **v, char **e) {
// code
return 0;
}
Und für Ihre zweite Frage gibt es verschiedene Möglichkeiten, Argumente an ein Programm zu senden. Ich würde Ihnen empfehlen, sich die exec*()
-Familie von Funktionen anzusehen, die [~ # ~] posix [~ # ~] - ist. Standard, aber es ist wahrscheinlich einfacher , nur system
("command arg1 arg2")
zu verwenden, aber die Verwendung von system()
ist normalerweise verpönt, da nicht garantiert wird, dass es auf jedem System funktioniert. Ich habe es nicht selbst getestet; Wenn jedoch kein bash
, zsh
oder eine andere Shell auf einem * NIX-System installiert ist, schlägt system()
fehl.
Diese dienen zum Übergeben von Argumenten an Ihr Programm, beispielsweise über die Befehlszeile, wenn ein Programm aufgerufen wird
$ gcc mysort.c -o mysort
$ mysort 2 8 9 1 4 5
Oben wird das Programm mysort
mit einigen Befehlszeilenparametern ausgeführt. Innerhalb von main( int argc, char * argv[])
würde dies dazu führen
Argument Count, argc = 7
da es 7 Argumente gibt (das Programm zählend) und
Argument Vector, argv[] = { "mysort", "2", "8", "9", "1", "4", "5" };
Das Folgende ist ein vollständiges Beispiel.
$ cat mysort.c
#include <stdio.h>
int main( int argc, char * argv [] ) {
printf( "argc = %d\n", argc );
for( int i = 0; i < argc; ++i ) {
printf( "argv[ %d ] = %s\n", i, argv[ i ] );
}
}
$ gcc mysort.c -o mysort
$ ./mysort 2 8 9 1 4 5
argc = 7
argv[ 0 ] = ./mysort
argv[ 1 ] = 2
argv[ 2 ] = 8
argv[ 3 ] = 9
argv[ 4 ] = 1
argv[ 5 ] = 4
argv[ 6 ] = 5
[Die char
Zeichenfolgen "2", "8" usw. können unter Verwendung einer Zeichen-zu-Nummer-Konvertierungsfunktion in eine Zahl konvertiert werden, z. atol()
(link )]
Mit argc
(Argumentanzahl) und argv
(Argumentvektor) können Sie die Anzahl und die Werte der übergebenen Argumente abrufen, wenn Ihre Anwendung gestartet wurde.
Auf diese Weise können Sie Parameter (wie z. B. -version
) Verwenden, wenn Ihre Anwendung auf eine andere Weise gestartet wird.
Sie können int main(void)
aber auch als Prototyp in C verwenden.
Es gibt einen dritten (weniger bekannten und nicht standardmäßigen) Prototyp mit einem dritten Argument, nämlich envp
. Es enthält Umgebungsvariablen.
Ressourcen:
argc
bedeutet die Anzahl der Argumente, die an das Programm übergeben werden. char* argv[]
Sind die übergebenen Argumente. argv[0]
Ist immer der Programmname. Ich bin mir nicht zu 100% sicher, aber ich denke, dass int main()
in C/C++ gültig ist.
argc
ist die Anzahl der Befehlszeilenargumente, die dem Programm zur Laufzeit übergeben werden, und argv
ist ein Array von Zeichenarrays (stattdessen ein Array von C-Strings), die diese Argumente enthalten. Wenn Sie wissen, dass Sie die Befehlszeilenargumente nicht benötigen, können Sie Ihr main deklarieren, indem Sie stattdessen ein void
-Argument verwenden:
int main(void) {
/* ... */
}
Dies sind die einzigen beiden Prototypen, die gemäß den Standards für main
definiert wurden, aber einige Compiler erlauben auch den Rückgabetyp void
. Mehr dazu auf Wikipedia .
argc
ist die Anzahl der Befehlszeilenargumente und argv
ist ein Array von Zeichenfolgen, die Befehlszeilenargumente darstellen.
Dadurch haben Sie die Möglichkeit, auf die an das Programm übergebenen Argumente zu reagieren. Wenn Sie keine erwarten, können Sie auch int main
.
Sie können Ihre Anwendung mit Parametern wie app -something -somethingelse
Ausführen. int argc
Repräsentiert die Anzahl dieser Parameter und char *argv[]
Ist ein Array mit aktuellen Parametern, die an Ihre Anwendung übergeben werden. Auf diese Weise können Sie innerhalb Ihrer Anwendung mit ihnen arbeiten.