Доступ К Переменным Среды В 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++? Есть ли какие-либо проблемы, с которыми я, вероятно, столкнусь, что я могу избежать с небольшим количеством знаний?

943   4  

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);
}

зачем использовать GetEnvironmentVariable в Windows,от MSDN getenv:

getenv работает только с данными структуры, доступные для времени выполнения библиотека, а не окружающая среда "сегмент", созданный для процесса операционная система. Следовательно, программы, использующие аргумент envp для main или wmain может получить недопустимый информация.

и от MSDN GetEnvironment:

эта функция может получить либо системная переменная среды или пользователь переменная окружения.

В C++, вы должны использовать std::getenv и #include <cstdlib>

Comments

    Ничего не найдено.