execvp - argv []必须在堆上吗?

时间:2017-03-19 12:39:20

标签: c linux process exec heap

我试图编写一个带有文件路径和参数的函数并执行该文件。

我知道我应该在调用execvp()之前将文件的路径添加到argv数组的开头。 我看到了解决问题的方法,但我不明白他们为什么在堆上为newArgv分配内存:

int executeProgram(char *filepath, char *argv[]) {

int pid = fork();
if (!pid) {

    int num = 0;
    char **newArgv;

    while (argv[num++] != NULL);
    newArgv = (char**) malloc(sizeof(char*) * (1 + num));
    newArgv[0] = filepath;
    memcpy(&newArgv[1], argv, sizeof(char*) * num);
    execvp(newArgv[0], newArgv);
    }
    ...
}

我是否必须使用malloc在堆上为此newArgv分配内存,或者我可以像这样将它保存在堆栈中?:

char *newArgv[num + 1];

*newArgv[0] = filepath;
for(i = 0; i < num; i++) {
    *newArgv[i+1] = *argv[i];
}
execvp(file_path, newArgv);

0 个答案:

没有答案