1.当存在内存重叠时不能使用,会造成原数组内存覆盖。
2.memcpy是对指针指向的内容进行复制,而不是复制指针指向的地址。
正如下面程序所示,我们将environ指向的指针数组的内容复制给了env指向的内存,env和environ指向的依然是两块不同的内存。
extern char **environ; // 外部变量,包含当前进程的所有环境变量
char *args[] = {"ls", "-l", NULL};
char **env = malloc(sizeof(char *) * (count + 1)); // count 是 environ 中环境变量的数量
memcpy(env, environ, sizeof(char *) * count);
env[count] = NULL;
execve("/bin/ls", args, env);