main 函数的 参数 argc,argv 用法

int main(int argc , char **argv)

argc , argv : 表示命令行模式下输入参数的个数和参数内容;

 

1.  command line 命令行模式 : 开始-->运行—>cmd 进入.

2.  argc 参数个数 : 以程序名 progName.exe 为 第1 个参数,后续输入n-1 个,则参数为 n 个.

3.  argv 参数内容 : (1) 字符串char[]/char*类型;

         (2) 命令行下,空格为字符串分隔符;

         (3) argv (命令行模式) , 路径中分隔符"\"就用"\", 而非Visual Studio 中的"\\"表示"\",这是因为C/C++语言中规定的转义字符导致.在命令行模式下,不存在这种限制;

              例如 路径和图像名称在command line 下:  G:\WorkSpace\RGB_IMAGE.jpg

                                          在Visual Studio下: G:\\WorkSpace\\RGB_IMAGE.jpg

4 . 一个程序的main函数, 参数argc,argv可有可无. 无论有无argc,argv都可以在命令行和直接IDE运行Run exe文件.

(1) 若有argc,argv : 在命令行模式运行时会首先执行非argc,argv参数的程序,在该部分执行完毕后, 再执行输入参数提示和对应的执行;

(2) 若无argc,argv : 则命令行模式和IDE Run模式相同.

5.  argc , argv 可以在程序代码中直接给定,给定时,对于"\"和"\\" 问题则按照Visual Studio标准,给定argv[i]字符串参数时,其中的字符串分隔符采用"\\".

    argc,argv在程序中直接给定后,程序可以直接对其进行判断应用,与通过command line 方式给定一样的使用.

 

6  argv[0] 默认是: projName.exe, 在命令行格式下输入时自动识别.

7  在程序中给argc,argv赋值方式 : 单独给argc,单独给argv赋值均可以. argv[0]可以不必赋值,直接赋值argv[i](i>0). 赋值后,argv[i](i>0),就是字符串.

 

8 argv : 字符和字符串的区别.  赋值字符 argv[i][j]  , 赋值字符串 : argv[i] . 这是因为字符串是特殊的字符数组,首地址既是字符串地址.

   字符串和字符的赋值方式不同,其操作和判断方法也随之变化.

  字符的操作可以使用字符处理函数,字符串处理可以使用字符串处理函数.

 

示例代码如下:

 

#include <stdio.h>
#include <iostream>
#include <fstream>
#include <math.h>
#include <vector>
#include <string>

#include "cv.h"
#include "highgui.h"
#include "cxcore.h"

using namespace cv;
using namespace std;
int main(int argc, char** argv) {


	//argc = 2;
	//argv[0] = "mainFile.exe";
	//argv[1] = "G:\\WorkSpace\\RGB_IMAGE.jpg";
	/** Test  the input parameters,检测输入/给定的 argc和argv 参数 ;**/
	{
		if ((1 == argc) || (argc > 2)) {
			printf("Please input the image path and name .\n");
		}
		else if (2 == argc) {
			printf("%s %s", argv[0], argv[1]);
		}
	}

	/** Processing the inputting parameters.根据输入/给定 的argc,argv进行相关处理,此处可以加入对输入的字符串语义检测,从而执行不同判断.; **/
	{
		if (argv[1]) {		// 注意这里要加上判断argv[1]是否为空.;
			Mat img01 = imread(argv[1]);
			namedWindow("Input Path Dis", CV_WINDOW_AUTOSIZE);
			imshow("Input Path Dis", img01);
			cvWaitKey(0);
			cvDestroyWindow("Input Path Dis");
		}
	}

	/** 程序的argc和argv可有可无,且若有的话在命令行模式下先执行完非 argc和argv 参数代码功能,再判断执行 argc和argv 功能; 而在IDE Run模式下也一样.;**/
	{
		argv[1] = "G:\\WorkSpace\\RGB_IMAGE.jpg";
		string imgPath01 = "G:\\WorkSpace\\RGB_IMAGE.jpg";
		if (!imgPath01.empty()) {		// Judge the empty ;
			Mat img01 = imread(imgPath01);
			namedWindow("String UnInput Path Dis", CV_WINDOW_AUTOSIZE);
			imshow("String UnInput Path Dis", img01);
			cvWaitKey(0);
			cvDestroyWindow("String UnInput Path Dis");
		}
	}	

	return 0;
}
posted @ 2012-03-30 17:25  gaoxw0511  阅读(6271)  评论(2编辑  收藏  举报