我有下面的方法,它正确地将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中结帐"帮助导出".
你的功能泄漏了.联系人setenv
说:
此函数复制由name和value指向的字符串
因此,在将它们传递给它之前,您不必自己复制它们.
你是否在shell中执行这样的程序?
./a.out FOO 42
那么,环境变量将被设置为如此执行的进程(a.out
),并继承到它启动的进程.但它不会"冒泡"到执行的shell中a.out
.这也是为什么命令,如理由set
或者export
是shell内置,而不是真正的计划.在bash中结帐"帮助导出".