头文件:
<cstdlib>
char *getenv(const char* env_var);
作用:
搜索与env_var字符串相匹配的主机环境(操作系统)提供的环境列表,返回该列表成员。
(C++ 11之前) 该函数没有被要求线程安全。其他的对getenv的调用,还有POSIX函数setenv(),unset()以及putenv的调用,都有可能由于之前的调用或者由于前面调用而修改了字符串导致返回值无效。
(C++ 11之后)该函数是一直线程安全(多线程调用不会引入数据竞争)的除非其他函数修改了主机环境。特别的是,POSIX函数setenv(),unsetenv()以及putenv()如果调用时没有进行同步会引入数据竞争。
修改getenv所返回的字符串会引发未知的后果。
参数:
env_var - null结尾的字符串,标明需要查询的环境变量名。
返回值:
返回字符串标明的环境变量值或者返回空指针若该变量没有找到
注意:
在POSIX系统上,环境变量也可通过全局变量environ访问到,由extern char **environ所描述。它位于在<unistd.h>文件中以及在man函数中通过第三方可选参数envp可知。
以下实例是在 Win10 OS上面的:
#include "stdafx.h"
#include "stdio.h"
#include <iostream>
#include <cstdlib>
#pragma warning(disable : 4996)// for _CRT_SECURE_NO_WARNINGS
#if 1
int main()
{
if (const char* env_p = std::getenv("PATH"))
{
std::cout << "My PATH is: " << env_p << '\n' << std::endl;
}
getchar();
return 0;
}
由于会报错:
错误 1 error C4996: 'getenv': This function or variable may be unsafe. Consider using _dupenv_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. C:\Users\xxx\Documents\Visual Studio 2013\Projects\test\test\test.cpp 14 1 test
所以在代码添加一段忽略警告:
#pragma warning(disable : 4996)// for _CRT_SECURE_NO_WARNINGS
输出:
列出用户环境变量,系统环境变量,以及编译器环境变量。