문제

나는 접근하고 싶다 $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(). Windows의 비.NET에 해당하는 것을 원한다면 간단히 사용할 수 있습니다. 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 기반 시스템에서 사용합니다 getenv

Windows에서 GetEnvironmentVariable을 사용하는 이유 msdn getenv에서:

GetEnV는 운영 체제에서 프로세스를 위해 생성 된 환경 "세그먼트"가 아닌 런타임 라이브러리에 액세스 할 수있는 데이터 구조에서만 작동합니다. 따라서 ENVP 인수를 기본 또는 WMAIN에 사용하는 프로그램은 유효하지 않은 정보를 검색 할 수 있습니다.

그리고 MSDN GetEnvironment에서:

이 기능은 시스템 환경 변수 또는 사용자 환경 변수를 검색 할 수 있습니다.

C ++에서는 std :: getenv를 사용해야합니다. #include <cstdlib>

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top