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; }
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?
Do so by pressing the Windows and R key on your keyboard at the same time. Type sysdm. cpl into the input field and hit Enter or press Ok. In the new window that opens, click on the Advanced tab and afterwards on the Environment Variables button in the bottom right of the window.
Environment variables are stored together with command line arguments at the top of the process memory layout, above the stack.
The getenv() function searches the environment variables at runtime for an entry with the specified name, and returns a pointer to the variable's value. If there is no environment variable with the specified name, getenv() returns a null pointer.
To display the values of environment variables, use the printenv command. If you specify the Name parameter, the system only prints the value associated with the variable you requested.
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.
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.
I would just refactor the code a little bit:
std::string getEnvVar( std::string const & key ) const { char * val = getenv( key.c_str() ); return val == NULL ? std::string("") : std::string(val); }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With