gpt4 book ai didi

c - 为什么我的 setenv() 包装器不起作用?

转载 作者:太空狗 更新时间:2023-10-29 15:49:45 26 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

./a.out FOO 42

好吧,那么环境变量将为如此执行的进程(a.out)设置,并继承给它启动的进程。但它不会“冒泡”到执行 a.out 的 shell 中。这也是为什么像 setexport 这样的命令是 shell 内置函数而不是真正的程序的原因。在 bash 中检查“帮助导出”。

关于c - 为什么我的 setenv() 包装器不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/662466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com