Main函数中的argc和argv应用举例
盡管之前寫過一篇關于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就是這么簡單。
總結
以上是生活随笔為你收集整理的Main函数中的argc和argv应用举例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pixhawk-姿态解算-互补滤波
- 下一篇: 第一章 PX4程序编译过程解析