1 基础
argc
是 argument count
的缩写,表示传入main函数的参数个数;
argv
是 argument vector
的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]
一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1
个;
argv
是指向指针的指针,main
函数的第二个参数**char *argv[]
也可以替换为 char **argv
**,两者是等价的。
2 代码示例
简单用法示例,新建工程键代码:
//main.cpp
#include <iostream>
using namespace std;int main(int argc,char *argv[])
{cout<<argc<<endl;for(int i=0;i<argc;i++){cout<<"argument["<<i<<"] is: "<<argv[i]<<endl;}return 0;
}
在编译环境下按F5运行,输出如下:
可见,在没有参数传入的情况下,保存程序名称的第一个变量argv[0]依然存在,并且是程序的路径。
在Windows端的VS中也是一样,
3 传参示例
3.1 Visual Studio (VS) 设置
有两种传递参数给 main
函数的方法。第一种方式是通过在编译环境中进行设置。在 Visual Studio 中,右击项目 -> 属性 -> 配置属性 -> 调试 -> 命令参数,然后在命令参数框中输入参数,每个参数之间用空格隔开。
点击确定后并应用,窗口中显示如下:
3.2 命令行
第二种方式也是经常会用到的方式是通过命令提示符传入。
3.2.1 Ubuntu
3个字符串(以间隔为界,不含间隔,这是约定)
3.2.2 PC
在打开命令提示符窗口(cmd)后,您可以输入生成的exe文件的完整路径。为了更方便,您可以直接将exe文件拖放到命令提示符窗口中,然后输入传入参数,用空格进行分隔。完成后按下回车键,系统将显示如下信息:
4 OPENCV示例
使用opencv显示一幅图片:
#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main(int argc, char** argv)
{// 检查命令行参数if (argc < 2) {cerr << "Usage: " << argv[0] << " <image_path>" << endl;return -1;}// 读取图像const string imagePath = argv[1];Mat image = imread(imagePath);// 检查图像是否成功加载if (image.empty()) {cerr << "Error: Unable to load image from " << imagePath << endl;return -1;}// 显示图像imshow("Image", image);waitKey();return 0;
}
注意读入的参数是argv[1](因为0是程序的地址),在命令提示符窗口运行:
图片将会作为第2个传入参数传入到程序中执行。
5 补充
PS:通常情况下,编译器会默认使用argc和argv两个名称作为main函数的参数。然而,这两个参数并非强制,你可以选择任何符合C++语言命名规范的变量名作为入参,其效果是相同的。
#include <iostream>
#include <opencv2/core.hpp>
#include <opencv2/highgui.hpp>using namespace std;
using namespace cv;int main(int argc, char *argv[]) {for (int i = 0; i < argc; i++) {cout << "argument[" << i << "] is: " << argv[i] << endl;}cin.get(); // Wait for user inputreturn 0;
}