Was meinen wir mit den Argumenten in dieser main
Funktion? Was versuchen sie uns zu sagen?
int main(int argc, char** argv)
UPDATE: Und ist die vorhergehende Codezeile ähnlich wie int main(int argc, char* argv[])
? Wenn ja, wie können wir sagen, dass char** argv
ähnlich zu char* argv[]
ist, da sie aus der Sicht eines Arrays nicht ähnlich aussehen?
Wie wird es mit int main()
verglichen, das keine Argumente hat?
Danke.
Der Parameter argc
ist die Anzahl der angegebenen Befehlszeilenoptionen, einschließlich des ausführbaren Namens, als die ausführbare Datei aufgerufen wurde. Die einzelnen Befehlszeilenoptionen befinden sich im Array argv
, wobei NULL
beendet ist (der Name und Pfad zum Aufrufen der ausführbaren Datei lautet in argv[0]
).
Der Unterschied zwischen den beiden Versionen besteht einfach darin, ob Sie Befehlszeilenargumente parsen wollen oder nicht - wenn Sie nicht daran interessiert sind, können Sie sie mit dem zweiten Formular ignorieren.
Wikipedia bietet eine gute Erklärung. Der erste Parameter gibt Ihnen die Anzahl der Befehlszeilenargumente, und der zweite gibt Ihnen die tatsächlichen Argumente.
Sie stellen die Befehlszeilenparameter dar.
argc ist die Anzahl der Befehlszeilenparameter einschließlich des Namens der ausführbaren Datei.
argv ist ein Array von nullterminierten Strings, wobei argv[0]
der Befehlszeilenparameter ist und argv[i]
der i-te Parameter danach ist, argv[argc-1]
ist der letzte und argv[argc]
ist tatsächlich gut definiert und ein NULL-Zeiger .
Also:
foo bar baz
in der Befehlszeile hat argc
= 3, argv[0]
="foo" argv[1]
="bar" argv[2]
="baz" argv[3]
= NULL
Beachten Sie, dass keine speziellen Anhänge für "Flag" -Argumente vorhanden sind.
grep -i foo bar.cpp bar.h
hätte 4 Argumente (argc = 5 einschließlich grep selbst), -i ist einer von ihnen und dies würde gelten, selbst wenn der nächste Parameter ein "Wert" wäre, der an das Flag angehängt ist.
Beachten Sie, wenn Sie einen Platzhalter gemacht haben
grep -i foo *
zumindest in UNIX, das * würde vor dem Aufruf in grep erweitert werden und somit würde jede Datei, die übereinstimmte, ein Argument sein.
Übrigens
char** argv
und char* argv[]
mach das Gleiche.
Auch wenn der Standard sagt, dass Sie eine dieser Signaturen verwenden müssen (Sie sollten nicht einmal irgendwelche Konflikte hinzufügen), gibt es kein Gesetz, dass Sie diese beiden Variablennamen verwenden müssen, aber es ist so konventionell, dass sie jetzt ziemlich hoch sind Universal. (d. h. Sie könnten argCount
und argValues
verwenden, wenn Sie möchten).
argc gibt Ihnen die Anzahl der Argumente und argv gibt Ihnen diese Argumente. Der erste ist der Pfad zu der .exe, mit der Ihr Programm ausgeführt wird, die folgenden sind Argumente, die der Aufrufer Ihrer .exe auf der Befehlszeile wie folgt zur Verfügung stellt:
%Vor%Während
%Vor%ignoriert nur die Argumente.