exec地址错误,NULL附加

时间:2018-10-26 16:56:31

标签: c null fork exec

我尝试使用execvp,但效果很好,但是现在我碰巧声明了参数,现在我得到了“错误地址”作为错误。 我遇到了很多同样的问题,但问题是最后一个参数为NULL。

我尝试了很多方法来在末尾附加NUll,但是它不起作用。

char *args4exec[5];

 switch(argsi)
      {
        case 1:
          printf("case 1 arg\n" );
          strcpy(&args4exec[0],command);
          strcpy(&args4exec[1],args[i-1]);
          args4exec[2] = NULL;
          break;
        case 2:
          printf("case 2 args\n" );
          strcpy(&args4exec[0],command);
          strcpy(&args4exec[1],args[i-2]);strcpy(&args4exec[2],args[i-1]);
          strcpy(&args4exec[3], NULL);
          break;
      }
    }

    if (execvp( args4exec[0], args4exec) == -1 )
      perror("exec failed");

strcpy和正常的定义不起作用,有人可以帮助我吗? 我发布的代码无法正常工作,但是应该显示我尝试添加NULL的方式。

1 个答案:

答案 0 :(得分:2)

在将command或其他字符串复制到args4exec之前,应为其分配内存:

char *args4exec[5];
char *command = "Hello";
args4exec[0] = malloc(sizeof(char) * strlen(command));

这也是您的strcpy()编译器应该警告的错误。应该是这样的:

strcpy(args4exec[0], command);

如果您将gcc-Wall -Wextra -Werror一起使用,则编译。

并且您应该检查args[i - 2]和其他参数,以确保它们存储正确的值并且没有超出范围。