zoukankan      html  css  js  c++  java
  • 命令列引數

    http://caterpillar.onlyfun.net/Gossip/CppGossip/CommandArg.html
     
    程式在執行時,可以附加一些引數以指定執行不同的功能,例如:
    copy -r ./temp ./tmp

    其中copy是程式名稱,而-r、./temp、./tmp都是在程式執行時附加給程式的一些引數,這種程式執行方式在以文字畫面為主的程式中相當常見,稱之為「命令列引數」(Command-line argument)。

    在之前的程式中,您的main()函式在括號中總是空白的,而如要使用命令列引數,可以在括號中如下填寫:
    int main(int argc, char *argv[]) {
    ....
    }

    參數argc是一個整數,它記錄命令列引數的個數,這個數目包括了程式名稱,例如下面的執行指令,argc將記錄為5:
    app hello.c -o -c project.p

    每個引數之間以空白作區隔,上面的命令包括程式名稱共會有五個引數,即app、hello.c、-o、-c、project.p,這五個引數分別儲存在使用指標的字串陣列之中,即char *argv[]中。

    程式在執行後,argc的值一定會大於1,因為至少包括了程式名稱,而argv則分別儲存了引數的字串,例如上面的例子中,argv[0]是"app"、 argv[1]是"hello.c"、argv[2]是"-o"、argv[3]是"-c"、argv[4]是"project.p"。

    在命令列引數的使用中,如果您的輸入是一個包括空白的字串,則使用" "來包括,例如:
    show "This is a string!"

    如此argv[0]是程式名稱"show",而argv[1]的字串就會是"This is a string!"。

    接下來介紹一些處理命令列引數的技巧,由於命令列引數是儲存在陣列中,取出這些引數的最好方式當然就是使用for迴圈,而會通常使用一個前導字元,例如' -'來指定引數的選項功能,由於argv是個字元陣列,自然的您可以使用switch來比對前導字元,例如:
    for(int i = 1; i < argc; i++) {
    char *arg = argv[i];

    switch(arg[0]) {
    case '-':
    // 處理參數,設定執行選項,例如-o、-p、-r等等
    default:
    // 執行對應功能
    }
    }

    在判斷執行選項的case中,您可以進一步檢查第二個字元,例如:
    switch(arg[1]) {
    case 'o':
    // 選項o的處理
    break;
    case 'p':
    // 選項p的處理
    break;
    case 'r':
    // 選項r的處理
    break;
    default:
    // 選項錯誤處理或其它處理
    }

    以上是命令列引數處理時的大致流程,當然不同的程式會有不同的處理方式,不過大致上不離以上的架構。
  • 相关阅读:
    Microsoft Visual C++ Compiler for Python
    ArcGIS Server的Tile的松散型存储(Exploded)
    git下载指定版本的代码
    C#+SharpMap的相关代码
    C#+MapServer相关代码
    WebGIS点要素渲染性能测试
    Docker的4种网络模式
    AngularJS中的指令全面解析(转载)
    风云2号云图Mosaic Dataset处理
    查找错误的等值线中的高程点
  • 原文地址:https://www.cnblogs.com/nickchan/p/3104413.html
Copyright © 2011-2022 走看看