如何将参数从终端传递给函数

时间:2012-09-25 14:42:58

标签: c linux terminal

  

可能重复:
  Pass arguments into C program from command line

我试图将终端中的三个参数传递给一个名为replace的函数。我想知道是否可以从终端

执行以下操作
  % ./replace d DDD mytest.tx

我已经在线查看,但只能找到有关将值直接传递给main()而不是内部函数的信息。

编辑:我编辑了以下主要功能:

void replace(char* string_a, char* string_b, char* string_f)
 {
  }

int main(int argc, char *argv[])
  { 
       if(argc < 4)
  { 
    printf("Not enough arguments\n");
   return 0;
  }

replace(argv[1],argv[2],argv[3]);
 }

6 个答案:

答案 0 :(得分:5)

您的主要功能应采用以下格式:

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

argv是指向你的参数的指针。请注意,第一个参数是程序的名称。

这是命令行参数的lesson

答案 1 :(得分:2)

当然可以,主要原型是int main(int ac, char **av),其中ac是传递给程序的参数数量,char **是包含传递给程序的参数的数组数组。

例如代码:

int main(int ac, char **av)
     {
      void replace (av[1], av[2], av[3])
        { 
         .......
        }

     }

如果你将exec发布为:./replace d DDD mytest.tx,av [0]将是你的程序名称,av [1]将是d,av [2] DDD和av [ 3] mytest.tx

祝你好运!

答案 2 :(得分:1)

所有独立的C语言程序都在main()开始执行。这就是语言的运作方式。

所以你需要做的是在验证和解释参数后从replace()调用main()。命令行参数将位于int argc, char *argv[]的标准main()参数中。

答案 3 :(得分:1)

你想要做的是使用main的参数列表。

您可以使用以下签名:

int main(int argc, char* argv[]),其中argv是指向参数列表的指针,从命令行传递。

答案 4 :(得分:1)

查找argcargv

argc是参数的数量,argv是指向参数的指针数组。

所以你的代码应该是这样的:

void replace (char string_a[],char string_b[], char string_f[])
{
    //...
}

int main(int argc, char *argv[])
{
    if(argc < 4)
    {
        printf("Not enough arguments\n");
        return 0;
    }

    replace(argv[1], argv[2], argv[3]);
}

还要记住,argv(argv[0])中的第一项是执行程序的路径。

答案 5 :(得分:1)

回答您的确切问题: I am trying to pass three arguments from terminal into a function called replace.不,你不能绕过将参数发送给m​​ain。

定义了C语言,它会在程序中查找main()个入口点,如果没有,则会抱怨。由于预期main()存在,因此它将用作任何命令行参数的入口点:

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

其中argc是命令行参数的数量,argv[]是一个字符指针数组(参数列表的“字符串”版本)

如果你想传递它们来替换你真的只需直接发送它们:

int main(int argc, char *argv[]){
  if argc is big enough to satisfy
     replace(argv's)

如果您真的不希望main()知道您需要将这些参数存储在文件中,或者在stdin函数的replace()运行时获取它们。

如果您试图将“替换”作为主要功能,那么如果您的链接器允许您定义入口点,那么这是可能的。

再次......不确定你的目标是什么。