2010-01-18 19 views
46

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?

+0

wie etwa das env mit System (env) nennen? – Vijay

Antwort

84

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; 
} 
+0

Funktioniert das auch in Windows? – andrewrk

+11

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. –

+0

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. –

4
int main(int argc, char* argv[], char* envp[]) { 
    // loop through envp to get all environments as "NAME=val" until you hit NULL. 
} 
14

Ich denke, Sie sollten environ überprüfen. Verwenden Sie "man environ".

+4

http://www.opengroup.org/onlinepubs/007908799/xsh/environ.html – ephemient

8

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.

1

Wenn Sie auf einem Windows-Betriebssystem laufen lassen, dann können Sie auch GetEnvironmentStrings() nennen, die einen Block von null zurückgibt terminierten Strings.

4

In den meisten Umgebungen können Sie Ihre Haupt deklarieren:

main(int argc,char* argv[], char** envp) 

envp alle Umgebungszeichenfolgen enthält.

37
#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; 
} 
+1

Es gibt einen Fehler in Ihrem Beispiel. Die erste Umgebungsvariable wird zweimal gedruckt. –

+1

Sie sind zu 100% korrekt. Ich habe Anfangswert von i auf 1 von 0 aktualisiert. – user1602017

+2

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!! –

5
int main(int argc, char **argv, char** env) { 
    while (*env) 
     printf("%s\n", *env++); 
    return 0; 
} 
Verwandte Themen