Вопрос

Я хотел бы иметь доступ к $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 ++?Есть ли какие-либо проблемы, с которыми я, вероятно, столкнусь, которых я мог бы избежать, обладая некоторыми знаниями?

Это было полезно?

Решение

Нет ничего плохого в использовании getenv() в C ++. Он определяется stdlib.h, или, если вы предпочитаете стандартную реализацию библиотеки, вы можете включить cstdlib и получить доступ к функции через пространство имен std:: (т.е. std::getenv()). Абсолютно ничего плохого в этом нет. На самом деле, если вас беспокоит переносимость, предпочтительна любая из этих двух версий.

Если вы не обеспокоены переносимостью и используете управляемый C ++, вы можете использовать эквивалент .NET - System::Environment::GetEnvironmentVariable() . Если вы хотите не эквивалентный .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 получаем среду:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top