C/C++中的命令行参数

时间:2020-02-23 14:29:54  来源:igfitidea点击:

在本文中,我们将研究如何在C/C++中使用命令行参数。

如果要从命令行将任何输入字符串传递到主程序,则命令行参数非常有用。

这些参数作为参数传递给main()函数。

让我们看一下如何有效地使用它们。

为什么要使用命令行参数?

通常,对于我们而言,直接为程序提供输入非常方便。
一种常见的方式是使用scanf()/getchar()等来等待用户输入。

但是,这些呼叫浪费大量时间等待,并且需要用户手动输入输入。

只需将这些输入提供给我们的主程序,便可以节省大量时间!

格式如下:

./executable input1 input2

该程序将自动将这些命令行参数存储在特殊变量中,我们可以从中直接访问它们!

启动程序时,只需输入一次即可。

让我们看看我们现在如何使用它们。

C/C++中的命令行参数–特殊变量

该程序会将命令行参数传递给main()函数。

在C/C++中,main()函数为这些参数引入了两个附加参数。

  • argc->参数计数。
    给出我们传递的参数数量(还包括程序名称)
  • argv->参数向量。
    这是一个char *字符串数组。
    这些是参数值本身。

因此,argv [0]是程序本身的名称,argv [1]argv [argc-1]将是我们的所有命令行参数。

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

要查看实际效果,请举一个例子。

使用命令行参数–一个简单的例子

让我们考虑一个程序,该程序将两个字符串连接起来,作为输入。

我们将两个命令行参数传递给我们的程序,因此我们的" argc"总数必须为3(包括程序名称)。

我们可以这样编写程序:

#include <iostream> 
#include <string>

using namespace std;

string concat_strings(string s1, string s2) {
  return s1 + s2;
}

int main(int argc, char* argv[]) 
{ 
  cout << "You have entered " << argc 
       << " arguments:" << "\n";

  if (argc != 3) {
      cerr << "Program is of the form: " << argv[0] << " <inp1> <inp2>\n";
      return 1;
  } 

  string result = concat_strings(argv[1], argv[2]);

  cout << "Result: " << result << endl;

  return 0; 
} 

如果我们的可执行文件名为test.out,则在我的Linux机器上,我使用以下命令运行可执行文件:

./test.out Hello _theitroad

请注意,参数以空格分隔。
因此,我们的命令行参数为:" Hello"和" _theitroad"

输出

You have entered 3 arguments:                                                                                                
Result: Hello_theitroad

大!这似乎按预期工作,因为第一个参数是程序本身的名称。

现在,我们尝试使用4个参数来运行它。

./test.out Hello from theitroad

输出

You have entered 4 arguments:                                                                                                
Program is of the form: ./test.out <inp1> <inp2>