次の方法で共有


_environ、_wenviron

_environ の変数は、プロセス環境を構成するマルチバイト文字列へのポインターの配列へのポインターです。このグローバル変数はより安全な機能 getenv_s、_wgetenv_s バージョンのグローバル変数の代わりに使用する必要のある _putenv_s、_wputenv_s推奨されていません。_environ は、Stdlib.h で宣言されています。

重要 : 重要

この API は、Windows のランタイムで実行するアプリケーションで使用することはできません。詳細については、でサポート /ZW CRT 関数" "を参照してください。

extern char **_environ;

解説

main 関数を使用してプログラムでは、_environ は、オペレーティング システムの環境から取得された設定に従って、プログラムの起動時に初期化します。環境は、フォームの一つ以上のエントリから構成されます。

ENVVARNAME=string

getenv_s と putenv_s は環境のテーブルにアクセスして変更するために _environ の変数を使用します。環境設定を追加または削除するには _putenv が呼び出されたときに環境のテーブルの変更のサイズ。メモリのこの位置は、プログラムのメモリ要件によって変わる場合があります。_environ の値はそれに従って自動的に調整されます。

Stdlib.h で宣言された変数の _wenviron 次のように:

extern wchar_t **_wenviron;

_environのワイド文字バージョンです。wmain 関数を使用してプログラムでは、_wenviron は、オペレーティング システムの環境から取得された設定に従って、プログラムの起動時に初期化します。

mainを使用するプログラムでは、環境がマルチバイト文字列で構成されているため、_wenviron は、最初に NULL です。_wgetenv または _wputenvへの最初の呼び出しで、対応するワイド文字列環境が _wenvironによって作成され、に参照できます。

同様に、wmainを使用するプログラムで、_environ は、環境が文字列で構成されているため、最初に NULL です。_getenv または _putenvへの最初の呼び出しで、対応するマルチバイト文字列環境が _environによって作成され、に参照できます。

2 つの環境のコピー (MBCS および Unicode) がプログラムに同時に存在する場合、ランタイム システムは、両方のコピーを保持する必要があるため、実行時間が長くなります。たとえば、_putenv を呼び出す場合は、2 つの環境文字列が対応するように _wputenv も自動的に呼び出されます。

Caution メモ注意

まれに、ランタイム システムが Unicode 環境とマルチバイトのバージョンの両方を保持している場合、これら二つの環境のバージョンは、対応しないことがあります。これは、一意のマルチバイト文字列はすべて一意の Unicode 文字列に対応していますが、一意の Unicode 文字列は必ずしも一意のマルチバイト文字列に対応していないためです。そのため、2 次の二つの Unicode 文字列に同じマルチバイト文字列にマップされる場合があります。

/MD か /MDd 連結を使用する場合、Unicode のコンテキストのポーリング _environ に意味はありません。CRT DLL では、プログラムの種類は、マルチバイト (または) 不明です。これが最も高いシナリオであるため、マルチバイトの型のみ作成されます。

次の擬似コードは、これがどのように発生するかを説明します。

int i, j;
i = _wputenv( "env_var_x=string1" );  // results in the implicit call:
                                      // putenv ("env_var_z=string1")
j = _wputenv( "env_var_y=string2" );  // also results in implicit call:
                                      // putenv("env_var_z=string2")

この例で使用する表記では、文字列が C のリテラル文字列ではありません; クエリ結果は _wputenv の呼び出しの Unicode 環境のリテラル文字列と putenv の呼び出しのマルチバイト環境文字列を表すプレースホルダーです。2 次の二つの Unicode 環境文字列の文字 'x' のプレースホルダーと 'y' は、現在の MBCS 文字に非常に対応しません。代わりに、両方の MBCS に文字列を変換しようの既定の結果である文字 'z' をマップします。

したがって、マルチバイト環境で、"env_var_zの値がstring2" " に設定すると、putenv への最初の暗黙の呼び出しに "" string1ですが、この値は putenvへの 2 番目の暗黙の呼び出し後に上書きされますenv_var_z "" の値。したがって、Unicode 環境 (_wenviron) とマルチバイト環境 (_environ) 異なり、この一連の呼び出しに従います。

参照

関連項目

グローバル変数

getenv、_wgetenv

getenv_s、_wgetenv_s

_putenv、_wputenv

_putenv_s、_wputenv_s