我的学校希望我实施setenv()
标准c图书馆功能的行为。我不允许setenv()
用于此实施。我怎么能这样做?
答案 0 :(得分:3)
在C编程语言的许多实现上,特别是在POSIX上,可以从environ
全局变量访问该环境。您可能需要手动声明它,因为它未在任何标准头文件中声明:
extern char **environ;
environ
指向NULL
终止指向variable=value
字符串的指针数组。例如,如果您的环境包含变量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()
来实现此目的。由于这是家庭作业,我不打算提供进一步的细节。