如何编写我自己的 setenv()?

How do I program my own setenv()?

我的学校要我实现 setenv() 标准 库函数的行为。我不允许在此实现中使用 setenv()。我该怎么做?

在 C 编程语言的许多实现中,尤其是在 POSIX 中,可以从 environ 全局变量访问环境。您可能需要手动声明它,因为它没有在任何标准头文件中声明:

extern char **environ;

environ 指向指向 variable=value 字符串的 NULL 终止指针数组。例如,如果您的环境有变量 foobarbazenviron 中的条目可能是:

environ[0] = "foo=a";
environ[1] = "bar=b";
environ[2] = "baz=c";
environ[3] = NULL;

要在不使用 setenv()putenv() 函数的情况下改变环境,请检查您要设置的键是否已经存在。如果是,则覆盖该密钥的条目。否则您需要将 environ 的内容复制到一个新数组中并将新条目添加到其末尾。为此,您可以使用 malloc()calloc()memcpy()。由于这是家庭作业,我不打算提供更多细节。