我有一个包含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');
但这给了我段错误。
答案 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;