名稱空間
變體
操作

getenv, getenv_s

來自 cppreference.com
< c‎ | program
在標頭檔案 <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 起)
1) 在宿主指定的環境列表中搜索名為 name 的環境變數,並返回指向與匹配的環境變數關聯的字串的指標。環境變數集及其修改方法是實現定義的。
此函式不要求是執行緒安全的。對 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