加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:15:25 所属栏目:百科 来源:网络整理
导读:我有下面的方法,它正确地将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
我有下面的方法,它正确地将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 %sn",ret,a,b);                          
     }

解决方法

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

This function makes copies of the strings pointed to by name and value

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

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

./a.out FOO 42

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读