_dupenv_s, _wdupenv_s

現在の環境から値を取得します。

重要

この API は、Windows ランタイムで実行するアプリケーションでは使用できません。 詳細については、「ユニバーサル Windows プラットフォーム アプリでサポートされていない CRT 関数」を参照してください。

構文

errno_t _dupenv_s(
   char **buffer,
   size_t *numberOfElements,
   const char *varname
);
errno_t _wdupenv_s(
   wchar_t **buffer,
   size_t *numberOfElements,
   const wchar_t *varname
);

パラメーター

buffer
変数の値を格納するバッファー。

numberOfElements
buffer のサイズ。

varname
環境変数名。

戻り値

正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。

これらの関数は、パラメーターを検証します。 buffer または varnameNULLされている場合は、「パラメーターの検証 で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、この関数は errnoEINVAL に設定し、EINVAL を返します。

これらの関数で十分なメモリを割り当てることができない場合は、 bufferNULL に設定し、 numberOfElements を 0 に設定し、 ENOMEMを返します。

解説

_dupenv_s 関数は、環境変数のリストから varname を検索します。 変数が見つかると、_dupenv_s はバッファーを割り当てて変数の値をバッファーにコピーします。 バッファーのアドレスと長さが buffer および numberOfElements で返されます。 バッファー自体が割り当てられるため、_dupenv_sは、_wgetenv_sgetenv_sに代わる便利な方法を提供します。

Note

freeを呼び出してメモリを解放するのは、呼び出し元プログラムの責任です。

変数が見つからない場合、 bufferNULLに設定され、 numberOfElements は 0 に設定され、戻り値は 0 になります。この状況はエラー状態と見なされないためです。

バッファーのサイズに関心がない場合は、numberOfElementsNULLを渡すことができます。

Windows オペレーティング システムでは、_dupenv_s は大文字と小文字を区別しません。 _dupenv_s 関数は、_environ グローバル変数が指す環境のコピーを使用して環境にアクセスします。 _environ については、「getenv_s_wgetenv_s」の「解説」を参照してください。

buffer の値は、環境変数の値のコピーです。この値を変更しても環境には影響しません。 環境変数の値を変更するには、_putenv_s_wputenv_s 関数を使用します。

_wdupenv_s_dupenv_s のワイド文字バージョンで、_wdupenv_s の引数はワイド文字列です。 _wenviron グローバル変数は _environ と同じですが、ワイド文字を扱えるという点で異なっています。 _wenviron の詳細については、「getenv_s_wgetenv_s」の「解説」を参照してください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT でのグローバル状態」を参照してください。

汎用テキスト ルーチンのマップ

TCHAR.H ルーチン _UNICODE_MBCS が定義されていない _MBCS が定義されている _UNICODE が定義されている
_tdupenv_s _dupenv_s _dupenv_s _wdupenv_s

要件

ルーチンによって返される値 必須ヘッダー
_dupenv_s <stdlib.h>
_wdupenv_s <stdlib.h> または <wchar.h>

互換性の詳細については、「 Compatibility」を参照してください。

// crt_dupenv_s.c
#include  <stdlib.h>

int main( void )
{
   char *pValue;
   size_t len;
   errno_t err = _dupenv_s( &pValue, &len, "pathext" );
   if ( err ) return -1;
   printf( "pathext = %s\n", pValue );
   free( pValue );
   err = _dupenv_s( &pValue, &len, "nonexistentvariable" );
   if ( err ) return -1;
   printf( "nonexistentvariable = %s\n", pValue );
   free( pValue ); // It's OK to call free with NULL
}
pathext = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.pl
nonexistentvariable = (null)

関連項目

プロセスと環境の制御
環境定数
_dupenv_s_dbg, _wdupenv_s_dbg
getenv_s, _wgetenv_s
_putenv_s, _wputenv_s