3

C++ アプリケーションの開発に MS Visual Studio 2008 を使用しています。「getenv()」関数を使用して環境変数を取得していますが、検索した環境変数が存在しない場合にアクセス違反の例外がスローされます。ここでの問題とそれを修正する方法は何ですか?

検索された環境変数が存在しない場合、getenv() 関数は NULL ポインターを返すとドキュメントに記載されていますが、なぜこのアクセス違反の例外が発生するのでしょうか?

4

1 に答える 1

5

を使用するとstd::stringクラスが呼び出され、NULL 文字列が渡されるとアクセス違反が発生します。あなたがする必要があるのは次のようなものです:strlenstd::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);
于 2011-03-08T12:23:38.133 に答える