_putenv_s、_wputenv_s
建立、修改,或移除環境變數。 這些是 _putenv、_wputenv 的安全性增強版本,如 CRT 中的安全性功能中所述。
重要
這個應用程式開發介面不能用於 Windows 執行階段 中執行的應用程式。如需詳細資訊,請參閱 /ZW 不支援 CRT 函式。
errno_t _putenv_s(
const char *name,
const char *value
);
errno_t _wputenv_s(
const wchar_t *name,
const wchar_t *value
);
參數
name
環境變數的名稱。value
要設定至環境變數的值。
傳回值
如果成功,傳回 0,反之為錯誤碼。
錯誤狀況
name |
value |
傳回值 |
---|---|---|
NULL |
any |
EINVAL |
any |
NULL |
EINVAL |
如果其中一個錯誤狀況發生,這些函式叫用無效的參數處理常式,如 參數驗證中所述。 如果允許繼續執行,這些函式會傳回 EINVAL,並將 errno 設為 EINVAL。
備註
_putenv_s 函式會將新的環境變數或修改現有的環境變數的值。 環境變數定義執行流程的環境 (例如,程式可以連結到為了文件庫所設的預設路徑)。 _wputenv_s 是 _putenv_s 的寬字元版本。 _wputenv_s 的 envstring 引數是寬字元字串。
一般文字常式對應
TCHAR.H 常式 |
_UNICODE 和 _MBCS 未定義 |
_MBCS 已定義 |
_UNICODE 已定義 |
---|---|---|---|
_tputenv_s |
_putenv_s |
_putenv_s |
_wputenv_s |
name 是將加入或修改的環境變數名稱且 value 是變數值。 如果 name 已經是環境的一部分,它的值會由 value取代; 否則,新 name 變數和其 value 會被加入至環境。 您可以從環境移除變數藉由指定空字串 ("") 至 value。
_putenv_s 和 _wputenv_s 只會影響目前處理序的環境; 您不能使用這些修改命令層級環境。 這些函式只能在能夠被執行階段文件庫存取的資料結構運作,而不是於作業系統建立給程序的 "環境區塊"。 當目前的處理程序終止時,環境會還原至呼叫程序層級,多數情況下,都是還原到作業系統層級。 不過,修改過的環境可以透過 _spawn、 _exec或 system 傳遞至任何建立的新處理序,因此,這些處理序透過 _putenv_s 和 _wputenv_s 取得任何新項目。
請勿直接變更環境輸入; 相反地,請使用 _putenv_s 或 _wputenv_s 以變更它。 特別是,直接釋放 _environ[] 全域陣列的項目可能會導致無效的記憶體被定址。
getenv 和 _putenv_s 使用這個全域變數 _environ 以存取環境表; _wgetenv 和 _wputenv_s 使用 _wenviron。 _putenv_s 和 _wputenv_s 可能變更 _environ 和 _wenviron的值,並因此使 main 的 envp 引數以及 wmain 的 _wenvp 引數無法使用。 因此,使用 _environ 或 _wenviron 存取環境資訊比較安全。 如需 _putenv_s 和 _wputenv_s 與全域變數的關係,請參閱 _environ、_wenviron。
注意事項 |
---|
_putenv_s 和 _getenv_s 函式群不是安全執行緒。當 _putenv_s 修改字串時產生隨機失敗,_getenv_s 會傳回字串指標。確定這些函式的呼叫已同步。 |
需求
常式 |
必要的標頭 |
---|---|
_putenv_s |
<stdlib.h> |
_wputenv_s |
<stdlib.h> 或 <wchar.h> |
如需其他相容性資訊,請參閱 相容性。
範例
如需示範如何使用 _putenv_s的範例,請參閱 getenv_s、_wgetenv_s範例。
.NET Framework 對等用法
不適用。若要呼叫標準 C 函式,請使用 PInvoke。如需詳細資訊,請參閱平台叫用範例。