質問

私が書いている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でGetEnvironmentVariableを使用する理由、 MSDN getenv から:

  

getenvはデータに対してのみ動作します   ランタイムにアクセス可能な構造   環境ではなくライブラリ   <!> quot; segment <!> quot;プロセスのために作成された   オペレーティングシステム。したがって、   envp引数を使用するプログラム   mainまたはwmainは無効を取得する場合があります   情報。

および MSDN GetEnvironmentから

  

この関数は、   システム環境変数またはユーザー   環境変数。

c ++では、std :: getenvおよび#include <cstdlib>

を使用する必要があります
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top