getenv, getenv_s
來自 cppreference.com
在標頭檔案 <stdlib.h> 中定義 |
||
char *getenv( const char *name ); |
(1) | |
errno_t getenv_s( size_t *restrict len, char *restrict value, rsize_t valuesz, const char *restrict name ); |
(2) | (C11 起) |
此函式不要求是執行緒安全的。對
getenv
的另一次呼叫,以及對 POSIX 函式 setenv()
、unsetenv()
和 putenv()
的呼叫,可能會使先前呼叫返回的指標失效或修改先前呼叫獲得的字串。 修改
getenv
返回的字串將導致未定義行為。2) 與 (1) 相同,但環境變數的值被寫入使用者提供的緩衝區 value(除非為空),並且寫入的位元組數儲存在使用者提供的位置 *len(除非為空)。如果環境變數未在環境中設定,則零被寫入 *len(除非為空),並且 '\0' 被寫入 value[0](除非為空)。此外,以下錯誤在執行時被檢測到,並呼叫當前安裝的約束處理函式:
- name 是空指標
- valuesz 大於 RSIZE_MAX
- value 是空指標且 valuesz 不為零
- 與所有邊界檢查函式一樣,只有當實現定義了 __STDC_LIB_EXT1__ 並且使用者在包含 <stdlib.h> 之前將 __STDC_WANT_LIB_EXT1__ 定義為整數常量 1 時,才保證
getenv_s
可用。
目錄 |
[編輯] 引數
name | - | 識別要查詢的環境變數名稱的空終止字串 |
len | - | 指向使用者提供的位置的指標,getenv_s 將在此處儲存環境變數的長度 |
value | - | 指向使用者提供的字元陣列的指標,getenv_s 將在此處儲存環境變數的內容 |
valuesz | - | getenv_s 允許寫入 dest 的最大字元數(緩衝區大小) |
[編輯] 返回值
1) 標識環境變數值的字串,如果未找到該變數則為空指標。
2) 如果找到環境變數則為零,如果未找到或發生執行時約束違規則為非零。在任何錯誤發生時,將零寫入 *len(除非 len 是空指標)。
[編輯] 注意
在 POSIX 系統上,環境變數也可以透過全域性變數 environ
訪問,其在 <unistd.h> 中宣告為 extern char **environ;,並且透過 main 函式的可選第三個引數 envp
訪問。
以 value 為空指標且 valuesz 為零呼叫 getenv_s
用於確定容納整個結果所需的緩衝區大小。
[編輯] 示例
執行此程式碼
#include <stdio.h> #include <stdlib.h> int main(void) { const char *name = "PATH"; const char *env_p = getenv(name); if (env_p) printf("Your %s is %s\n", name, env_p); }
可能的輸出
Your PATH is /home/gamer/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/share/games
[編輯] 參考
- C23 標準 (ISO/IEC 9899:2024)
- 7.22.4.6 getenv 函式(p: TBD)
- K.3.6.2.1 getenv_s 函式(p: TBD)
- C17 標準 (ISO/IEC 9899:2018)
- 7.22.4.6 getenv 函式(p: 256-257)
- K.3.6.2.1 getenv_s 函式(p: 440-441)
- C11 標準 (ISO/IEC 9899:2011)
- 7.22.4.6 getenv 函式(p: 352-353)
- K.3.6.2.1 getenv_s 函式(p: 606-607)
- C99 標準 (ISO/IEC 9899:1999)
- 7.20.4.5 getenv 函式(p: 317)
- C89/C90 標準 (ISO/IEC 9899:1990)
- 4.10.4.4 getenv 函式
[編輯] 另請參閱
C++ 文件,關於 getenv
|