我有下面的方法,它正确地设置保留值设置为0(表示成功SETENV),但是当我检查,看看是否该环境变量实际设定,这是不存在的。为什么会这样发生?

 void Class::mysetenv(char* a, char* b)                           
     {   
         if(a==0 || b==0)
             return;

         int ret = setenv(strdup(a), strdup(b), 1);
         printf("ret: %d %s %s\n", ret, a, b);                          
     }
有帮助吗?

解决方案

您功能泄漏。 setenv的手册页表示:

  

此功能使通过名称和值

指向的字符串的副本

所以,你不必给他们自己将它们传递给它之前复制。

你从shell中运行你的程序是这样?

./a.out FOO 42

好了,那么环境变量将被用于这样执行(a.out)的处理中设置,并且被继承到所发射的处理。但它不会“冒泡”成执行a.out壳。这也是为什么诸如setexport命令shell内置,而不是真正的节目的原因。结帐“帮助出口”在bash。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top