gpt4 book ai didi

c - 将参数字符串传递给 execvp

转载 作者:行者123 更新时间:2023-11-30 16:32:00 27 4
gpt4 key购买 nike

我有以下代码:

int main(int argc, char *argv[])
{
int i, a=9;
int length = 0;
const char fail[20] = "Missing Arguments\n";
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 连接到 s2,并且 s2 是您要执行的程序的名称。在 while 循环中,您正在执行以下操作:

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

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

execvp(arg[0],arg);

execvp :

The execv(), execvp(), and execvpe() functions provide an array of pointers to null-terminated strings that represent the argument list available to the new program. The first argument, by convention, should point to the filename associated with the file being executed. The array of pointers must be terminated by a NULL pointer. [emphasis mine]

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

关于c - 将参数字符串传递给 execvp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50340804/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com