私が書いているC++プログラムの_$HOME
_環境変数にアクセスしたいと思います。 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++の環境変数にアクセスする必要がありますか?少しの知識で回避できる問題に遭遇する可能性はありますか?
C++でgetenv()
を使用しても問題はありません。 _stdlib.h
_で定義されます。または、標準ライブラリの実装を希望する場合は、cstdlib
を含めて、_std::
_名前空間を介して関数にアクセスできます(つまり、std::getenv()
)。これは絶対に悪いことではありません。実際、移植性が心配な場合は、これら2つのバージョンのいずれかをお勧めします。
移植性に関心があるnotであり、マネージ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でGetEnvironmentVariableを使用する理由 MSDN getenvから :
getenvは、ランタイムライブラリにアクセス可能なデータ構造でのみ動作し、オペレーティングシステムによってプロセス用に作成された環境「セグメント」では動作しません。したがって、mainまたはwmainにenvp引数を使用するプログラムは、無効な情報を取得する場合があります。
そして MSDN GetEnvironmentから :
この関数は、システム環境変数またはユーザー環境変数を取得できます。
C++では、std :: getenvおよび#include <cstdlib>
を使用する必要があります