在c中从char数组向execvp添加参数

时间:2016-04-26 10:20:54

标签: c linux execvp

我有一个包含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');

但这给了我段错误。

1 个答案:

答案 0 :(得分:3)

if let user = (payload["user"] as? [String:AnyObject]) { print("\(user)") } 的arg列表需要是execvp()列表的长度加上一个(空终止符)。因此,如果param是长度为N的C字符串数组:

param

现在你可以致电:

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;