96 votes

Accès aux variables d'environnement en C ++

J'aimerais avoir accès à la variable d'environnement $ HOME dans un programme C ++ que j'écris. Si j'écrivais du code en C, je n'utiliserais que la fonction getenv (), mais je me demandais s'il y avait une meilleure façon de le faire. Voici le code que j'ai jusqu'à présent:

 std::string get_env_var( std::string const & key ) {                                 
  char * val;                                                                        
  val = getenv( key.c_str() );                                                       
  std::string retval = "";                                                           
  if (val != NULL) {                                                                 
    retval = val;                                                                    
  }                                                                                  
  return retval;                                                                        
}
 

Devrais-je utiliser getenv () pour accéder aux variables d'environnement en C ++? Y a-t-il des problèmes que je risque de rencontrer que je peux éviter avec un peu de connaissance?

85voto

Matt Davis Points 22019

Il n'y a rien de mal avec l'aide d' getenv() en C++. Il est défini par stdlib.h, ou si vous préférez de la bibliothèque standard de mise en œuvre, vous pouvez inclure cstdlib et accéder à cette fonction via l' std:: d'espace de noms (c'est à dire, std::getenv()). Absolument rien de mal à cela. En fait, si vous êtes inquiet au sujet de la portabilité, l'une de ces deux versions est préféré.

Si vous êtes pas préoccupé par la portabilité et vous êtes à l'aide de C++ géré, vous pouvez utiliser le .NET équivalent - System::Environment::GetEnvironmentVariable(). Si vous voulez le non-.NET l'équivalent pour Windows, vous pouvez simplement utiliser l' GetEnvironmentVariable() fonction Win32.

44voto

Vlad Points 116

Je voudrais juste refactoriser le code un peu:

 std::string getEnvVar( std::string const & key ) const
{
    char * val = getenv( key.c_str() );
    return val == NULL ? std::string("") : std::string(val);
}
 

21voto

Brian R. Bondy Points 141769

Pourquoi utiliser GetEnvironmentVariable dans Windows, à partir de MSDN getenv:

la fonction getenv fonctionne uniquement sur les données les structures accessibles au moment de l'exécution bibliothèque et non sur l'environnement "segment" créé pour les processus par le système d'exploitation. Par conséquent, les programmes qui utilisent le vice-argument principal ou wmain peut récupérer des invalides de l'information.

Et à partir de MSDN GetEnvironment:

Cette fonction permet de récupérer un variable d'environnement système ou un utilisateur variable d'environnement.

11voto

Mykola Golubyev Points 21210

En c ++, vous devez utiliser std :: getenv et #include <cstdlib>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X