将参数从Bash命令行传递给函数

时间:2016-02-06 20:29:37

标签: c++ linux bash

我正在Bash上的命令行运行C ++程序,该程序位于Linux环境中。我很好奇你如何从命令行传递一个参数。这是我的计划:

#include <iostream>
using namespace std;

int large_pow2( int n );

int main()
{
   int value = 15;
   int largest_power = large_pow2(value);

   cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl;

   return 0;
} 

int large_pow2( int n )
{
   int i = n
   int j = i & (i - 1);
   while( j != 0)
   {
      i = j;
      j = i & (i - 1);
   }
   return j;
}

编译程序后,我希望能够使用命令行传入一个用于value的数字。例如,要运行该程序,请键入./"program_name",其中"program_name"是我的程序名称,不带引号。有没有办法设置value = n或其他什么?当我运行该程序时,假设我希望n20,所以在命令行中输入类似./"program_name" 20的内容。然后该程序将与n = 20一起运行。有没有办法做到这一点?我对Linux环境和Bash都是全新的,所以还不知道如何在其中做任何事情。

2 个答案:

答案 0 :(得分:2)

argc中使用argvint main(int argc, char *argv[])并相应修改您的代码。

argc参数跟踪从CLI传递给您的程序的参数数量,并且始终> gt = 1。当1它是程序的名称时。所以argc[0]是程序名称。

argv包含命令行参数,而不是程序名,并且始终为char字符串。因此,如果您不想要字符串,我们需要使用适当的转换器,如atoi

所以你的代码看起来像是,为了简单起见错误检查

int main(int argc, char *argv[])
{
    //Now we expect argc ==2, program value, This will when argc != 2
    // We should use if in real scenario
    assert(argc == 2);
    int value = atoi(argv[1])
    int largest_power = large_pow2(value);

    cout << "The highest power of 2 in " << value << " is " << large_power << "." << endl;

    return 0;
} 

答案 1 :(得分:1)

你的main方法可以采用(int argc,char ** argv),这是参数计数和NUL终止的args。程序路径是argv [0]所以atoi(argv [1])可能就是你想要的。检查argc == 2.