【问题标题】:C++ getenv always returns null valueC++ getenv 总是返回空值
【发布时间】:2011-09-12 04:23:20
【问题描述】:

我刚刚添加了环境变量“DataDir”,但是 getenv 函数仍然返回 null 值。

这是我的代码: const char *ret = getenv("DataDir");

我重新启动了我的电脑,它完成了。

【问题讨论】:

  • 你是如何设置环境变量的?可以echo吗?
  • 也许重启父进程?通常环境是继承的。
  • 展示你如何设置环境;显示您如何检测到 ret 为空。
  • @sinelaw: getenv 既是标准 C++ 库函数,也是标准 C 库函数。 C++ 包含大部分 C 标准库。
  • @sinelaw:我争论的主要是“与 c++ 无关”这句话。

标签: c++


【解决方案1】:

你记得在运行程序之前导出变量吗?例如,如果你在 linux 上使用 bash shell,你一般应该使用export DataDir="..."

在 Windows 上,如果您使用系统设置窗口设置环境变量,它不会立即传播到所有正在运行的程序。如果“我重新启动计算机并完成了”。意思是“重新启动计算机解决了问题”,那么我相信这可以解释问题。更改环境变量后,尝试关闭所有程序,然后启动 CMD 会话(或 Visual Studio)并再次运行程序

【讨论】:

  • 这无法解释为什么重新启动计算机似乎可以解决问题。
【解决方案2】:

您在 Windows 上运行吗?你是通过控制面板设置环境变量的吗?如果是这样,那只会影响您在更改设置之后启动的进程(您启动的程序)。如果您从命令提示符运行,并且命令提示符没有继承新的环境变量,那么您的程序也不会继承它。

重启后,所有新进程都会继承新的环境变量。

另一方面,如果你设置了变量然后运行程序:

C:\>set DataDir=blah
C:\>.\my_program

那么您的程序将继承该变量(但它不会在重新启动后持续存在)。

类似的考虑适用于 Linux 和其他系统,但细节有所不同。

请注意,我只是根据您报告的症状猜测您使用的是什么系统。将来,在问题中提供这些信息会很有帮助(如果它不相关,我们可以忽略它)。

【讨论】:

    猜你喜欢
    • 2020-12-27
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 2012-11-12
    • 2014-06-24
    相关资源
    最近更新 更多