2

I am attempting to read an environment variable in C++ as per this documentation. My code looks like this:

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

ShowMessage( val );

delete val;

My problem is that val always ends up NULL as if the enviroment variable does not exist. However, I clearly have the variable defined as you can see here:

enter image description here

What am I doing wrong here?

4

1 回答 1

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

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

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

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

于 2015-08-28T15:25:45.437 回答