Share via


_putenv_s, _wputenv_s

建立、修改或移除環境變數。 這些函式是 具有安全性增強功能的 _putenv_wputenv 版本,如 CRT 中的安全性功能中所述。

重要

這個 API 不能用於在 Windows 執行階段中執行的應用程式。 如需詳細資訊,請參閱 CRT functions not supported in Universal Windows Platform apps (通用 Windows 平台應用程式中不支援的 CRT 函式)。

語法

errno_t _putenv_s(
   const char *varname,
   const char *value_string
);
errno_t _wputenv_s(
   const wchar_t *varname,
   const wchar_t *value_string
);

參數

varname
環境變數名稱。

value_string
要設定的環境變數值。

傳回值

如果成功則為 0,否則為錯誤碼。

錯誤條件

varname value_string 傳回值
NULL 任意 EINVAL
任意 NULL EINVAL

如果發生其中一個錯誤狀況,這些函式會叫用不正確參數處理常式,如參數驗證 中所述 。 如果允許繼續執行,這些函式會傳回 EINVAL,並將 errno 設為 EINVAL

備註

_putenv_s 函式會加入新的環境變數,或修改現有環境變數的值。 環境變數會定義處理序所執行的環境 (例如,要與程式連結之程式庫的預設搜尋路徑)。 _wputenv_s 是寬字元版本的 _putenv_senvstring_wputenv_s 引數是寬字元字串。

根據預設,此函式的全域狀態會限定于應用程式。 若要變更此行為,請參閱 CRT 中的全域狀態。

泛型文字常式對應

TCHAR.H 常規 _UNICODE_MBCS 未定義 _MBCS 定義 _UNICODE 定義
_tputenv_s _putenv_s _putenv_s _wputenv_s

varname 是要加入或修改之環境變數的名稱,而 value_string 是變數的值。 如果 varname 已是環境的一部分,則其值會取代為 value_string;否則新 varname 變數和其 value_string 會加入環境。 您可以為 指定空字串 (也就是 ""value_string 來從環境中移除變數。

_putenv_s_wputenv_s 只會影響目前進程本機的環境;您無法使用它們來修改命令層級環境。 這些函式只會在執行階段程式庫可以存取的資料結構上運作,而不會在作業系統為某個處理序所建立的環境「區段」上運作。 目前處理序終止時,環境會還原為呼叫處理序層級,而這在大部分情況下是作業系統層級。 不過,修改過的環境可以傳遞至 _spawn_execsystem 所建立的任何新處理序,而這些新的處理序會取得 _putenv_s_wputenv_s 所加入的任何新項目。

請勿直接變更環境專案;請改用 _putenv_s_wputenv_s 來變更它。 特別的是,直接釋出 _environ[] 全域陣列的項目可能會造成需要處理的無效記憶體。

getenv_putenv_s 使用全域變數 _environ 來存取環境資料表;_wgetenv_wputenv_s 使用 _wenviron_putenv_s_wputenv_s 可能會變更 _environ_wenviron 的值,進而讓 mainenvp 引數和 wmain_wenvp 引數失效。 因此,使用 _environ_wenviron 存取環境資訊更安全。 如需 與 全域變數關聯 _putenv_s 性的詳細資訊,請參閱 _wenviron_environ_wputenv_s

注意

_putenv_s_getenv_s 系列的函式不是安全執行緒。 _putenv_s 正在修改字串時,_getenv_s 可能會傳回字串指標,因而導致隨機失敗。 確定這些函式的呼叫已同步。

需求

常式 必要的標頭
_putenv_s <stdlib.h>
_wputenv_s <stdlib.h><wchar.h>

如需相容性詳細資訊,請參閱相容性

範例

如需示範如何使用 _putenv_s 的範例,請參閱 。 _wgetenv_sgetenv_s

另請參閱

進程和環境控制
getenv, _wgetenv
_searchenv, _wsearchenv