• 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;
    }
  • 相关阅读:
    第二节:如何正确使用WebApi和使用过程中的一些坑
    nodejs中function*、yield和Promise的示例
    关于nodejs访问mysql的思考
    nodejs使用log4js记录日志
    nodejs初识
    Spring学习笔记(入门)
    mybatis使用注解开发
    MyBatis配置文件中的常用配置
    using 自动释放资源示例
    Java将byte[]和int的互相转换
  • 原文地址:https://www.cnblogs.com/xiangwengao/p/2425698.html
Copyright © 2020-2023  润新知