C++ アプリケーションの開発に MS Visual Studio 2008 を使用しています。「getenv()」関数を使用して環境変数を取得していますが、検索した環境変数が存在しない場合にアクセス違反の例外がスローされます。ここでの問題とそれを修正する方法は何ですか?
検索された環境変数が存在しない場合、getenv() 関数は NULL ポインターを返すとドキュメントに記載されていますが、なぜこのアクセス違反の例外が発生するのでしょうか?
C++ アプリケーションの開発に MS Visual Studio 2008 を使用しています。「getenv()」関数を使用して環境変数を取得していますが、検索した環境変数が存在しない場合にアクセス違反の例外がスローされます。ここでの問題とそれを修正する方法は何ですか?
検索された環境変数が存在しない場合、getenv() 関数は NULL ポインターを返すとドキュメントに記載されていますが、なぜこのアクセス違反の例外が発生するのでしょうか?
を使用するとstd::string
クラスが呼び出され、NULL 文字列が渡されるとアクセス違反が発生します。あなたがする必要があるのは次のようなものです: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);