【问题标题】:getenv() does not find the environment variable that I manually set(I am writing in C)getenv() 找不到我手动设置的环境变量(我用 C 编写)
【发布时间】:2017-02-04 16:29:09
【问题描述】:

如果我尝试获取现有变量之一,一切正常,但如果我尝试访问我的变量,则该方法返回 NULL。我在 Windows 10 下编写:)

#include <stdio.h>
int main()
{
    test1();
    return 0;
}

int test1()
{
    char *libvar = getenv("NS_RULEBASE_PATH");

    FILE *fp;
    fp = fopen("D:/debug.txt", "w+");

    if (libvar) {
        fprintf(fp, libvar);
        fclose(fp);
    }
    else {
        fprintf(fp, "env not set");
        fclose(fp);
    }

    return 0;
}

【问题讨论】:

  • 请在问题中包含您的代码,而不是链接到屏幕截图...
  • 另外,你是怎么设置环境变量的?如果你在cmd 中使用了set,那么它只适用于当前进程。如果您使用 GUI 设置环境变量,那么您需要重新启动应该知道更改的变量的应用程序。
  • 请注意,如果您不知道该字符串中的内容,fprintf(fp, libvar) 会有点危险。更安全的方法是fprintf(fp, "%s", libvar)

标签: c windows environment-variables


【解决方案1】:

正如documentation 所说:

getenv():如果 varname 在 环境表。

在我的电脑上,

char *libvar = getenv("USERNAME");
std::cout << libvar << std::endl;

打印我的用户名。您可以通过键入echo %NS_RULEBASE_PATH% 来查看您的环境变量是否是通过命令提示符设置的,以查看它是否打印了 %NS_RULEBASE_PATH% 的值。

编辑:正如文档所说:

getenv 仅对运行时库可访问的数据结构进行操作,而不对操作系统为进程创建的环境“段”进行操作。

【讨论】:

  • 感谢您的帮助 :) 事实证明,在我再次设置后变量设置不正确,一切正常
  • 很高兴帮助@Givko,欢迎来到 Stack Overflow。如果此答案或任何其他答案解决了您的问题,请将其标记为已接受。这有助于将注意力集中在仍然没有答案的旧 SO。
猜你喜欢
  • 2014-05-10
  • 2016-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-24
  • 2014-02-02
  • 2016-04-07
  • 1970-01-01
相关资源
最近更新 更多