首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C execv()参数问题

C execv()参数问题
EN

Stack Overflow用户
提问于 2012-01-20 22:59:23
回答 2查看 6.2K关注 0票数 0

我无法让execv()在我的C程序中工作。我怀疑问题出在这个部分,与char* args10有关。以下是片段:

代码语言:javascript
复制
  void mySystem(char *str, int *num_f, int *sig_k)  {
   int pid, stat;

   if ( fork() == 0)  {
    char * args[10];
    args[0] = str;
    args[1] = NULL;

    execv(str, &args);
    exit(20);

这将给出以下警告:

代码语言:javascript
复制
systest.c:17: warning: passing argument 2 of âexecvâ from incompatible pointer type

我已经工作了几个小时,似乎什么都试过了。怎么一回事?以下是所有代码,仅供参考,以防我犯下不相关的错误:

代码语言:javascript
复制
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>


void mySystem(char *str, int *num_f, int *sig_k)  {
   int pid, stat;

   if ( fork() == 0)  {

        char * args[10];
        args[0] = str;
        args[1] = NULL;

        execv(str, &args);
        exit(20);               
   }

   pid = wait(&stat);
   if (WEXITSTATUS(stat) != 0)  {
        printf("command %s failed (exit code %d)\n", str, WEXITSTATUS(stat));
   } else {
        printf("command %s success (exit code 0)\n", str);
        num_f += 1;
        printf("wat %d\n", num_f);
   }


}       //mySystem



int main() {

   char buf[100];
   char cmd[100];       
   int num_fails = 0, sig_kills = 0;

   while(fgets(buf, 100, stdin)){
        sscanf(buf, "%s", cmd);
        if (strcmp(cmd, "quit") == 0) {
                printf("ran with %s\n", cmd);
                printf("num success = %d\n",num_fails);
                exit(0);        //returns 0 if equal, 1 if not
         }

printf("in main %s\n", cmd); 
        mySystem(cmd, &num_fails, &sig_kills);
   } 


return 0;

}

运行时,所有命令都会失败。任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-20 23:03:34

execv需要的是一个char *[],即一个指针数组,这是您用args定义的。

如果将&添加到args,则会得到类型char *(*[]),这是一个指向指针数组的指针。跳过execv调用中的&,一切都会正常工作。

票数 1
EN

Stack Overflow用户

发布于 2012-01-20 23:02:13

您将为execv传递一个char ** *作为第二个参数,而它接受一个char **。您不需要addressof (&)操作符,因为数组只能通过引用传递,而不能通过值传递。所以你想要:

代码语言:javascript
复制
execv(str, args);

而不是

代码语言:javascript
复制
execv(str, &args);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8943353

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档