webentwicklung-frage-antwort-db.com.de

In Bezug auf 'main (int argc, char * argv [])'

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?

89
Fahad Uddin

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.

113
Frank

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 )]

57
Arun

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:

14
Colin Hebert

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.

3
kraftan

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 .

1
You

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.

0
Aliostad

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.

0
Ondrej Slinták