我有一个函数正在复制包含全局变量的 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[]);
然后一切都按预期进行。但我很难理解为什么数组必须作为参数传入,即使它是全局声明的。
主签名错误。 应该是:
int main(int argc, char *argv[], char *envp[])