在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>