2012年10月21日 星期日

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

沒想到第一篇文章是寫這個
當初學C語言的時候因為根本沒用到,所以也不了解
現在成了學系統程式的第一個障礙..

這個網誌就存放一些學習筆記之類的 (以防自己之後忘記還要重新找資料..)
敝人因為實力不足
見解可能過於狹隘或者有誤
這時候歡迎指正&討論



argc 為 command line 傳入的參數個數
argv[] 為這 argc 個參數的內容,從 argv[0 ... argc-1],其中 argv[0] 為此程式的名稱(或路徑名)。

若到此處還是不太了解
那請看以下範例

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

執行結果如下圖所示


那這個有什麼用 ?
舉個例子像是 ls 這個命令
可以單單 ls , 或是 ls [路徑] ,或是 ls [其他參數] [路徑] ... 等等
究竟要如何實作這麼命令呢 ?
顯然可以用argc, argv[] 這些變數來判斷使用者輸入的內容
過濾不合法的輸入,並依照指令、參數輸出所需要東西

其實還有一種形式為
int main(int argc, char *argv[], char *envp[])
{
    int i;
    printf("You have inputed total %d arguments\n", argc);
    for(i=0; i<argc; i++)
        printf("arg%d: %s\n", i, argv[i]);
 
    printf("The following is envp :\n");
    for(i=0; *envp[i] != '\0'; i++)
        printf("%s\n", envp[i]);
    return 0;
}

其中 envp 存的是當前系統的環境變數 (以NULL結尾)
執行上述程式的話將會印出所有環境變數
而傳入的環境變數並不會在執行中改變
如果要改變真實的環境變數那要搭配其他函式使用
至於環境變數是什麼? 這不是這篇文章要討論的範圍zzz (其實只是懶了

4 則留言:

  1. 大神創blog了<(_ _)>
    問一下結果貼code的部份是用什麼??

    回覆刪除
  2. 跟著大神的筆記來學習一下<(_ _)>

    回覆刪除