全局变量需要作为参数传递

问题描述 投票:0回答:1

我有一个函数正在复制包含全局变量的 envp 数组的内容。该函数成功复制了内容,但是,当它返回时,数组指针似乎完全指向其他地方。

#include <stdio.h>
#include <string.h>

// allow up to 64 environment variables
#define MAXENV 64

// local envp copy
char* envp_copy[MAXENV];

// current size of envp_copy
int envp_size = 0;

void copy_envp(char *envp[])
{
    for (long i = 0; i <= MAXENV; i++)
    {
        if (envp[i] == NULL)
        {
            envp_copy[i] = NULL;
            break;
        }
        envp_copy[i] = strdup(envp[i]);
        envp_size++;
    }
    for (int i = 0; i < envp_size; i++)
    {
        printf("%s\n", envp_copy[i]);
    }
}
int main(int argc, char *argv[], char *envp[], char *envp_copy[])
{
    copy_envp(envp);
    for (int i = 0; i < envp_size; i++)
    {
        printf("%s\n", envp_copy[i]);
    }
}

我知道如果我更改 copy_envp 函数以将数组作为变量

void copy_envp(char *envp[], char *envp_copy[]);

然后一切都按预期进行。但我很难理解为什么数组必须作为参数传入,即使它是全局声明的。

arrays c memory-management operating-system
1个回答
0
投票

主签名错误。 应该是:

int main(int argc, char *argv[], char *envp[])
© www.soinside.com 2019 - 2024. All rights reserved.