我尝试使用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的方式。
答案 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]
和其他参数,以确保它们存储正确的值并且没有超出范围。