Wie bekomme ich die Liste aller Umgebungsvariablen in C und/oder C++?Drucken aller Umgebungsvariablen in C/C++
Ich weiß, dass getenv
verwendet werden kann, um eine Umgebungsvariable zu lesen, aber wie führe ich sie alle?
Wie bekomme ich die Liste aller Umgebungsvariablen in C und/oder C++?Drucken aller Umgebungsvariablen in C/C++
Ich weiß, dass getenv
verwendet werden kann, um eine Umgebungsvariable zu lesen, aber wie führe ich sie alle?
Die Umgebungsvariablen werden auf main()
als envp
Argument zur Verfügung gestellt - eine Null-terminierten Array von Strings:
int main(int argc, char **argv, char **envp)
{
for (char **env = envp; *env != 0; env++)
{
char *thisEnv = *env;
printf("%s\n", thisEnv);
}
return 0;
}
Funktioniert das auch in Windows? – andrewrk
Wenn Sie in Windows arbeiten, und wenn Sie einen Compiler haben, warum führen Sie ihn nicht einfach aus und sehen? Lassen Sie uns wissen, wie es geht. –
Obwohl weitgehend unterstützt (ich kenne keinen Compiler, der es nicht unterstützt), ist die Verwendung des Arguments "envp" für main nicht garantiert, nur "argc" und "argv" sind. "envp" macht es auch lokal für main(). Eine portablere Lösung ist das "environ" extern (global), das fast jeder Compiler bereitstellt, sowie die Funktionen getenv() und setenv() (die die Integrität der Prozessumgebung sicherstellen sollen) . Viele Implementierungen stellen auch eine Funktion putenv() zur Verfügung, aber diese Funktion gewährleistet möglicherweise nicht die Integrität der Umgebung. (Weitere Informationen finden Sie in der Dokumentation. –
int main(int argc, char* argv[], char* envp[]) {
// loop through envp to get all environments as "NAME=val" until you hit NULL.
}
Ich denke, Sie sollten environ
überprüfen. Verwenden Sie "man environ".
http://www.opengroup.org/onlinepubs/007908799/xsh/environ.html – ephemient
Ihr Compiler Nicht-Standard-Erweiterungen der Hauptfunktion kann vorsehen, dass variable Informationen zusätzliche Umgebung zur Verfügung stellt. Die MS-Compiler und die meisten Unix-Varianten haben diese Version von Haupt:
int main (int argc, char **argv, char **envp)
wo der dritte Parameter der Umgebungsvariable Informationen - einen Debugger verwenden, um zu sehen, was das Format ist - wahrscheinlich ein Null-Liste von String-Zeiger beendet.
LPTCH WINAPI GetEnvironmentStrings (void);
http://msdn.microsoft.com/en-us/library/ms683187%28VS.85%29.aspx
EDIT: funktioniert nur unter Windows.
Wenn Sie auf einem Windows-Betriebssystem laufen lassen, dann können Sie auch GetEnvironmentStrings()
nennen, die einen Block von null zurückgibt terminierten Strings.
In den meisten Umgebungen können Sie Ihre Haupt deklarieren:
main(int argc,char* argv[], char** envp)
envp alle Umgebungszeichenfolgen enthält.
#include<stdio.h>
extern char **environ;
int main() {
int i = 1;
char *s = *environ;
for (; s; i++) {
printf("%s\n", s);
s = *(environ+i);
}
return 0;
}
Es gibt einen Fehler in Ihrem Beispiel. Die erste Umgebungsvariable wird zweimal gedruckt. –
Sie sind zu 100% korrekt. Ich habe Anfangswert von i auf 1 von 0 aktualisiert. – user1602017
Vorteil dieser Lösung ist, dass es nicht in main() sein muss. Es funktioniert gut, wenn Sie es in die Mitte eines großen und komplizierten Programms stecken. Vielen Dank!! –
int main(int argc, char **argv, char** env) {
while (*env)
printf("%s\n", *env++);
return 0;
}
wie etwa das env mit System (env) nennen? – Vijay