我想$HOME
在我正在编写的C++程序中访问环境变量.如果我用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++访问环境变量吗?是否有任何我可能遇到的问题,我可以通过一点点知识来避免?
getenv()
在C++中使用没有任何问题.它由stdlib.h
,或者如果您更喜欢标准库实现,您可以cstdlib
通过std::
命名空间包含和访问该函数(即,std::getenv()
).这绝对没有错.实际上,如果您担心可移植性,则首选这两个版本中的任何一个.
如果您不关心可移植性并且使用托管C++,则可以使用.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仅对运行时库可访问的数据结构进行操作,而不对操作系统为进程创建的环境"段"进行操作.因此,对main或wmain使用envp参数的程序可能会检索无效信息.
而从MSDN GetEnvironment:
此函数可以检索系统环境变量或用户环境变量.
在c ++中你必须使用std :: getenv和 #include