getenv, _wgetenv
获取当前环境的值。 这些功能的更安全版本可用;请参见 getenv_s, _wgetenv_s。
重要
此 API 不能在运行时的窗口执行的应用程序。有关更多信息,请参见 CRT 函数不支持与 /ZW。
char *getenv(
const char *varname
);
wchar_t *_wgetenv(
const wchar_t *varname
);
参数
- varname
环境变量名称。
返回值
返回指向包含 varname环境表项。 修改环境变量的值返回的指针,是不安全的。 使用 _putenv 功能修改环境变量的值。 如果 varname 在环境表中,未找到返回值是 NULL。
备注
getenv 功能搜索环境变量列表 varname。 getenv 不区分大小写在 windows 操作系统。 getenv 和 _putenv 使用环境的副本用全局变量指向该 _environ 访问该环境。 getenv 仅对数据结构可以访问运行库和不在环境“进程”创建的段由操作系统。 因此,使用 envp 参数。主 或 wmain 的程序可以检索无效信息。
如果 varname 是 NULL,此函数调用无效参数处理程序,如 参数验证所述。 如果执行允许继续,此功能设置 errno 到 EINVAL 并返回 NULL。
_wgetenv 是 getenv的宽字符版本;参数和返回 _wgetenv 的值是宽字符字符串。 _wenviron 全局变量是 _environ的宽字符版本。
在 MBCS 程序 (例如,在 SBCS ASCII 程序),_wenviron 最初是 NULL,因为环境由多字节字符字符串组成。 然后,在第一次调用 _wputenv,或在第一次调用 _wgetenv,如果 (mbcs) 环境已存在,相应的宽字符环境创建的字符串然后指向。_wenviron。
同样在 Unicode (_wmain) 程序,_environ 最初是 NULL,因为环境由宽字符字符串组成。 然后,在第一次调用 _putenv,或在第一次调用 getenv,只要 (unicode) 环境已存在,一个对应的 MBCS 环境创建然后指向。_environ。
当环境的两个副本 (MBCS 和 Unicode) 时同时存在于程序,运行时系统必须保留两个副本,导致较慢的执行时间。 例如,在中,只要调用 _putenv,对 _wputenv 的调用也会自动执行,因此,两个环境字符串对应。
警告
在极少数情况下,那么,当该运行时系统维护一个 Unicode 版本和该环境中的某个多字节版本,这两个环境版本可能无法正确对应。这是因为,不过,任何单个多字节字符字符串映射到单个 Unicode 字符串,从单个 Unicode 字符串到多字节字符字符串不一定是唯一的。有关更多信息,请参见 _environ,_wenviron。
备注
功能 _putenv 和 _getenv 系列不是线程安全的。_getenv 可以返回字符串指针,当 _putenv 修改该字符串时,会导致随机崩溃。确保对这些函数同步。
一般文本例程映射
TCHAR.H 实例 |
未定义的_UNICODE & _MBCS |
定义的_MBCS |
定义的_UNICODE |
---|---|---|---|
_tgetenv |
getenv |
getenv |
_wgetenv |
根据需要检查或更改 TZ 环境变量、使用 getenv,_putenv 和 _tzset 的值。 有关 TZ的更多信息,请参见 _tzset 和 _daylight、时区和_tzname。
要求
实例 |
必需的标头 |
---|---|
getenv |
<stdlib.h> |
_wgetenv |
<stdlib.h> 或 <wchar.h> |
有关其他的兼容性信息,请参见中介绍的 兼容性。
示例
// crt_getenv.c
// compile with: /W3
// This program uses getenv to retrieve
// the LIB environment variable and then uses
// _putenv to change it to a new value.
#include <stdlib.h>
#include <stdio.h>
int main( void )
{
char *libvar;
// Get the value of the LIB environment variable.
libvar = getenv( "LIB" ); // C4996
// Note: getenv is deprecated; consider using getenv_s instead
if( libvar != NULL )
printf( "Original LIB variable is: %s\n", libvar );
// Attempt to change path. Note that this only affects the environment
// variable of the current process. The command processor's
// environment is not changed.
_putenv( "LIB=c:\\mylib;c:\\yourlib" ); // C4996
// Note: _putenv is deprecated; consider using putenv_s instead
// Get new value.
libvar = getenv( "LIB" ); // C4996
if( libvar != NULL )
printf( "New LIB variable is: %s\n", libvar );
}
.NET Framework 等效项
System::Environment::GetEnvironmentVariable