在 C++ 中访问环境变量

2022-01-15 00:00:00 environment-variables c++

我想在我正在编写的 C++ 程序中访问 $HOME 环境变量.如果我用 C 编写代码,我只会使用 getenv() 函数,但我想知道是否有更好的方法来做到这一点.这是我到目前为止的代码:

I'd like to have access to the $HOME environment variable in a C++ program that I'm writing. If I were writing code in C, I'd just use the getenv() function, but I was wondering if there was a better way to do it. Here's the code that I have so far:

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++ 中的环境变量吗?有没有一些我可能遇到的问题,我可以通过一点点知识避免?

Should I use getenv() to access environment variables in C++? Are there any problems that I'm likely to run into that I can avoid with a little bit of knowledge?

推荐答案

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

There is nothing wrong with using getenv() in C++. It is defined by stdlib.h, or if you prefer the standard library implementation, you can include cstdlib and access the function via the std:: namespace (i.e., std::getenv()). Absolutely nothing wrong with this. In fact, if you are concerned about portability, either of these two versions is preferred.

如果您不关心可移植性并且您正在使用托管 C++,则可以使用 .NET 等效项 - System::Environment::GetEnvironmentVariable().如果您想要 Windows 的非 .NET 等效项,您可以简单地使用 GetEnvironmentVariable() Win32 函数.

If you are not concerned about portability and you are using managed C++, you can use the .NET equivalent - System::Environment::GetEnvironmentVariable(). If you want the non-.NET equivalent for Windows, you can simply use the GetEnvironmentVariable() Win32 function.

相关文章