_dupenv_s_dbg
, _wdupenv_s_dbg
從目前環境取得值 _dupenv_s
的版本,_wdupenv_s
其會配置記憶體_malloc_dbg
,以提供更多偵錯資訊。
語法
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
。
傳回值
若成功,就是零;若失敗,則為錯誤碼。
這些函式會驗證其參數;如果 buffer
或 varname
為 NULL
,則會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,函式會設定 errno
為 EINVAL
,並傳回 EINVAL
。
如果這些函式無法設定足夠的記憶體,則會將 設定 buffer
為 NULL
和 numberOfElements
0,並傳回 ENOMEM
。
備註
和函_dupenv_s_dbg
式與 _dupenv_s
和 _wdupenv_s
函式相同,但定義時_DEBUG
,這些函式會使用的偵錯版本malloc
、 _malloc_dbg
來配置記憶體給環境變數_wdupenv_s_dbg
的值。 如需 偵錯功能 _malloc_dbg
的詳細資訊,請參閱 _malloc_dbg
。
在大部分情況下,您不需要明確呼叫這些函式。 但您可以定義 _CRTDBG_MAP_ALLOC
旗標。 定義 _CRTDBG_MAP_ALLOC
時,呼叫 _dupenv_s
和 _wdupenv_s
會分別重新對應至 _dupenv_s_dbg
和 _wdupenv_s_dbg
,且 blockType
會設為 _NORMAL_BLOCK
。 因此,除非您想要將堆積區塊標示為 _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> |
如需相容性詳細資訊,請參閱相容性。
範例
// 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)