题
我想访问 $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++中访问环境变量?有没有一些我可能会遇到的问题,只要有一点知识就可以避免?
解决方案
在C ++中使用getenv()
没有任何问题。它由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中使用GetEnvironmentVariable, 来自 MSDN getenv:
getEnv仅在运行时库可访问的数据结构上运行,而不是在操作系统为过程中创建的环境“段”。因此,使用ENVP参数作为MAIN或WMAIN的程序可能会检索无效的信息。
此功能可以检索系统环境变量或用户环境变量。
在c ++中你必须使用std :: getenv和#include <cstdlib>
不隶属于 StackOverflow