![Was bedeutet int argc, char *argv[] bedeuten? 1 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/Was-bedeutet-int-argc-char-argv-bedeuten.png)
Greg Treleaven
In vielen C++ IDEs und Compilern sieht es so aus, wenn es die Hauptfunktion für Sie generiert:
int main(int argc, char *argv[])
Wenn ich C++ ohne IDE codiere, nur mit einem Befehlszeilencompiler, gebe ich Folgendes ein:
int main()
ohne Parameter. Was bedeutet das und ist es wichtig für mein Programm?
![Was bedeutet int argc, char *argv[] bedeuten? 2 1647268814 206 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/1647268814_206_Was-bedeutet-int-argc-char-argv-bedeuten.png)
mager
argv
und argc
werden Befehlszeilenargumente übergeben main()
in C und C++.
argc
wird die Anzahl der Zeichenfolgen sein, auf die gezeigt wird argv
. Dies ist (in der Praxis) 1 plus die Anzahl der Argumente, da praktisch alle Implementierungen den Namen des Programms dem Array voranstellen.
Die Variablen werden benannt argc
(Argument zählen) und argv
(Argumentvektor) per Konvention, aber ihnen kann jeder gültige Bezeichner gegeben werden: int main(int num_args, char** arg_strings)
ist gleichermaßen gültig.
Sie können auch ganz weggelassen werden, was nachgibt int main()
wenn Sie keine Befehlszeilenargumente verarbeiten möchten.
Versuchen Sie folgendes Programm:
#include <iostream>
int main(int argc, char** argv) {
std::cout << "Have " << argc << " arguments:" << std::endl;
for (int i = 0; i < argc; ++i) {
std::cout << argv[i] << std::endl;
}
}
Läuft damit ./test a1 b2 c3
wird ausgegeben
Have 4 arguments:
./test
a1
b2
c3
![Was bedeutet int argc, char *argv[] bedeuten? 3 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/Was-bedeutet-int-argc-char-argv-bedeuten.jpg)
Johannes Böker
argc
ist die Anzahl der Argumente, die von der Befehlszeile an Ihr Programm übergeben werden und argv
ist das Array von Argumenten.
Sie können die Argumente durchlaufen, wenn Sie deren Anzahl kennen:
for(int i = 0; i < argc; i++)
{
// argv[i] is the argument at index i
}
![Was bedeutet int argc, char *argv[] bedeuten? 4 1647268815 976 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/1647268815_976_Was-bedeutet-int-argc-char-argv-bedeuten.png)
Toby Speight
Angenommen, Sie führen Ihr Programm so aus (mit sh
Syntax):
myprog arg1 arg2 'arg 3'
Wenn Sie Ihr Haupt als deklariert haben int main(int argc, char *argv[])
dann (in den meisten Umgebungen) Ihre main()
wird wie folgt aufgerufen:
p = { "myprog", "arg1", "arg2", "arg 3", NULL };
exit(main(4, p));
Wenn Sie jedoch Ihr Haupt als deklariert haben int main()
es wird so etwas wie genannt werden
exit(main());
und Sie bekommen die Argumente nicht übergeben.
Zwei zusätzliche Dinge zu beachten:
- Dies sind die einzigen zwei standardmäßig vorgeschriebenen Signaturen für
main
. Wenn eine bestimmte Plattform zusätzliche Argumente oder einen anderen Rückgabetyp akzeptiert, dann ist das eine Erweiterung, auf die man sich in einem portablen Programm nicht verlassen sollte.
*argv[]
und **argv
sind genau gleichwertig, also kannst du schreiben int main(int argc, char *argv[])
als int main(int argc, char **argv)
.
![Was bedeutet int argc, char *argv[] bedeuten? 5 1647268815 508 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/1647268815_508_Was-bedeutet-int-argc-char-argv-bedeuten.jpg)
Adrian
int main();
Dies ist eine einfache Erklärung. Es kann keine Befehlszeilenargumente annehmen.
int main(int argc, char* argv[]);
Diese Deklaration wird verwendet, wenn Ihr Programm Befehlszeilenargumente annehmen muss. Wenn es so läuft:
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 Folgendes 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[])
Die envp
Parameter enthält auch Umgebungsvariablen. Jeder Eintrag folgt diesem Format:
VARIABLENAME=VariableValue
so was:
SHELL=/bin/bash
Die Liste der Umgebungsvariablen ist nullterminiert.
WICHTIG: Verwenden Sie KEINE argv
oder envp
Werte direkt in Aufrufen an system()
! Das ist ein enorm Sicherheitslücke, da böswillige Benutzer Umgebungsvariablen auf Befehlszeilenbefehle setzen und (möglicherweise) massiven Schaden anrichten könnten. Im Allgemeinen einfach nicht verwenden system()
. Es gibt fast immer eine bessere Lösung, die durch C-Bibliotheken implementiert wird.
![Was bedeutet int argc, char *argv[] bedeuten? 6 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/Was-bedeutet-int-argc-char-argv-bedeuten.jpeg)
BlueMonkMN
Die Parameter zu main
stellen die Befehlszeilenparameter dar, die dem Programm beim Start bereitgestellt wurden. Die argc
Parameter repräsentiert die Anzahl der Befehlszeilenargumente und char *argv[]
ist ein Array von Zeichenfolgen (Zeichenzeigern), die die einzelnen Argumente darstellen, die auf der Befehlszeile bereitgestellt werden.
![Was bedeutet int argc, char *argv[] bedeuten? 7 1647268816 231 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/1647268816_231_Was-bedeutet-int-argc-char-argv-bedeuten.jpg)
Azeem
Die main
Funktion kann zwei Parameter haben, argc
und argv
. argc
ist eine ganze Zahl (int
) Parameter, und es ist die Anzahl der Argumente, die an das Programm übergeben werden.
Der Programmname ist immer das erste Argument, daher gibt es mindestens ein Argument für ein Programm und den Mindestwert von argc
wird einer sein. Aber wenn ein Programm selbst zwei Argumente hat deren Wert argc
wird drei sein.
Parameter argv
zeigt auf ein String-Array und heißt the Argumentvektor. Es ist ein eindimensionales String-Array von Funktionsargumenten.
![Was bedeutet int argc, char *argv[] bedeuten? 8 1647268817 301 Was bedeutet int argc char argv bedeuten](https://www.viresist.org/wp-content/uploads/1647268817_301_Was-bedeutet-int-argc-char-argv-bedeuten.jpeg)
Nick Gerakines
Der erste Parameter ist die Anzahl der bereitgestellten Argumente und der zweite Parameter ist eine Liste von Zeichenfolgen, die diese Argumente darstellen.
10019800cookie-checkWas bedeutet int argc, char *argv[] bedeuten?yes
Wenn Ihr Programm Befehlszeilenargumente ignoriert, ist das, was Sie schreiben, in Ordnung. Wenn Ihr Programm Befehlszeilenargumente verarbeiten muss, macht die IDE das richtig.
– Jonathan Leffler
11. Juni 2010 um 15:57 Uhr
Ein Tipp für Hacker: Versuchen Sie es mit der Deklaration
int main(int argc, char* argv[], char* envp[])
und das letzte Argument ausgeben.;)
– ulidtko
5. Oktober 2015 um 11:17 Uhr
@ulidtko es ist nicht gut, dass Sie Neulingen beibringen, Schwachstellen in ihre Programme einzuführen;)
– Gab是好人
27. April 2016 um 12:29 Uhr
@Gab wie führt das einfache Drucken von Umgebungsvariablen zu einer Schwachstelle? Übergeben Sie die verdorbenen Zeichenfolgen einfach nicht wörtlich an
system()
Aufrufe, DB-Abfragen, etc. Wie gewohnt mit Benutzereingaben.– ulidtko
28. April 2016 um 11:42 Uhr
@ulidtko Interessant .. Können Sie erklären, warum Sie bei der Verwendung keine verdorbenen Zeichenfolgen, DB-Abfragen usw. übergeben müssen
char **envp
Streit?– Meister James
11. Juni 2018 um 8:16 Uhr