Main函數中的argc和argv應用舉例

來源:互聯網
上載者:User

 

儘管之前寫過一篇關於argc,argv方面的文章(http://blog.csdn.net/carson2005/article/details/5766192)但依然有朋友搞不太清楚。所以,這裡,我舉兩個簡單的例子來詳細說明,並告訴你一步一步的操作步驟。

例1:開啟指定路徑下的一個文字檔,讀取其內容,並將其寫入到指定路徑下的另一個檔案當中。其中,採用argv來傳遞輸入檔案路徑和輸出檔案路徑。

參考代碼如下:

#include "stdafx.h"

#include "iostream"

#include "fstream"

using namespace std;

int _tmain(int argc, char* argv[])

{

if (argc != 3)//輸入參數必須為三個,第一個為test 第二個為輸入檔案的路徑,第三個為輸出檔案的路徑

{

cout<<"argument error!"<<endl;

cout<<"example: test c:/test.txt d:/testOut.txt"<<endl;

system("pause");

exit(-1);

}

for (int i=0; i<3; i++)

{

cout<<argv[i]<<endl;

}

ifstream fileIn; 

fileIn.open(argv[1], ios::in);//根據使用者設定的參數,開啟輸入檔案

if (fileIn.fail())//如果檔案開啟失敗,直接退出

{

cout<<"fileIn open error: "<<endl;

system("pause");

exit(-1);

}

ofstream fileOut;

fileOut.open(argv[2], ios::out);//根據使用者設定的參數,開啟(建立)輸出檔案

if (!fileOut)

{

cout<<"fileOut open error..."<<endl;

system("pause");

exit(-1);

}

char str[500];

while(!fileIn.eof())

{

memset(str, '\0', 500*sizeof(char));

fileIn.getline(str, 500);

fileOut<<str<<endl;

cout<<str<<endl;

}

fileIn.close();

fileOut<<"I have learn the usage of argc and argv in main function! Thanks to VitoLee!"<<endl;

fileOut.close();

system("pause");

return 0;

}

筆者在E:\VCprograms\路徑下面,建立了一個名為test的控制台工程,將上述代碼進行編譯,在工程所在的檔案件下,產生了一個名為test.txt的可執行檔。需要注意的是,因為該main函數利用了main函數中的argc,argv,所以,不能直接滑鼠雙擊來啟動。而必須採用命令列的方式進行啟動。具體步驟為:

(1)電腦螢幕左下角,開始---->運行--->在出現的對話方塊中輸入“cmd”,如所示:

 

(2)斷行符號,出現了一個類似於dos的介面,如下所示:

 

(3)由於我們產生的test.ext位於E:\VCprograms\test\Debug,故而,輸入:“cd E:\VCprograms\test\Debug”,斷行符號,出現如下的介面:

 

(4)輸入“e:”,斷行符號(需要特別提醒的是,e後面有一個冒號!)出現如下介面:

 

(5)輸入test,後輸入檔案的絕對路徑和輸出檔案的絕對路徑,並以空格進行區分。例如,筆者輸入的是:“test c:/test.txt d:/result.txt”。(注意:Argc是argument count的簡寫,也就是參數的個數,很顯然,這裡的argc=3,而argv顯然是一個指標數組,對於筆者的輸入而言,argv[0]="test",argv[1]="c:/test.txt",argv[2]="d:/result.txt"。)輸入完三個參數之後,斷行符號,如所示:

 

 

這裡,我在程式裡面,分別輸出了argv[0],argv[1],argv[2],之後,程式按照筆者輸入的參數“c:/test.txt”,開啟位於c盤下面的test.txt檔案,將其內容“It's my first example for argc and argv in main function!”讀取出來(當然,你的檔案裡面,可能並不是這句話。。。),並根據筆者輸入的參數“d:/result.txt”,在d盤下面建立一個名為result.txt的檔案,並將輸入檔案中讀取的內容寫入到result.txt輸出檔案中。就這樣,搞定!

 

例2:結合opencv,用argv來傳遞參數,從而開啟一個圖片檔案。

參考代碼如下所示:

#include "stdafx.h"

#include "cv.h"

#include "highgui.h"

#include "iostream"

using namespace std;

int main(int argc, char* argv[])

{

if (argc != 2)

{

cout<<"argument error..."<<endl;

system("pause");

exit(-1);

}

IplImage *img = cvLoadImage(argv[1]);

cvNamedWindow("img");

cvShowImage("img", img);

cvWaitKey(0);

system("pause");

return 0;

}

跟上個例子一樣,還是在E:\VCprograms下面建立一個名為test的工程,編譯以上代碼,在E:\VCprograms\test\Debug下面,產生了一個名為test.exe的可執行檔。下面,讓我們從命令列進行啟動:

(1)螢幕左下角,開始--->運行,輸入"cmd",斷行符號,結果如下:

(2)輸入“cd E:\VCprograms\test\Debug”,斷行符號,結果如下:

(3)輸入“e:”,斷行符號,結果如下:

(4)輸入"test",並輸入一個空格,然後,滑鼠拖動一個圖片檔案到cmd.exe上(例如,滑鼠拖動c盤下面的test.jpg檔案到cmd.exe),結果如下:這也就意味著,用滑鼠拖動之後,windows可以自動將該檔案的絕對路徑添加上去。

(5)斷行符號,如果不出意外,程式將會建立一個名為“img”的視窗,並在其中顯示你拖動的圖片的內容。

Main函數中的argc,argv就是這麼簡單。

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.