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

最近在研究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;
}

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


扫描二维码关注公众号,回复: 1927117 查看本文章

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

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

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


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

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


图片命名为“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;
}

结果如下:


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

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

解决方法:

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

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

猜你喜欢

转载自blog.csdn.net/yyx20125084014/article/details/80638519
今日推荐