欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ main函数中参数argc和argv相关定义与研究

程序员文章站 2022-07-15 09:22:26
...

最近在研究opencv代码,在读取图上时遇到了一些问题。因此把它总结一下,方便学习。

argc 则是 argument count的缩写,表示传入main函数的参数个数;

argv 则是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称(即:xx.exe),并且包含了程序所在的完整路径,因此我们输入的main函数的参数个数应该是(argc-1)个。

通常在C++控制台应用程序中,主函数通常是 int _tmain(int argc, _TCHAR* argv[])(VS2010、VS2012、VS2013、VS2015等高版本的编译器);

而在C++控制台程序中,主函数一般是int main(int argc, char** argv) (VS2008等较低版本的)。

当然,其实argv是指向指针的指针,main函数的第二个参数“char *argv[]“也可以替换为 “char **argv“、 _TCHAR* argv[],都是等价的。

首先,粘贴个小程序,显示一下argv[]  。本组实验全部基于VS2012  C++编译平台,OpenCV2.4.9版本进行编译。

// argv_learn.cpp : 定义控制台应用程序的入口点。
//  yyx_agrv_learning:  C++ main函数中参数argc和argv含义及用法

#include "stdafx.h"
#include <iostream>
//#include  <opencv2/core/core.hpp>

using namespace std;
//using namespace  cv;

int _tmain(int argc, _TCHAR* argv[])
{
	system("color 1C");//表示输出框的背景颜色


	 for(int i=0;i<argc;i++)  
    {  
        cout<<"argument["<<i<<"] is: "<<argv[i]<<endl;  
		cout<<"------------编译人员姚永祥-----------"<<endl;  
    }  
	system("pause");
	return 0;
}

运行之后的结果图,如下所示:

C++ main函数中参数argc和argv相关定义与研究

从结果可只,在没有参数传入的情况下,保存程序名称的第一个变量argv[0]依然存在。

同时,传参数给main函数有两种方法,第一种方式是在编译环境中设置,比较简单粗暴,不过不建议直接这样使用。

以vs2012编译平台为例,右击项目—>属性—>配置属性—>调试—>命令参数,在命令参数中输入,每个参数之间用空格隔开。

C++ main函数中参数argc和argv相关定义与研究

点击“确定”,然后进行调试,调试结果如下:

C++ main函数中参数argc和argv相关定义与研究

但是一般是做项目,比如用opencv读取图片的时候,如果直接将路径写成绝对路径,后期调试比较麻烦。因此,在图片不是很多的情况下,可以直接将图片保存在工程文件中。

C++ main函数中参数argc和argv相关定义与研究

图片命名为“test.jpg”.

然后,附上一段代码:

// argv_learn.cpp : 定义控制台应用程序的入口点。
// yyx_agrv_learning:  C++ main函数中参数argc和argv含义及用法

#include "stdafx.h"
#include  <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>

using namespace std;
using namespace  cv;

int _tmain(int argc, _TCHAR* argv[])
{

	system("color 1C");//表示输出框的背景颜色

	Mat  image =  imread(argv[1] = "test.jpg",0);
	imshow("test",image);  
    waitKey(); 
	return 0;
}

结果如下:

C++ main函数中参数argc和argv相关定义与研究

注:由于有些使用的是使用 Unicode 字符集,因此程序会报错!

1 IntelliSense: 不能将 "const char *" 类型的值分配到 "_TCHAR *" 类型的实体 d:\OPencv-data\argv_learn\argv_learn\argv_learn.cpp 17 31 argv_learn

解决方法:

选择“项目文件”(argv_learn)右击“属性”。打开后,选择 配置属性—>常规—>字符集   编辑中选择“使用多字节字符集”,点击确定即可!

到此程序就可以正确运行。当然,对argc  和argv的理解还不够深刻,后续还需要继续学习!!