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