为什么我的包装器setenv()不能正常工作?

时间:2009-03-19 14:42:04

标签: c setenv

我有下面的方法,它正确地将ret值设置为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);                          
     }

1 个答案:

答案 0 :(得分:12)

你的功能泄漏了。 setenv的联机帮助页说:

  

此函数复制由名称和值

指向的字符串

因此,在将它们传递给它之前,您不必自己复制它们。

你是否在shell中执行这样的程序?

./a.out FOO 42

那么,将为如此执行的进程(a.out)设置环境变量,并将其继承到由它启动的进程。但它不会“冒泡”到执行a.out的shell中。这也是setexport等命令是shell内置而不是真实程序的原因。在bash中结帐“帮助导出”。