当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《为什么我的包装器setenv()不能正常工作?》经验,为你挑选了1个好方法。

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

Johannes Sch.. 12

你的功能泄漏了.联系人setenv说:

此函数复制由name和value指向的字符串

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

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

./a.out FOO 42

那么,环境变量将被设置为如此执行的进程(a.out),并继承到它启动的进程.但它不会"冒泡"到执行的shell中a.out.这也是为什么命令,如理由set或者export是shell内置,而不是真正的计划.在bash中结帐"帮助导出".



1> Johannes Sch..:

你的功能泄漏了.联系人setenv说:

此函数复制由name和value指向的字符串

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

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

./a.out FOO 42

那么,环境变量将被设置为如此执行的进程(a.out),并继承到它启动的进程.但它不会"冒泡"到执行的shell中a.out.这也是为什么命令,如理由set或者export是shell内置,而不是真正的计划.在bash中结帐"帮助导出".

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有