C++ main函數命令行參數使用


 

1. C/C++語言中的main函數,經常帶有參數argc,argv,如下:

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

C語言還規定argc(第一個形參)必須是整型變量,argv( 第二個形參)必須是指向字符串的指針數組。加上形參說明后,main函數的函數頭應寫為:

 main (int argc,char *argv[])

 

2. 由於main函數不能被其它函數調用,因此不可能在程序內部取得實際值。那么,在何處把實參值賦予main函數的形參呢? 實際上,main函數的參數值是從操作系統命令行上獲得的。

   如何在操作系統命令行獲取參數呢?

    (1)在VS中設置時右鍵項目->屬性->調試->命令參數,在命令參數中添加所需參數,字符串之間用空格分開即可。如果是.txt文件,要放在當前目錄下(.cpp所在目錄),不然找不到。

    (2)或者:假如你的程序是hello.exe,如果在命令行運行該程序,(首先應該在命令行下用 cd 命令進入到 hello.exe 文件所在目錄) 運行命令為:

  1. hello.exe data.txt //.txt也在.exe所在目錄下

   但是應該特別注意的是,main 的兩個形參和命令行中的參數在位置上不是 一 一 對應的。

   因為,main的形參只有二個,而命令行中的參數個數原則上未加限制。argc參數表示了命令行中參數的個數(注意:文件名本身也算一個參數),argc的值是在輸入命令行時由系統按實際參數的個數自動賦予的。

 

3. 舉例:

在調用一個可執行程序時,某些情況下需要向程序傳遞參數。如我們可以在控制台中鍵入notepad.exe,
回車后將執行記事本程序。如果我們希望在打開notepad時同時打開一個文本文件,可以在notepad.exe  
后面跟上文件的路徑和名字,如notepad.exe   example.txt(文件在當前路徑)。  
    
   那么程序中如何能得到這些輸入參數呢?這個工作是編譯器幫我們完成的,編譯器將輸入參數的信息
放入main函數的參數列表中。  
    
   main函數的參數列表保存了輸入參數的信息,第一個參數argc記錄了輸入參數的個數,  
   第二個參數是字符串數組的,字符串數組的每個單元是char*類型的,指向一個c風格字符串。  
   以notepad.exe   example.txt   data.txt   train.txt 為例  
   argc是4,就是說argv數組中有四個有效單元  
   第一單元指向的字符串是"notepad.exe"  
   第二單元指向的字符串是"example.txt"  
   第三單元指向的字符串是"data.txt"  
   第四單元指向的字符串是"train.txt"  


   argv數組中的第一個單元指向的字符串總是可執行程序的名字,以后的單元指向的字符串依次是程序調用時的參數。  
    
   這個賦值過程是編譯器完成的,我們只需要讀出數據就可以了。

#include <iostream>
using namespace std;


int   main(int   argc, char*   argv[])
{
    int   i;
    for (i = 0; i<argc; i++)
        cout << argv[i] << endl;
    system("pause");
    return   0;
}

 

在命令行參數中輸入data.txt

結果如下:

 

 

 
       


免責聲明!

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



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