添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
环境变量名称。

返回指向包含 varname 的环境表项的指针。 使用返回的指针修改环境变量并不安全。 请使用 _putenv 函数修改环境变量的值。 如果在环境表中找不到 varname ,则返回值为 NULL

getenv 函数将搜索 varname 的环境变量列表。 在 Windows 操作系统中, getenv 不区分大小写。 getenv _putenv 使用全局变量 _environ 所指向环境的副本来访问该环境。 getenv 只能在可访问运行时库的数据结构上执行,不能在由操作系统对进程创建的环境“段”上执行。 因此,对 main wmain 使用 envp 参数的程序可能会检索无效信息。

如果 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) 环境已存在,则将由 _environ 创建对应的 MBCS 环境并指向该环境。

当程序中同时存在环境的两个副本(MBCS 和 Unicode)时,运行时系统必须 maintain(保留)这两个副本,而这将减慢执行时间。 例如,当调用 _putenv 时,也会自动调用 _wputenv ,以便两个环境字符串相对应。

在极少数情况下,当运行时系统同时 maintaining(保留)环境的 Unicode 版本和多字节版本时,这两个环境版本可能不完全对应。 这是因为,虽然任何唯一的多字节字符字符串将映射到唯一的 Unicode 字符串,但从唯一的 Unicode 字符串到多字节字符字符串的映射却不一定是唯一的。 有关详细信息,请参阅 _environ _wenviron

_putenv _getenv 系列的函数不是线程安全函数。 当 _putenv 修改字符串时, _getenv 可能会返回字符串指针,从而导致随机性失败。 确保对这些函数的调用同步。

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

一般文本例程映射

TCHAR.H 例程 _UNICODE _MBCS 未定义 _MBCS 已定义 _UNICODE 已定义

若要检查或更改 TZ 环境变量的值,请按需使用 getenv _putenv _tzset 。 有关 TZ 的详细信息,请参阅 _tzset _daylight timezone _tzname

必需的标头 // 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 );
Original LIB variable is: C:\progra~1\devstu~1\vc\lib
New LIB variable is: c:\mylib;c:\yourlib

进程和环境控制