我尝试使用execvp,它工作得很好,但现在我碰巧声明了参数,现在我得到了错误的“坏地址”。
我处理了很多相同的问题,问题是最后一个参数为空。
我尝试了很多方法在结尾加上空值,但都不起作用。

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");

标准的定义不起作用,有人能帮我吗?
我发布的代码不起作用,但它应该显示我试图添加空值的方式。

最佳答案

在将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]和其他参数,以确保它们存储的值正确且不超出范围。

10-05 20:13