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