1

可能重复:
从命令行将参数传递给 C 程序

我正在尝试将三个参数从终端传递到一个名为 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]);
 }
4

6 回答 6

5

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

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

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

这是 有关命令行参数的课程:

于 2012-09-25T14:45:09.077 回答
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

祝你好运 !

于 2012-09-25T14:48:10.447 回答
1

所有独立的正确 C 程序都以main(). 这就是语言的工作方式。

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

于 2012-09-25T14:46:51.163 回答
1

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

您可以使用以下签名:

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

于 2012-09-25T14:46:51.290 回答
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]) 中的第一项是执行程序的路径。

于 2012-09-25T14:49:41.973 回答
1

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

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()函数中获取它们。

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

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

于 2012-09-25T15:08:10.717 回答