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;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM