Исключение нарушения прав доступа при использовании getenv для извлечения переменной среды, которая не существует - PullRequest
1 голос
/ 08 марта 2011

Я использую MS Visual Studio 2008 для разработки приложения на C ++.Я использую функцию 'getenv ()' для извлечения переменной среды, но когда искомая переменная среды не существует, она выдает исключение нарушения доступа.В чем здесь проблема и как ее исправить?

В документах говорится, что функция getenv () будет возвращать указатель NULL, если искомая переменная среды не существует, но почему я получаю это исключение нарушения прав доступа

1 Ответ

3 голосов
/ 08 марта 2011

Класс std::string вызывает strlen при использовании std::string(str), что приведет к нарушению доступа при передаче пустой строки.Что вам нужно сделать, это что-то вроде:

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