我试图理解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。

10-04 14:29