_dupenv_s_dbg、_wdupenv_s_dbg
現在の環境から値を取得します。追加のデバッグ情報を提供するために _malloc_dbg のメモリを割り当てる _dupenv_s、_wdupenv_s のバージョン。
errno_t _dupenv_s_dbg(
char **buffer,
size_t *numberOfElements,
const char *varname,
int blockType,
const char *filename,
int linenumber
);
errno_t _wdupenv_s_dbg(
wchar_t **buffer,
size_t * numberOfElements,
const wchar_t *varname,
int blockType,
const char *filename,
int linenumber
);
パラメーター
buffer
変数の値を格納するバッファー。numberOfElements
buffer のサイズ。varname
環境変数名。blockType
メモリ ブロックの要求された型 : _CLIENT_BLOCK または _NORMAL_BLOCK。filename
ソース ファイルまたは NULL の名前へのポインター。linenumber
ソース ファイル内の行番号。NULL
戻り値
正常終了した場合は 0 を返します。失敗した場合はエラー コードを返します。
これらの関数は、パラメーターを検証します。buffer または varname が NULL の場合、「パラメーターの検証」に説明されているように、無効なパラメーター ハンドラーが呼び出されます。実行の継続が許可された場合、この関数は errno を EINVAL に設定し、EINVAL を返します。
十分なメモリを割り当てられない場合、これらの関数は buffer を NULL に、numberOfElements を 0 に設定し、ENOMEM を返します。
解説
_dupenv_s_dbg と _wdupenv_s_dbg の関数は _dupenv_s と _wdupenv_s と同じものですが_DEBUG が定義されている場合これらの関数は環境変数の値にメモリを割り当てるために malloc_malloc_dbg のデバッグ バージョンを使用します。_malloc_dbg のデバッグ機能の詳細については_malloc_dbg を参照してください。
ほとんどの場合これらの関数を明示的に呼び出す必要はありません。代わりにフラグ _CRTDBG_MAP_ALLOC を定義できます。_CRTDBG_MAP_ALLOC が定義されている場合_dupenv_s の呼び出しと _wdupenv_s は _NORMAL_BLOCK への blockType に設定 _dupenv_s_dbg と _wdupenv_s_dbg にそれぞれ再マップされます。したがって _CLIENT_BLOCKヒープのブロックを指定しない場合はこれらの関数を明示的に呼び出す必要はありません。ブロック型の詳細についてはデバッグ ヒープ上のメモリ ブロックの型 を参照してください。
汎用テキスト ルーチンのマップ
TCHAR.H のルーチン |
_UNICODE および _MBCS が未定義の場合 |
_MBCS が定義されている場合 |
_UNICODE が定義されている場合 |
---|---|---|---|
_tdupenv_s_dbg |
_dupenv_s_dbg |
_dupenv_s_dbg |
_wdupenv_s_dbg |
必要条件
ルーチン |
必須ヘッダー |
---|---|
_dupenv_s_dbg |
<crtdbg.h> |
_wdupenv_s_dbg |
<crtdbg.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
// crt_dupenv_s_dbg.c
#include <stdlib.h>
#include <crtdbg.h>
int main( void )
{
char *pValue;
size_t len;
errno_t err = _dupenv_s_dbg( &pValue, &len, "pathext",
_NORMAL_BLOCK, __FILE__, __LINE__ );
if ( err ) return -1;
printf( "pathext = %s\n", pValue );
free( pValue );
err = _dupenv_s_dbg( &pValue, &len, "nonexistentvariable",
_NORMAL_BLOCK, __FILE__, __LINE__ );
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