C语言 将参数 a 字符串传递给 execvp



我有以下代码:

int main(int argc, char *argv[])
{
int i, a=9;
int length = 0;
const char fail[20] = "Missing Argumentsn";
char s1[512] = "";
char s2[15] = "./calc_prizes";
for (i=1; i<argc; i++) {
length += sprintf(s1+length, " %s", argv[i]);
}
strcat(s2, s1);

while(++a < argc) {
if(fork() == 0) {
char* arg[] = {s2, s1, NULL};   //this is the part that's wrong
execvp(arg[0],arg);
exit(1);
}
else
wait(NULL);
}   
return 0;
}   

S2存储程序的名称,S1参数收集参数。我似乎无法使用execvp的参数运行程序,我做错了什么?

execvp失败的一个可能原因可能是:

strcat(s2, s1);

[我希望您已经确保s2足够大以包含串联的结果字符串,否则其缓冲区溢出,这是您的代码中不同的问题,但肯定是一个问题。
在这里,您将s1连接到s2s2是要执行的程序的名称。在while循环中,您正在执行以下操作:

char* arg[] = {s2, s1, NULL};

指向s2(串联字符串(的arg[0],您将其作为第一个参数传递给execvp

execvp(arg[0],arg);

执行副总裁

execv((、execvp(( 和 execvpe(( 函数提供了一个指向以 null 结尾的字符串的指针数组,这些字符串表示新程序可用的参数列表。按照惯例,第一个参数应指向与正在执行的文件关联的文件名。指针数组必须由 NULL 指针终止。[强调我的]

因此,要成功调用execvp,您应该将第一个参数作为在您的情况下./calc_prizes的可执行文件的名称。

最新更新