如何编写我自己的 setenv()?
How do I program my own setenv()?
我的学校要我实现 setenv()
标准 c 库函数的行为。我不允许在此实现中使用 setenv()
。我该怎么做?
在 C 编程语言的许多实现中,尤其是在 POSIX 中,可以从 environ
全局变量访问环境。您可能需要手动声明它,因为它没有在任何标准头文件中声明:
extern char **environ;
environ
指向指向 variable=value
字符串的 NULL
终止指针数组。例如,如果您的环境有变量 foo
、bar
和 baz
,environ
中的条目可能是:
environ[0] = "foo=a";
environ[1] = "bar=b";
environ[2] = "baz=c";
environ[3] = NULL;
要在不使用 setenv()
或 putenv()
函数的情况下改变环境,请检查您要设置的键是否已经存在。如果是,则覆盖该密钥的条目。否则您需要将 environ
的内容复制到一个新数组中并将新条目添加到其末尾。为此,您可以使用 malloc()
或 calloc()
和 memcpy()
。由于这是家庭作业,我不打算提供更多细节。
我的学校要我实现 setenv()
标准 c 库函数的行为。我不允许在此实现中使用 setenv()
。我该怎么做?
在 C 编程语言的许多实现中,尤其是在 POSIX 中,可以从 environ
全局变量访问环境。您可能需要手动声明它,因为它没有在任何标准头文件中声明:
extern char **environ;
environ
指向指向 variable=value
字符串的 NULL
终止指针数组。例如,如果您的环境有变量 foo
、bar
和 baz
,environ
中的条目可能是:
environ[0] = "foo=a";
environ[1] = "bar=b";
environ[2] = "baz=c";
environ[3] = NULL;
要在不使用 setenv()
或 putenv()
函数的情况下改变环境,请检查您要设置的键是否已经存在。如果是,则覆盖该密钥的条目。否则您需要将 environ
的内容复制到一个新数组中并将新条目添加到其末尾。为此,您可以使用 malloc()
或 calloc()
和 memcpy()
。由于这是家庭作业,我不打算提供更多细节。