Imprimir todas las variables de entorno en C / C ++

¿Cómo obtengo la lista de todas las variables de entorno en C y / o C ++?

Sé que getenv se puede usar para leer una variable de entorno, pero ¿cómo puedo enumerarlas todas?

Las variables de entorno están disponibles para main() como el argumento envp : una matriz de cadenas terminada nula:

 int main(int argc, char **argv, char **envp) { for (char **env = envp; *env != 0; env++) { char *thisEnv = *env; printf("%s\n", thisEnv); } return 0; } 
 #include extern char **environ; int main() { int i = 1; char *s = *environ; for (; s; i++) { printf("%s\n", s); s = *(environ+i); } return 0; } 

Creo que deberías consultar el environ . Use “hombre medio”.

Su comstackdor puede proporcionar extensiones no estándar a la función principal que proporciona información de variables de entorno adicionales. El comstackdor de MS y la mayoría de los sabores de Unix tienen esta versión de main:

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

donde el tercer parámetro es la información de la variable de entorno – use un depurador para ver cuál es el formato – probablemente una lista de punteros de cadena terminada en nulo.

 int main(int argc, char **argv, char** env) { while (*env) printf("%s\n", *env++); return 0; } 
 int main(int argc, char* argv[], char* envp[]) { // loop through envp to get all environments as "NAME=val" until you hit NULL. } 

En la mayoría de los entornos puede declarar su principal como:

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

envp contiene todas las cadenas de entorno.

LPTCH WINAPI GetEnvironmentStrings (void);

http://msdn.microsoft.com/en-us/library/ms683187%28VS.85%29.aspx

EDITAR: solo funciona en Windows.

Si está ejecutando un sistema operativo Windows, también puede llamar a GetEnvironmentStrings() que devuelve un bloque de cadenas terminadas nulas.