天天看點

程式指令行argc\argv

在一些程式中會看到這樣的定義

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

這樣的寫法在一些C\C++會經常看到,現在對這兩個參數做一個解釋。

在上述代碼行中argc表示指令行輸入參數的個數(以空白符分隔),argv中存儲了所有指令行的參數。這裡的指令行不是指在IDE輸入什麼指令,而是在Windows的DOS和Linux中執行可執行檔案時輸入的指令。如下程式(Windows版本):

#include <iostream>
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>

using namespace std;
using namespace cv;

int main(int argc, char **argv)
{
    if (argc != )
    {
        cout << "輸入指令行的參數不正确!" << endl;
        return -;
    }

    Mat srcImage;
    srcImage = imread(argv[], CV_LOAD_IMAGE_ANYCOLOR);

    if (!srcImage.data)
    {
        cout << "檔案為空!" << endl;
        return -;
    }

    namedWindow("argcargv", WINDOW_AUTOSIZE);
    imshow("argcargv", srcImage);

    waitKey();

    return ;
}
           

生成解決方案後,不運作,找到工程中的Debug檔案夾下會看到有一個.exe執行檔案,如我的是argcDOS.exe。将圖像檔案放入到Debug檔案中,打開DOS視窗,進入到.exe檔案夾中執行如下操作(以我的檔案為例):

程式指令行argc\argv

結果如下:

程式指令行argc\argv

在DOS視窗中輸入的指令行argcDOS.exe lena.bmp,argc代表是輸入指令行個數即在此例中為2,argv[]存儲指令内容,在此為argv[0]中存儲argcDOS.exe,argv[1]存儲lena.bmp。

PS:今天用Windows做的示範,是因為Linux崩潰了,重裝中,哭….

更新Linux環境運作方式,不再重複,見截圖

程式指令行argc\argv