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

标签 c unix environment-variables

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

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

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

然后在我的 C 程序中,我可以通过打印出 char **environ 的所有内容来验证此环境变量是否已设置。 DEBUG 确实出现在此环境打印输出中。

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

getenv("DEBUG")

如果我尝试像下面这样打印出这个输出,我会得到一个段错误:

printf("get env: %s\n", getenv("DEBUG"));

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

printf("get env: %s\n", getenv("HOME"));

仍然会产生段错误。

有没有人有检查环境变量是否从 C 程序设置的经验?我什至在提取单个环境变量时遇到问题,这使我无法这样做。

最佳答案

getenv 在要求的环境变量未设置时返回 NULL。因此,您的支票可能只是

if(getenv("DEBUG")) {
  // DEBUG is set
} else {
  // DEBUG is not set
}

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

export DEBUG=some_value

DEBUG=some_value
export DEBUG

仅仅说 DEBUG=some_value 是不够的。

关于c - 如何检查是否从 C 程序设置了环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28004602/

相关文章:

objective-c - 大端还是小端?

c - 打印给定的输入字符数

c - 调试 makefile

node.js - 如何使用travis-ci的.travis.yml为Node.js应用提供环境参数?

c - C- 中的位移位 i 是否打开?

json - 如何使用 jq 从 JSON 中获取键名

c - 如何在C unix中使用空格分隔符分割字符串?

linux - 在Linux中使用空格设置环境变量

PATH 环境变量,我做错了什么?

矩阵的 c 函数 free()