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

Comment puis-je 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 lister toutes?

50
c
demandé sur Peter Mortensen 2010-01-18 13:30:29

9 réponses

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;
}
90
répondu Alex Brown 2017-11-14 15:05:55
#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;
}
41
répondu user1602017 2014-07-03 15:59:35

Je pense que vous devriez vérifier environ. L'utilisation de "l'homme environ".

13
répondu Dyno Fu 2017-06-02 20:43:48

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

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

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

9
répondu Skizz 2010-01-18 10:36:38
int main(int argc, char **argv, char** env) {
   while (*env)
      printf("%s\n", *env++);
   return 0;
}
5
répondu Alex 2014-10-30 02:01:08
int main(int argc, char* argv[], char* envp[]) {
   // loop through envp to get all environments as "NAME=val" until you hit NULL.
}
4
répondu kennytm 2010-01-18 10:35:48

Dans la plupart des environnements, vous pouvez déclarer vos principales comme:

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

Envp contient toutes les chaînes d'environnement.

4
répondu Sebastiaan M 2016-10-28 06:52:05

LPTCH WINAPI GetEnvironmentStrings(void);

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

EDIT: ne fonctionne que sous windows.

3
répondu whunmr 2010-01-18 10:42:07

Si vous utilisez un système D'exploitation Windows, vous pouvez également appeler {[0] } qui renvoie un bloc de chaînes terminées par null.

1
répondu Len Holgate 2010-01-18 10:37:04