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

时间:2015-08-28 15:21:34

标签: c++ environment-variables c++builder-xe8

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

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

ShowMessage( val );

delete val;

我的问题是val总是以NULL结束,好像环境变量不存在一样。但是,我清楚地定义了变量,你可以在这里看到:

enter image description here

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

  1. 你不应该删除getenv返回的指针(参见here,部分关于未定义的行为)
  2. 如果您正在改变全球环境,请记住,那个环境。在开始时分配进程,所有子进程从父进程继承。因此,如果您在env更改之前从IDE /控制台启动程序,它将不会反映在其子进程中。
  3. 为了简化测试:大多数IDE都提供了“环境”功能。设置在'调试'设置 - 你可以改变那里传递给子进程的env(你的程序)(Visual有它,QtCreator有它,C ++ Builder可能还有它等。)

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

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