为什么围绕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); } 

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

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

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

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

 ./a.out FOO 42 

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