儘管之前寫過一篇關於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就是這麼簡單。