我想访问 $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的程序可能会检索无效的信息。

来自 MSDN GetEnvironment:

此功能可以检索系统环境变量或用户环境变量。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top