-5

为什么我没有成功

 int main(char* name,int arg0,int arg1)
 {
   name = "/u/e2014/Desktop/os/Prog.c";
   arg0 = 0;
   arg1 = 1;

   char my_args[3];
   my_args[0] = arg0;
   my_args[1] = arg1;
   my_args[2] = NULL;
   execl(name,m_args);

   return(0);
  }

在此处输入图像描述

我希望我的程序将执行路径“名称”中的程序。现在它什么都不做。

我不明白我的错误在哪里?我在 linux 上用 C 语言编程,并用 gcc 编译它

非常感谢!!

4

2 回答 2

1

gcc 有 3 种不同的主要功能签名

int main(void);
int main(int argc, char* argv[]);
int main(int argc, char *argv[], char *envp[]);

您的主要功能与其中任何一个都不匹配。因此编译器错误。

对于您的情况,您可以使用第二个签名并稍作修改。

#include <stdlib.h>

int main(int argc, char **argv)
{
    char *path;
    int int1, int2;

    path = argv[1];
    int1 = atoi(argv[2]);
    int2 = atoi(argv[3]);
}
于 2016-11-23T09:15:31.823 回答
0

首先,您在 int main() 中传递了错误的参数。main() 至少只有 3 个参数。

int main(int argc, char*argv[], char *envp[]);

要执行您的程序,您应该使用 execvp() 因为您通过变量参数传递 char* 而不是命令行参数。

execl 和 execv 的区别?

**L vs V:是否要将参数传递给执行程序

L:调用中的各个参数(变量参数列表):execl()、execle()、execlp() 和 execlpe() V:作为 char* 数组 execv()、execve()、execvp() 和execvpe()**

#include <stdio.h>
#include <unistd.h>

int main(int argc,char*argv[])
 {
   char *name = "/root/a.out";
   char *arg0 = "0";
   char *arg1 = "1";

   char *my_args[4];

   my_args[0] = name;
   my_args[1] = arg0;
   my_args[2] = arg1;
   my_args[3] = NULL;
  execvp(my_args[0],my_args);

   return(0);
  }
于 2016-11-23T09:32:24.390 回答