Arrays 将argv中的参数作为以null结尾的数组追加到数组数组中
我正在编写一个程序,它应该接受多个命令,并将一个命令的输出通过管道传输到下一个命令的输入 我正在尝试将argv[]中的参数格式化为C中的字符数组数组,这样我就可以将它与execvp一起使用。请让我知道如何修复此问题,或者是否有其他方法。另外,如果有人能解释变量n,那会很有帮助。谢谢Arrays 将argv中的参数作为以null结尾的数组追加到数组数组中,arrays,c,pipe,Arrays,C,Pipe,我正在编写一个程序,它应该接受多个命令,并将一个命令的输出通过管道传输到下一个命令的输入 我正在尝试将argv[]中的参数格式化为C中的字符数组数组,这样我就可以将它与execvp一起使用。请让我知道如何修复此问题,或者是否有其他方法。另外,如果有人能解释变量n,那会很有帮助。谢谢 //input: ./example ls cat int main (int argc, char *argv[]){ //how I want to format my arguments
//input: ./example ls cat
int main (int argc, char *argv[]){
//how I want to format my arguments
char *commands[][argc] = {
{argv[1], NULL},
{argv[2], NULL},
{"ls", NULL},
{"cat", NULL}
};
//the problem
for(int m=1; m<argc ;m++)
{
char *arg[2] = {argv[m], NULL};
//how do I input arg into commands?
}
//?
size_t n;
n = sizeof(commands) / sizeof(*commands);
...
//ending goal
execvp(commands[i][0], commands[i]);
}
//输入:./示例ls cat
int main(int argc,char*argv[]){
//如何格式化我的参数
char*命令[][argc]={
{argv[1],NULL},
{argv[2],NULL},
{“ls”,NULL},
{“cat”,NULL}
};
//问题
对于(int m=1;m您在声明时不需要初始化命令
。您可以填写循环中的NULL
第二个元素
不能分配给数组,所以只需分别分配给每个元素
char *commands[argc-1][2];
//the problem
for(int m=1; m<argc ;m++)
{
commands[m-1][0] = argv[m];
commands[m-1][1] = NULL;
}
char*命令[argc-1][2];
//问题
对于(int m=1;mNote:像“ls”
这样的字符常量存储在只读内存中。您不能在它们上面复制。什么是strcpy(*命令[m],*arg)
甚至尝试这样做?我对该代码没有任何意义。为什么要复制到命令表中?这里的目标是从给定的argv
输入扩展到类似commands
的结构中吗?如果是这样,就不需要strcpy
。只要calloc()
并用给定的指针填充。我也怀疑您是否需要这样一个完整的结构。您可以在调用execvp
之前根据需要创建它们。记住,您必须fork()
在调用execvp
或整个过程结束之前。注意:n
只是一种计算数组长度的方法,类似于命令[]
,它会保留未指定的长度。当我用argv[1]和argv[2]硬编码时它是有效的,但我希望能够将所有参数都放在这种格式中。这只是代码的一部分,有一个叉在…的位置。这非常有效!谢谢!!!