Abrufen von Befehlszeilenargumenten in C++
-
Verwenden Sie die Notation
int main(int argc, char *argv[])
zum Befehlszeilenargumente in C++ abzurufen -
Verwenden Sie die Notation
int main(int argc, char **argv)
, um Befehlszeilenargumente in C++ abzurufen -
Verwenden der
while
-Schleife, um Befehlszeilenargumente in C++ auszudrucken
In diesem Artikel werden verschiedene Methoden zum Abrufen von Befehlszeilenargumenten in C++ erläutert.
Verwenden Sie die Notation int main(int argc, char *argv[])
zum Befehlszeilenargumente in C++ abzurufen
Befehlszeilenargumente sind Zeichenkettenwerte, die zu Beginn der Ausführung an das Programm übergeben werden können. Normalerweise werden diese Argumente häufig von Programmen verwendet, die nur eine CLI-Schnittstelle haben, z. Unix-Befehlszeilenprogramme. Beachten Sie, dass das C++-Programm eine spezielle main
-Funktionsdefinition haben sollte, um auf Befehlszeilenargumente zuzugreifen. Die Funktion main
sollte nämlich die Parameter als - (int argc, char *argv[])
enthalten. Der Parameter argc
gibt die Gesamtzahl der Argumente an, die an das Programm übergeben wurden, einschließlich des Programmnamens. Andererseits speichert argv
das Array der Zeichenketten, die die Argumentwerte bezeichnen, auf die mit der Array-Notation argv[0]
zugegriffen werden kann. Beachten Sie, dass das Array der char
-Zeiger garantiert mit 0
abgeschlossen wird.
Das folgende Beispiel zeigt die grundlegende Verwendung der for
-Schleife zum Drucken jedes Argumentwerts auf der Konsole. Beachten Sie jedoch, dass die vorhergehende if
-Anweisung sicherstellt, dass für das Programm Argumente angegeben sind, und dann die Ausführung fortsetzt.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char *argv[]) {
if (argc < 2) {
cerr << "No program parameters provided !" << endl;
exit(EXIT_FAILURE);
}
for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
exit(EXIT_SUCCESS);
}
Verwenden Sie die Notation int main(int argc, char **argv)
, um Befehlszeilenargumente in C++ abzurufen
Es gibt einen anderen Prototyp der Hauptfunktion, der gültig ist und sich genau wie der vorherige verhält. Wir fügen ihn daher hinzu, um sicherzustellen, dass keine Verwirrung entsteht, wenn die folgende Notation auftritt: int main(int argc, char **argv)
. Beachten Sie, dass der Zugriff auf die Elemente auf dieselbe Weise erfolgt und sie mit der Schleife for
durchlaufen werden können.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char **argv) {
if (argc < 2) {
cerr << "No program parameters provided !" << endl;
exit(EXIT_FAILURE);
}
for (int i = 0; i < argc; i++) printf("argv[%d] = %s\n", i, argv[i]);
exit(EXIT_SUCCESS);
}
Verwenden der while
-Schleife, um Befehlszeilenargumente in C++ auszudrucken
Eine andere Methode, um auf die Argumentwerte zuzugreifen, besteht darin, den Zeiger argv
zu dereferenzieren, bis er gleich Null ist. Beachten Sie, dass das Array argv
garantiert mit dem Wert Null abgeschlossen wird, mit dem wir eine while
-Schleife implementieren können, um das Array zu durchlaufen und die Argumentwerte einzeln zu drucken. Beachten Sie, dass der Aufruf printf
in der folgenden Anweisung if
als Fehlerberichterstatter fungiert, wenn nicht genügend Argumente an das Programm übergeben wurden. Der interessante Teil ist, dass der Programmname mit der Notation argv[0]
und dem Bezeichner %s
abgerufen wird, was ihn zu einer flexibleren Methode macht, als den Namen bei jeder Änderung fest zu codieren.
#include <iostream>
#include <string>
using std::cerr;
using std::cout;
using std::endl;
using std::string;
int main(int argc, char *argv[]) {
if (argc < 4) {
printf("Usage: ./%s arg1 arg2 arg3\n", argv[0]);
exit(EXIT_FAILURE);
}
while (*argv) {
cout << *argv << endl;
argv += 1;
}
exit(EXIT_SUCCESS);
}
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook