次の方法で共有


_dupenv_s、_wdupenv_s

更新 : 2007 年 11 月

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

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 または varname が NULL の場合、「パラメータの検証」に説明されているように、無効なパラメータ ハンドラが呼び出されます。実行の継続が許可された場合、この関数は errno を EINVAL に設定し、EINVAL を返します。

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

解説

_dupenv_s 関数は、環境変数のリストから varname を検索します。変数が見つかった場合は、バッファが割り当てられ、変数の値がバッファにコピーされます。バッファのアドレスとバッファ長が buffer と numberOfElements に返されます。バッファ自体を割り当てる点で、 _dupenv_s 関数は getenv_s、_wgetenv_s よりも便利な代替関数として使用できます。

ms175774.alert_note(ja-jp,VS.90).gifメモ :

free の呼び出しによるメモリの解放は、呼び出し元プログラムが行います。

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

バッファのサイズを考慮しない場合は、numberOfElements に NULL を渡すことができます。

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」の「解説」を参照してください。

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

TCHAR.H のルーチン

_UNICODE および _MBCS が未定義の場合

_MBCS が定義されている場合

_UNICODE が定義されている場合

_tdupenv_s

_dupenv_s

_dupenv_s

_wdupenv_s

必要条件

ルーチン

必須ヘッダー

_dupenv_s

<stdlib.h>

_wdupenv_s

<stdlib.h> または <wchar.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

使用例

// 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)

.NET Framework の相当するアイテム

System::Environment::GetEnvironmentVariable

参照

参照

プロセス制御と環境制御

環境定数

_dupenv_s_dbg、_wdupenv_s_dbg

getenv_s、_wgetenv_s

_putenv_s、_wputenv_s