2011-03-08 5 views
1

Microsoft Visual Studio 2008을 사용하여 C++ 응용 프로그램을 개발하고 있습니다. 환경 변수를 가져 오는 데 getenv() 함수를 사용하지만 검색된 환경 변수가 없으면 액세스 위반 예외가 발생합니다. 여기서 문제는 무엇이며이를 해결하는 방법은 무엇입니까?getenv를 사용하여 존재하지 않는 환경 변수를 검색하는 동안 액세스 위반 예외가 발생했습니다.

검색된 환경 변수가 없으면 getenv() 함수가 NULL 포인터를 반환하지만이 액세스 위반 예외가 발생하는 이유는 무엇입니까?

+0

의 GetEnv()가 NULL을 반환하는 경우 검사하지 않을 가능성. 코드를 보여주십시오. – Erik

+0

getenv에서 값을 반환하면서 무엇을하고 있습니까? 반환 된 NULL을 역 참조하는 것 같습니다. 예를 들어'std :: string var = getenv ("MY_VAR")'와 같은 문자열에 넣으려고하면됩니다. – Pete

답변

2

std::string 클래스는 std::string(str)을 사용할 때 strlen을 호출하며 NULL 문자열이 전달되면 액세스 위반이 발생합니다. 당신이해야 할 것은 같은 :이처럼 사용할 수

std::string env(const char *name) 
{ 
    const char *ret = getenv(name); 
    if (!ret) return std::string(); 
    return std::string(ret); 
} 

또는

bool getenv(const char *name, std::string &env) 
{ 
    const char *ret = getenv(name); 
    if (ret) env = std::string(ret); 
    return !!ret; 
} 

:

std::string myenv; 
if (getenv("MYENV", myenv)) 
    doSomethingWithMyEnv(myenv);