次の方法で共有


_environ、_wenviron

_environ 変数はプロセスの環境を構築するマルチバイト文字へのポインターの配列へのポインターです。 このグローバル変数はグローバル変数の代わりに使用する必要がある _putenv_s、_wputenv_s推奨されて、セキュリティを強化したバージョンについては getenv_s、_wgetenv_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 も自動的に呼び出されます。

注意

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

/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」True 「に設定した場合、putenv への最初の暗黙の呼び出しが「string1」ですが、この値は putenvへの第 2 の暗黙の呼び出しで上書きされますenv_var_z「と」の値。 したがって、Unicode の環境 (_wenviron) とマルチバイト環境 (_environ) があり、この一連の呼び出しに従います。

参照

関連項目

グローバル変数

getenv、_wgetenv

getenv_s、_wgetenv_s

_putenv、_wputenv

_putenv_s、_wputenv_s