int main(int argc,char* argv[])有什么用?

前言

相信大家写 C++ 程序,都会有一个 main 函数作为程序的入口。入门时你可能只见过没带参数的 main 函数:

int main()
{
	return 0;
}

而比较少见带参数的 main 函数:

int main(int argc, char* argv[])
{
	return 0;
}

下面我将说说 带参 main 函数 的作用:


命令行参数

1. 先看个例子
现有目录结构如下:
在这里插入图片描述
hello.cpp 内容如下:

在这里插入图片描述

我们使用命令行调用 lex.exe,即可运行程序,打印 “hello”:
在这里插入图片描述

有时我们需要根据一些输入判断程序该如何执行,比如:

  • 输入 1:程序输出 hello1
  • 输入 2:程序输出 hello2
  • 以此类推… …

那么我们怎么实现?可能你首先想到的是使用 cin

#include <iostream>

using namespace std;

int main()
{
    int n;
    cout << "> ";
    cin >> n;
    cout << "hello" << n << endl;
    return 0;
}

当然,这也可以。但是你会发现个问题: 只有你运行了程序后,才能开始输入
在这里插入图片描述

或许你觉得不就多了一步嘛,有什么麻烦的。但是如果此程序你会频繁地使用此程序,那么你是不是就需要频繁地打开程序,然后再输入。

之前我做过一个类似的程序就是这个样子的,后面用多了发现特麻烦,影响心情

那么可不可以在打开程序之前就能进行输入呢?带参的 main 函数就可以实现此功能。

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

就参数名来看

  • argc:argument count
  • argv:argument vector

你也能大概猜出它们的作用。

先看 argv
2.1 argv

其类型为 char指针数组,因此也可换为 char** argv

如果你对此类型有些陌生,难以理解,你可以简单地将它看做一个 字符串数组

它的作用是接受 命令行输入的多个字符串 (这由操作系统实现

参数遵循按 空白字符 分隔,但是不同的终端也会增加一些额外的规则,比如

  • “” 之间的内容作为一个整体
  • " ; " 作为命令分隔符
  • … …

比如:

int main(int argc, char* argv[])
{
    for (int i = 0; i < argc; i++) {
        cout << "argv" << i << " = " << argv[i] << endl;
    }
    return 0;
}

采用命令行运行:
在这里插入图片描述

可以看出,argv[0] 为 程序名称(称为 指令),而 argv[1] 及之后的为命令行输入的 指令 后所跟的字符串(称为 参数)。

2.2 argc
其类型为 int,据名称也可看出它是用来保存 argv 中元素的个数,我们可以用它来遍历 argv 中的元素。


3. 之前我们说了要实现

  • 输入 1:程序输出 hello1
  • 输入 2:程序输出 hello2
  • 以此类推… …

结合上面说的,那么我们就可以采用 带参 main 函数 来解决此问题:

int main(int argc, char* argv[])
try{
    if (argc != 2) throw string{"argument error"};  	// 只接受一个参数
    cout << "hello" << argv[1] << endl;
    return 0;
}
catch (string& e)
{
    cerr << e << endl;
    return 1;
}

命令行运行:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值