Execvp 不执行参数

Execvp not executing args

我无法让 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指向的地方,这样你就失去了原来的内存。

关于tempo

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

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

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

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

你遇到同样的问题不止一次,而是两次

此代码

   argv[0] = malloc(100);
    argv[0] = commande;

应该立即敲响警钟。您将一些东西分配给 argv[0],然后在下一行将其设置为其他东西。这不可能是正确的

你需要

char commande[100]; // we will assume 100 is enough
scanf("%s", commande);
argv[0] = strdup(commande); // strdup maybe not needed, buts lets be safe

以及您的 arg 循环中的相同更改