使用getenv()读取环境变量将返回NULL C ++

Jam*_*gle 2 c++ environment-variables c++builder-xe8

我正在尝试根据本文档阅读C ++中的环境变量。我的代码如下所示:

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

ShowMessage( val );

delete val;
Run Code Online (Sandbox Code Playgroud)

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

在此处输入图片说明

我在这里做错了什么?

Hco*_*org 5

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

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

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

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