我试图理解setenv()是如何工作的。文件是
setenv (const char *name, const char *value, int overwrite)
我想能够编辑环境变量数组。例如,我想设置
envp[1] = "Hello World"
不过,setenv函数让我感到困惑,不知道如何在函数中实现。覆盖是环境数组的索引吗。这会影响到所有这样的环境的打印吗?
#include <stdio.h>
void main(int argc, char *argv[], char * envp[])
{
int i;
for (i = 0; envp[i] != NULL; i++)
{
printf("\n%s", envp[i]);
}
}
因此,与envp[1]通常的情况不同,它改为“Hello World”。我也不确定overwrite设置为1是否意味着envp[1]。
最佳答案
为什么要修改环境变量数组?envp只是程序启动时环境变量的副本。
首先,“Hello World”不是有效的环境变量。环境变量就像任何其他具有标识符(名称)和值的变量一样。可以使用环境变量STR=HelloWorld。
如果只想设置上述环境变量,只需调用setenv("STR", "HelloWorld", 1)
。覆盖标志1确保此函数覆盖STR的上一个值。如果overwrite标志为0,则setenv不会更改已设置的环境变量的值。
这会影响到所有这样的环境的打印吗?
当我使用gcc测试它时,它不会更改值。原因是getenv()
和setenv()
函数成对使用以访问环境变量。c字符串数组envp只是程序启动时的环境变量数组。而且,envp通常不会从main函数传递,这意味着其他函数不知道envp。