Доступ К Переменным Среды В C++
Я хотел бы иметь доступ к $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++? Есть ли какие-либо проблемы, с которыми я, вероятно, столкнусь, что я могу избежать с небольшим количеством знаний?
4 ответов:
нет ничего плохого в использовании
getenv()в C++. Он определяетсяstdlib.h, или если вы предпочитаете стандартную реализацию библиотеки, вы можете включитьcstdlibи получить доступ к функции черезstd::пространство имен (т. е.std::getenv()). Абсолютно ничего плохого в этом. На самом деле, если вы беспокоитесь о переносимости, предпочтительна любая из этих двух версий.если вы не обеспокоены переносимостью и вы используете управляемый C++, вы можете использовать .NET эквивалент -
System::Environment::GetEnvironmentVariable(). Если вы хотите, чтобы non-.NET эквивалент для Windows, вы можете просто использовать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 используйте совместимость
зачем использовать GetEnvironmentVariable в Windows,от MSDN getenv:
getenv работает только с данными структуры, доступные для времени выполнения библиотека, а не окружающая среда "сегмент", созданный для процесса операционная система. Следовательно, программы, использующие аргумент envp для main или wmain может получить недопустимый информация.
эта функция может получить либо системная переменная среды или пользователь переменная окружения.
Comments