天天看點

main函數的參數argc和argv

版權聲明:本文為部落客原創文章,轉載請注明CSDN部落格源位址!共同學習,一起進步~ https://blog.csdn.net/Eastmount/article/details/20413773

該篇文章主要是關于C++\C語言最基礎的main函數的參數知識,是學習C++或C語言都必備的知識點.不知道你是否知道該知識?希望對大家有所幫助.

一.main()函數參數

通常我們在寫主函數時都是void main()或int main() {..return 0;},但ANSI-C(美國國家标準協會,C的第一個标準ANSI釋出)在C89/C99中main()函數主要形式為:

(1).int main(void)

(2).int main(int argc,char *argv[]) = int main(int argc,char **argv).

其參數argc和argv用于運作時,把指令行參數傳入主程式.其中ARG是指arguments,即參數.具體含義如下:

(參照Arguments to main和C++ Primer7.2.6節)

(1).int argc:英文名為arguments count(參數計數)

count of cmd line args,運作程式傳送給main函數的指令行參數總個數,包括可執行程式名,其中當argc=1時表示隻有一個程式名稱,此時存儲在argv[0]中.

(2).char **argv:英文名為arguments value/vector(參數值)

pointer to table of cmd line args,字元串數組,用來存放指向字元串參數的指針數組,每個元素指向一個參數,空格分隔參數,其長度為argc.數組下标從0開始,argv[argc]=NULL.

argv[0] 指向程式運作時的全路徑名

argv[1] 指向程式在DOS指令中執行程式名後的第一個字元串

argv[2] 指向執行程式名後的第二個字元串

argv[argc] 為NULL.

二.源代碼中的argc與argv

由于C程式必須有main()函數為入口,而且它不能被其他函數調用(可以調用自身),是以不能再程式内部取得實際值.那麼在何處把實參指派給main函數的形參呢?這就需要調用"運作"或"DOS提示符",在調用可執行程式exe時,編譯器會幫助我們将輸入參數的資訊放入main函數的參數清單中傳參.

1.計算指令行參數個數程式如下:

<strong>//C 輸出參數個數
 
#include <stdio.h>
 
#include <stdlib.h>
 
int main(int argc,char *argv[])
 
{
 
printf("參數個數=%d\n",argc);
 
system("PAUSE");
 
return 0;
 
}
 
 
 
//C++ 輸出參數個數
 
#include <iostream>
 
using namespace std;
 
int main(int argc,char *argv[])
 
{
 
cout<<"參數個數="<<argc<<endl;
 
system("PAUSE");
 
return 0;
 
}</strong>
      

  

調用"運作"(快捷鍵Ctrl+R)或"cmd"輸入"G:\test.exe"會輸出"參數個數=1",此時存儲的就是執行程式名.輸入"G:\test.exe 2 hello good"輸出"參數個數=4":

2.檢視argv[]二維數組存儲具體字元串的代碼如下:

<strong>//C 檢視argv存儲參數值及對應序号
 
#include <stdio.h>
 
#include <stdlib.h>
 
int main(int argc,char *argv[])
 
{
 
int i;
 
printf("參數個數=%d\n",argc);
 
for(i=0; i<argc; i++)
 
{
 
printf("參數序号=%d ",i);
 
printf("參數值=%s\n",argv[i]);
 
}
 
system("PAUSE");
 
return 0;
 
}
 
 
 
//C++ 檢視argv存儲參數值及對應序号
 
#include <iostream>
 
using namespace std;
 
int main(int argc,char *argv[])
 
{
 
cout<<"參數個數="<<argc<<endl;
 
for(int i=0; i<argc; i++)
 
{
 
cout<<"參數序号="<<i<<" ";
 
cout<<"參數值="<<argv[i]<<endl;
 
}
 
system("PAUSE");
 
return 0;
 
}</strong>
      

"運作"中輸入"G:\test.exe 2 hello good",則輸出入下圖所示:

其中argv[0]指向字元串可執行程式的名稱G盤下的test.exe,通常會位于"項目名稱\Debut\xxx.exe"中.後面argv[1..3]單元依次指向程式調用時的參數.

三.調用argc和argv

在"運作"中輸入"notepad.exe"回車能執行記事本程式(位于C:\Windows\System32),如果輸入"notepad.exe test.txt"可以打開test.txt文本檔案,其中test.txt位于目前路徑下.如下圖所示:

為什麼我要講述這個例子呢?主要是說明參數與exe之間的關系,main()函數其實與之也類似.同時在使用檔案知識時,我們通常會涉及到main函數的argc和argv參數.如在《C++ Primer》這本書中第10.3.9實作單詞轉換的例子就涉及到該運用,這裡隻講述涉及到該參數的部分代碼供大家參考,大家可以自己去學習了解:

#include <iostream>
 
using namespace std;
 
int main(int argc,char *argv[])
 
{
 
//參數個數=3:工程名\讀取txt檔案\寫入txt檔案
 
if(argc!=3)
 
throw runtime_error("wrong number of arguments");
 
//打開轉換檔案,argv[1]為讀取的要轉換txt檔案名 open_file自定義打開函數
 
if(!open_file(map_file,argv[1]))
 
throw runtime_error("no transformation file");
 
//打開要轉換的寫入txt檔案
 
if(!open_file(input,argv[2]))
 
throw runtime_error("no input file");
 
return 0;
 
}
      

其中具體操作是通過map(鍵-值對的集合)對象來實作,推薦大家看看這本最經典的C++書籍.

最後希望該文章對大家有所幫助,請不要小看這簡單的基礎知識,如果有錯誤或不足之處,還請海涵.

(By:Eastmount 2014-3-5 夜2點 原創:http://blog.csdn.net/eastmount)

main函數的參數argc和argv

如果這篇文章幫助到了你,你可以請作者喝一杯咖啡

main函數的參數argc和argv