在C ++中访问环境variables

我想在我正在编写的C ++程序中访问$HOME环境variables。 如果我用C语言编写代码,我只需要使用getenv()函数,但是我想知道是否有更好的方法来实现它。 这是我迄今为止的代码:

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

我应该使用getenv()来访问C ++中的环境variables吗? 有没有可能遇到的问题,我可以避免一点点的知识?

在C ++中使用getenv()没有任何问题。 它由stdlib.h定义,或者如果您更喜欢标准库实现,则可以包含cstdlib并通过std:: namespace(即std::getenv() )访问该函数。 这绝对没有错。 事实上,如果你担心可移植性,这两个版本中的任何一个都是首选。

如果您关心可移植性,并且您正在使用托pipeC ++,则可以使用.NET等价物 – System::Environment::GetEnvironmentVariable() 。 如果您希望Windows的非.NET等价物,您可以简单地使用GetEnvironmentVariable() Win32函数。

我只是稍微重构一下代码:

 std::string getEnvVar( std::string const & key ) const { char * val = getenv( key.c_str() ); return val == NULL ? std::string("") : std::string(val); } 
  • 如果您在Windows上,则可以使用Win32 API GetEnvironmentVariable
  • 在其他基于Linux / Unix的系统上使用getenv

为什么在Windows中使用GetEnvironmentVariable, 从MSDN getenv :

getenv只能在运行时库可访问的数据结构上运行,而不能在操作系统为进程创build的环境“段”上运行。 因此,使用main或wmain的envp参数的程序可能会检索到无效的信息。

并从MSDN GetEnvironment :

此函数可以检索系统环境variables或用户环境variables。

在c ++中,你必须使用std :: getenv和#include <cstdlib>