?
This document uses PHP Chinese website manual Release
在頭文件<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
在主機指定的環(huán)境列表中搜索具有名稱的環(huán)境變量,并返回指向與匹配的環(huán)境變量關(guān)聯(lián)的字符串的指針。環(huán)境變量和改變它的方法的集合是實現(xiàn)定義的。
這個函數(shù)不需要是線程安全的。另一個對getenv的調(diào)用,以及對POSIX函數(shù)setenv(),unsetenv()和putenv()的調(diào)用可能會使先前調(diào)用返回的指針無效,或者修改先前調(diào)用中獲得的字符串。
修改由getenv返回的字符串將調(diào)用未定義的行為。
2)與(1)相同,只是將環(huán)境變量的值寫入用戶提供的緩沖區(qū)值(除非為空),并且寫入的字節(jié)數(shù)存儲在用戶提供的位置* len(除非為空)。 如果環(huán)境變量未在環(huán)境中設(shè)置,則將0寫入* len(除非為null),并且將'\ 0'寫入值[0](除非為空)。 另外,在運行時檢測到以下錯誤并調(diào)用當(dāng)前安裝的約束處理函數(shù):
name
是一個空指針
valuesz
大于 RSIZE_MAX
value
是一個空指針,valuesz
不為零
作為所有邊界檢查函數(shù),只有當(dāng)__STDC_LIB_EXT1__由實現(xiàn)定義并且用戶在包含stdlib.h之前將__STDC_WANT_LIB_EXT1__定義為整數(shù)常量1時,getenv_s才能保證可用。
name | - | 以空字符結(jié)尾的字符串標(biāo)識要查找的環(huán)境變量的名稱 |
---|---|---|
len | - | 指向用戶提供的位置的指針,其中g(shù)etenv_s將存儲環(huán)境變量的長度 |
value | - | 指向用戶提供的字符數(shù)組的指針,其中g(shù)etenv_s將存儲環(huán)境變量的內(nèi)容 |
valuesz | - | 允許getenv_s寫入dest的最大字符數(shù)(緩沖區(qū)的大?。?/p> |
1)如果沒有找到這樣的變量,則標(biāo)識環(huán)境變量或空指針的值的字符串。
2)如果找到環(huán)境變量,則為零;如果未發(fā)現(xiàn)運行時常量違例發(fā)生,則為非零。在出現(xiàn)任何錯誤時,寫入零*len
(除非len
是空指針)。
在POSIX系統(tǒng)上,環(huán)境變量也可以通過全局變量environ訪問,聲明為extern char ** environ; 在<unistd.h>中,并通過主函數(shù)的可選第三個參數(shù)envp。
調(diào)用getenv_s時,值為null的指針和valuesz的值為零用于確定保存整個結(jié)果所需的緩沖區(qū)的大小。
#include <stdio.h>#include <stdlib.h> int main(void){ char *env_p = getenv("PATH"); if (env_p) printf("PATH = %s\n", env_p);}
可能的輸出:
PATH = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
C11標(biāo)準(zhǔn)(ISO / IEC 9899:2011):
7.22.4.6 getenv函數(shù)(p:352-353)
K.3.6.2.1 getenv_s函數(shù)(p:606-607)
C99標(biāo)準(zhǔn)(ISO / IEC 9899:1999):
7.20.4.5 getenv函數(shù)(p:317)
C89 / C90標(biāo)準(zhǔn)(ISO / IEC 9899:1990):
4.10.4.4 getenv函數(shù)
| getenv的C ++文檔 |