Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 将argv中的参数作为以null结尾的数组追加到数组数组中_Arrays_C_Pipe - Fatal编程技术网

Arrays 将argv中的参数作为以null结尾的数组追加到数组数组中

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

我正在编写一个程序,它应该接受多个命令,并将一个命令的输出通过管道传输到下一个命令的输入

我正在尝试将argv[]中的参数格式化为C中的字符数组数组,这样我就可以将它与execvp一起使用。请让我知道如何修复此问题,或者是否有其他方法。另外,如果有人能解释变量n,那会很有帮助。谢谢

  //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]硬编码时它是有效的,但我希望能够将所有参数都放在这种格式中。这只是代码的一部分,有一个叉在…的位置。这非常有效!谢谢!!!