我有一个字符串数组,其中包含 execvp
的输入参数。如何将其转换为 execvp
的字符串指针数组?
对于只有一个参数的命令,存在两个字符串:
char param[4][10] = ["wc","file.txt"]
有两个参数:
char param[4][10] = ["cp","file1.txt","file2.txt"]
如果我提前知道参数的数量,我可以简单地写
char *arg[]={param[0],param[1],NULL}
execvp(arg[0],arg);
或
char *arg[]={param[0],param[1], param[2], NULL}
execvp(arg[0],arg);
分别。
但是当我不知道参数的数量时我该怎么办?
我尝试过循环
int count =4;
char* arg[count];
for(int i=0;i<count;i++)
{
strcpy(exe[i],param[i]);
printf("%s\n",exe[i]);
}
strcpy(exe[count],'\0');
但这给了我段错误。
最佳答案
execvp()
的参数列表需要是 param
列表的长度加一(空终止符)。因此,如果 param
是长度为 N 的 C 字符串数组:
char** arg = malloc((N + 1) * sizeof(char*));
if (arg == NULL) {
abort();
}
for (size_t ii = 0; ii < N; ++ii) {
arg[ii] = param[ii];
}
arg[N] = NULL;
现在您可以调用:
execvp(arg[0], arg);
关于c - 从c中的char数组向execvp添加参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36862088/