gpt4 book ai didi

c - Execvp 不执行参数

转载 作者:太空宇宙 更新时间:2023-11-04 06:52:47 25 4
gpt4 key购买 nike

我无法让 execvp 执行 args,此代码仅在我将 args 的数量设置为 0 时才有效。我一直试图在这里和那里换行 2 小时并检查其他类似问题,但没有任何结果工作,也许有人有想法?

void executeProgram()
{
char *argv[20];
printf("Please enter command or program name:");
char *commande;
scanf("%s", commande);
argv[0] = malloc(100);
argv[0] = commande;
int nbArgZ = -1;
while(nbArgZ < 0){
printf("Please enter number of arguments:");
scanf("%d", &nbArgZ);
}
int x;
int y =1;
for(x = 1; x < nbArgZ+1; x++){
char *tempo;
argv[x] = malloc(100);
printf("Argument %d : ", x);
scanf("%s", tempo);
argv[x] = tempo;
y++;
}
argv[y] = NULL;
int pid = fork();
if ( pid == 0 ) {
execvp(argv[0], argv);
}
wait(2);
printf( "End of execution\n");
}

最佳答案

你有多个问题。这是其中的几个:

argv[x] = malloc(100);
...
argv[x] = tempo;

首先你让 argv[x] 指向你分配的一些内存,然后你让 argv[x] 指向 tempo 所在的位置指指点点,让你失去原来的内存。

关于速度:

char *tempo;
...
scanf("%s", tempo);

你有一个未初始化的指针。它指向的位置不确定并且看起来几乎是随机的。取消引用此指针(在您调用 scanf 时发生)会导致未定义的行为

这两个问题都可以通过将 argv[x] 直接传递给您的 scanf 调用来解决:

scanf("%99s", argv[x]);  // No more than 99 characters (excluding terminator)

而且您遇到同样的问题不是一次,而是两次

关于c - Execvp 不执行参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48892389/

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