如何检查是否从 C 程序设置了环境变量

ple*_*ver 2 c unix environment-variables

我目前正在开发一个程序,如果设置了环境变量,我想打印特殊输出。

例如,假设我想要环境变量"DEBUG"

在我的 bash 命令提示符中,我DEBUG通过键入以下命令进行设置: DEBUG=

然后在我的 C 程序中,我可以通过打印出char **environ. DEBUG确实出现在此环境打印输出中。

但是,我不知道如何检索此环境变量以进行条件检查。我试过像这样使用 getenv 函数:

getenv("DEBUG")
Run Code Online (Sandbox Code Playgroud)

如果我尝试打印出如下所示的输出,则会出现段错误:

printf("get env: %s\n", getenv("DEBUG"));
Run Code Online (Sandbox Code Playgroud)

我什至在一个已知的环境变量上试过这个,比如"HOME"

printf("get env: %s\n", getenv("HOME"));
Run Code Online (Sandbox Code Playgroud)

这仍然会产生段错误。

有没有人有任何经验检查是否从 C 程序设置了环境变量?我什至在拉出一个阻止我这样做的环境变量时也遇到了问题。

Win*_*ute 6

getenv返回NULL时,没有设置,这就是它要求环境变量。因此,您的支票可能只是

if(getenv("DEBUG")) {
  // DEBUG is set
} else {
  // DEBUG is not set
}
Run Code Online (Sandbox Code Playgroud)

请注意,shell 和环境变量之间存在差异;如果你想让一个变量出现在 shell 的子进程的环境中,你必须export在 shell 中使用它:

export DEBUG=some_value
Run Code Online (Sandbox Code Playgroud)

或者

DEBUG=some_value
export DEBUG
Run Code Online (Sandbox Code Playgroud)

光说是不够的DEBUG=some_value

  • 他将 NULL 打印为字符串。 (2认同)