C ++ main()的第三个环境变量参数有什么用?

时间:2013-10-05 14:21:45

标签: c++ environment-variables main

我已经明白char **envpmain的第三个参数,并且在下面的代码的帮助下,我能够看到它实际包含的内容。

int main(int argc, char *argv[], char *env[])
{
  int i;
  for (i=0 ; env[i] ; i++)
    std::cout << env[i] << std::endl;
  std::cout << std::endl;
}

我的问题是:为什么(在什么情况下)程序员需要使用它?我已经找到了很多关于这个参数的解释,但没有任何可以告诉我这里通常使用的。试图了解可能会使用哪种现实世界的情况。

4 个答案:

答案 0 :(得分:8)

这是一个包含所有环境变量的数组。例如,它可用于获取当前登录用户的用户名或主目录。例如,一种情况是,如果我想在用户的主目录中保存配置文件,我需要获取PATH;

int main(int argc, char* argv[], char* env[]){

std::cout << env[11] << '\n';  //this prints home directory of current user(11th for me was the home directory)

return 0;
}

等同于env的{​​{3}}函数更易于使用,例如:

 std::cout << getenv("USER");

打印当前用户的用户名。

答案 1 :(得分:5)

getenv()  函数允许您查找特定环境变量的值,但不提供扫描整个环境变量列表的机制。 envp参数允许您遍历整个环境变量列表,因为演示代码使用getenv()接口显示哪些操作根本不可行。

在POSIX系统上,有一个全局变量extern char **environ;,它也指向环境。函数putenv()(古老的,非首选的,因为它提出了内存管理问题),setenv()unsetenv()也可以操作环境变量列表(由environ定义)。程序可以直接修改environ或它指向的值,但这是不可取的。

如果您使用的是fork()exec*()系列函数,除非您使用execve()并明确指定环境,否则子进程将接收{{1}定义的环境}。

没有标头声明environ - AFAIK,它是POSIX定义的唯一变量,没有标头来声明它。 C标准将environ的{​​{1}}签名视为标准的共同扩展,记录在附件J中。

答案 2 :(得分:2)

这通常用于为整组程序设置配置选项或其他信息。另一个用途是指定特定机器或用户设置的环境设置 众所周知的示例是包含可执行文件查找路径的PATH变量,或包含查找共享库的路径的LD_LIBRARY_PATH变量。

答案 3 :(得分:1)

env可让您访问environment variables。它包含一个字符串数组。例如用户主目录,配置的语言方案,PATH variable(在哪里直接查找可执行程序?),...

您还可以设置单个环境变量。例如,如果您有测试(学习)以及生产系统,则可以将应用程序部署到。在一个系统上,您可以设置变量&#34; MY_APP_MODE = TEST&#34;在另一个系统上你可以指定&#34; MY_APP_MODE = PROD&#34;。因此,您不需要将不同的应用程序部署到测试和生产系统。您的应用程序可以在运行的环境中确定自己。