web-dev-qa-db-fra.com

Impression de toutes les variables d'environnement en C / C ++

Comment obtenir la liste de toutes les variables d'environnement en C et/ou C++?

Je sais que getenv peut être utilisé pour lire une variable d'environnement, mais comment les répertorier toutes?

61
Jacob

Les variables d'environnement sont mises à la disposition de main() en tant qu'argument envp - un tableau de chaînes terminé par null:

int main(int argc, char **argv, char **envp)
{
  for (char **env = envp; *env != 0; env++)
  {
    char *thisEnv = *env;
    printf("%s\n", thisEnv);    
  }
  return 0;
}
104
Alex Brown
#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;
}
50
user1602017

Je pense que vous devriez vérifier environ. Utilisez "man environ".

14
Dyno Fu

Votre compilateur peut fournir des extensions non standard à la fonction principale qui fournissent des informations supplémentaires sur les variables d'environnement. Le compilateur MS et la plupart des versions d'Unix ont cette version de main:

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

où le troisième paramètre est l'information sur la variable d'environnement - utilisez un débogueur pour voir quel est le format - probablement une liste de pointeurs de chaîne terminée par null.

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

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

EDIT: ne fonctionne que sur Windows.

4
whunmr

Dans la plupart des environnements, vous pouvez déclarer votre principal comme:

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

envp contient toutes les chaînes d'environnement.

4
Sebastiaan M

Si vous utilisez un système d'exploitation Windows, vous pouvez également appeler GetEnvironmentStrings() qui renvoie un bloc de chaînes terminées par null.

2
Len Holgate