使用 getenv() 读取环境变量 returns NULL C++

Using getenv() to read environment variable returns NULL C++

我正在尝试按照 this documentation 读取 C++ 中的环境变量。我的代码如下所示:

char * val;
val = getenv( "smartDir" );

ShowMessage( val );

delete val;

我的问题是 val 总是以 NULL 结尾,就好像环境变量不存在一样。但是,我清楚地定义了变量,如您在此处所见:

我做错了什么?

  1. 你不应该删除 getenv 返回的指针(参见 here,关于未定义行为的部分)
  2. 如果您正在改变全球环境,请记住,环境。在开始时分配给进程,所有子进程都从父进程继承它。因此,如果您在 env 更改之前从 IDE/console 启动程序,它将不会反映在其子进程中。

为了使测试更容易:大多数 IDE 在 'Debugging' 设置下提供 'Environment' 设置 - 您可以在那里更改传递给子进程(您的程序)的环境(Visual 有,QtCreator 有,C ++Builder 可能也有它等)

如果您从控制台执行程序:使用 SET var=value 而不是更改全局环境,在将环境传递给子进程之前进行本地更改。

两种解决方案都不会修改全局环境并允许快速测试不同的环境设置。