【问题标题】:Can I setenv() using a envp?我可以使用 envp setenv() 吗?
【发布时间】:2026-01-09 04:55:01
【问题描述】:

我正在尝试使用 setenv() 设置一个新的环境变量。

但我注意到 setenv() 函数只有在我使用环境“extern char **environ”时才会设置我的新环境变量

但我想使用 main() 的参数:“char **envp”。

这是我尝试在 envp 中设置的代码,但正如您将看到的,如果您运行该代码,它不会在 envp 中设置。

但如果我使用 const char **environ 就可以了。

有什么想法吗?

#include <stdlib.h>
#include <stdio.h>

int     main(int ac, char **av, char **envp)
{
  int   i;

  i = 0;
  setenv("NEW_ENV_VAR", "hello_world", 0);
  while (envp[i])
    printf("%s\n", envp[i++]);
  return (0);
}

【问题讨论】:

    标签: c env setenv


    【解决方案1】:

    setenv() 被记录为不允许将可选的 envp 参数更改为 main。

    如果您需要遍历所有环境变量,请使用extern char **environ variable

    另见this question

    【讨论】:

    • 所以,如果我想使用envp,我必须重新编码setenv(),对吧?
    • 没有。 envpmain 中的局部变量,外部函数根本无法修改它。使用extern char **environ;。或者,如果您坚持使用envp 变量,只需在main 调用setenv 之后的某处写envp = environ;
    最近更新 更多