c - 从c中的char数组向execvp添加参数

标签 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');

但这给了我段错误。

最佳答案

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/

相关文章:

c - 初学者C指针问题

c - pthreads:使用多线程计算连续素数

linux - 如何在 Linux 上确定共享库依赖路径?

linux - 错误 : ./dist/configure 第 40 行 :conf19087. sh:没有这样的文件或目录

linux - 限制监听端口访问

c - 使用 fork() 和 execvp() 函数创建 C 程序时遇到问题

c - 使用 fork 和 execvp 启动/停止/etc/init.d/中的服务不起作用

gdb 可以进入 if 的条件函数吗?

c - 制作我自己的 shell - C - chdir()

c - 如何将 execvp() 与 grep 一起使用?