我试图编写一个带有文件路径和参数的函数并执行该文件。
我知道我应该在调用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);