693 Stimmen

Was bedeutet int argc, char *argv[]?

In vielen C++-IDEs und -Compilern sieht die Hauptfunktion, wenn sie für Sie generiert wird, folgendermaßen aus:

int main(int argc, char *argv[])

Wenn ich C++ ohne IDE, nur mit einem Befehlszeilen-Compiler programmiere, gebe ich ein:

int main()

ohne jegliche Parameter. Was bedeutet das, und ist es für mein Programm wichtig?

65voto

John Boker Punkte 80493

argc ist die Anzahl der Argumente, die von der Befehlszeile an Ihr Programm übergeben werden, und argv ist das Array der Argumente.

Sie können die Argumente in einer Schleife durchgehen, wenn Sie die Anzahl der Argumente kennen:

for(int i = 0; i < argc; i++)
{
    // argv[i] is the argument at index i
}

27voto

Toby Speight Punkte 24996

Angenommen, Sie führen Ihr Programm so aus (mit sh Syntax):

myprog arg1 arg2 'arg 3'

Wenn Sie Ihr Main als int main(int argc, char *argv[]) dann wird (in den meisten Umgebungen) Ihr main() wird als ob aufgerufen:

p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));

Wenn Sie jedoch Ihr Hauptprogramm als int main() wird sie etwa so heißen

exit(main());

und Sie bekommen die Argumente nicht übergeben.

Zwei weitere Dinge sind zu beachten:

  1. Dies sind die einzigen beiden standardmäßig vorgeschriebenen Signaturen für main . Wenn eine bestimmte Plattform zusätzliche Argumente oder einen anderen Rückgabetyp akzeptiert, handelt es sich um eine Erweiterung, auf die man sich in einem portablen Programm nicht verlassen sollte.
  2. *argv[] y **argv sind genau gleichwertig, so dass man schreiben kann int main(int argc, char *argv[]) como int main(int argc, char **argv) .

18voto

adrian Punkte 1137
int main();

Dies ist eine einfache Erklärung. Sie kann keine Befehlszeilenargumente annehmen.

int main(int argc, char* argv[]);

Diese Deklaration wird verwendet, wenn Ihr Programm Befehlszeilenargumente annehmen muss. Wenn es als solches ausgeführt wird:

myprogram arg1 arg2 arg3

argc oder Argument Count wird auf 4 (vier Argumente) gesetzt, und argv oder Argumentvektoren, werden mit String-Zeigern auf "myprogram", "arg1", "arg2" und "arg3" gefüllt. Der Programmaufruf ( myprogram ) ist in den Argumenten enthalten!

Alternativ können Sie auch verwenden:

int main(int argc, char** argv);

Dies gilt auch.

Es gibt einen weiteren Parameter, den Sie hinzufügen können:

int main (int argc, char *argv[], char *envp[])

El envp Parameter enthält auch Umgebungsvariablen. Jeder Eintrag folgt diesem Format:

VARIABLENAME=VariableValue

wie diese:

SHELL=/bin/bash    

Die Liste der Umgebungsvariablen ist mit Nullen abgeschlossen.

WICHTIG! Verwenden Sie KEINE argv o envp Werte direkt in Aufrufen von system() ! Dies ist ein riesig Sicherheitslücke, da böswillige Benutzer Umgebungsvariablen auf Befehlszeilenbefehle setzen und (potenziell) großen Schaden anrichten können. Verwenden Sie generell keine system() . Es gibt fast immer eine bessere Lösung, die durch C-Bibliotheken implementiert wird.

14voto

Anoop Rana Punkte 1

Schauen wir uns die Erklärung an:

int main (int argc, char *argv[])

In der obigen Erklärung ist der Typ des zweiten Parameters namens argv ist eigentlich ein char** . Das heißt, argv ist eine Zeiger auf einen Zeiger auf eine char . Dies liegt daran, dass eine char* [] zerfällt zu einer `char` aufgrund von Typenzerfall** . Die nachstehenden Erklärungen sind zum Beispiel gleichwertig:

int main (int argc, char *argv[]); //first declaration
int main (int argc, char **argv);  //RE-DECLARATION. Equivalent to the above declaration

Mit anderen Worten, argv ist ein Zeiger, der auf das erste Element eines Arrays mit Elementen des Typs char* . Außerdem wird jedes Element argv[i] des Arrays (mit Elementen des Typs char* ) selbst auf ein Zeichen verweisen, das den Anfang einer null terminiert Zeichenkette. Das heißt, jedes Element argv[i] zeigt auf das erste Element eines Arrays mit Elementen des Typs char (und nicht const char ). Zur Veranschaulichung wird ein Diagramm gezeigt:

argv and argc

Wie bereits in anderen Antworten erwähnt, ist diese Form der Erklärung von main wird verwendet, wenn das/die Kommandozeilenargument(e) verwendet werden sollen.

11voto

BlueMonkMN Punkte 24177

Die Parameter für main stehen für die Kommandozeilenparameter, die dem Programm beim Start übergeben wurden. Die argc steht für die Anzahl der Kommandozeilenargumente, und char *argv[] ist ein Array von Strings (Zeichenzeigern), die die einzelnen in der Befehlszeile angegebenen Argumente darstellen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X