Argumentdefinitionen
Argumente im Prototyp:
int main( int argc[ , char *argv[ ] [, char *envp[ ] ] ] );
int wmain( int argc[ , wchar_t *argv[ ] [, wchar_t *envp[ ] ] ] );
Mit den genannten Argumenten können Sie einfache Befehlszeilenanalysen von Argumenten ausführen und optional auf Umgebungsvariablen zugreifen. Die Argumentdefinitionen sind wie folgt:
argc
Eine ganze Zahl, die die Anzahl von Argumenten enthält, die in argv folgen. Der argc-Parameter ist immer größer als oder gleich 1.argv
Ein Array von Zeigern auf Zeichenfolgen, die auf NULL enden und von den Benutzern des Programms eingegebene Befehlszeilenargumente darstellen. Gemäß der Konvention ist argv**[0]** der Befehl, mit dem das Programm aufgerufen wird, argv**[1]** ist das erste Befehlszeilenargument, und so geht es weiter bis zu argv**[argc]**, das immer NULL ist. Informationen zum Unterdrücken der Befehlszeilenverarbeitung finden Sie in der Erläuterung zum Anpassen der Befehlszeilenverarbeitung.Das erste Befehlszeilenargument ist immer argv**[1], und das letzte ist argv[argc – 1]**.
Hinweis
Gemäß der Konvention ist argv[0] der Befehl, mit dem das Programm aufgerufen wird. Allerdings es ist möglich, einen Prozess mit CreateProcess zu erstellen, und wenn Sie sowohl das erste als auch das zweite Argument (lpApplicationName und lpCommandLine) verwenden, ist argv[0] möglicherweise nicht der ausführbare Name. Verwenden Sie GetModuleFileName, um den ausführbaren Namen und dessen vollqualifizierten Pfad abzurufen.
Microsoft-spezifisch
- envp
In Microsoft C++ wird das envp-Array verwendet, das eine verbreitete Erweiterung in vielen UNIX-Systemen ist. Es ist ein Zeichenfolgenarray, das die Variablen darstellt, die in der Benutzerumgebung festgelegt werden. Das Array wird mit einem NULL-Eintrag beendet. Es kann als Array von Zeigern auf char (char *envp[ ]) oder als ein Zeiger auf die Zeiger auf char (char **envp**)** deklariert sein. Wenn das Programm wmain anstelle von main verwendet, verwenden Sie den wchar_t-Datentyp anstelle von char. Beachten Sie, dass der Umgebungsblock, der an main und wmain übergeben wird, eine "fixierte" Kopie der aktuellen Umgebung ist. Wenn Sie danach die Umgebung durch einen Aufruf von putenv oder _wputenv ändern, wird die aktuelle Umgebung geändert (wie durch getenv/_wgetenv und die _environ/ _wenviron-Variablen zurückgegeben), aber der von "envp" referenzierte Block ändert sich nicht. Informationen zum Unterdrücken der Umgebungsverarbeitung finden Sie in der Erläuterung zum Anpassen der Befehlszeilenverarbeitung. Dieses Argument ist in C ANSI-kompatibel, aber nicht in C++.
Beispiel
Im folgenden Beispiel wird die Verwendung der Argumente argc, argv und envp für main gezeigt:
// argument_definitions.cpp
// compile with: /EHsc
#include <iostream>
#include <string.h>
using namespace std;
int main( int argc, char *argv[], char *envp[] ) {
int iNumberLines = 0; // Default is no line numbers.
// If /n is passed to the .exe, display numbered listing
// of environment variables.
if ( (argc == 2) && _stricmp( argv[1], "/n" ) == 0 )
iNumberLines = 1;
// Walk through list of strings until a NULL is encountered.
for( int i = 0; envp[i] != NULL; ++i ) {
if( iNumberLines )
cout << i << ": " << envp[i] << "\n";
}
}