天天看點

C語言main函數的參數一、main函數的參數二、C程式的規範寫法三、envp參數四、課後作業五、版權聲明

文章目錄

  • 一、main函數的參數
  • 二、C程式的規範寫法
  • 三、envp參數
  • 四、課後作業
  • 五、版權聲明

程式運作的時候,有些需要帶參數,有些不帶參數,例如linux作業系統的指令,它們本質上就是C程式。

1)Linux指令中,無參數的不多。

pwd  #顯示目前目錄
clear  #清屏
           

2)大部Linux指令是帶參數的。

cp  book1.c book2.c
mkdir /tmp/dname
mv book3 /tmp/dname/book3
rm -rf /tmp/dname
           

各位現在是在C語言學習的初級階段,編寫的C程式非常簡單,運作不需要參數,但是在實際開發中,main函數一般都需要參數,沒有參數的情況極少。

main函數的參數是從指令提示符下執行程式的時候傳入,例如ls 指令。

C語言main函數的參數一、main函數的參數二、C程式的規範寫法三、envp參數四、課後作業五、版權聲明

在以上示例中ls指令有兩個參數,-l和book1?.c。

一、main函數的參數

main函數有三個參數,argc、argv和envp,它的标準寫法如下:

int argc,存放了指令行參數的個數。

char *argv[],是個字元串的數組,每個元素都是一個字元指針,指向一個字元串,即指令行中的每一個參數。

char *envp[],也是一個字元串的數組,這個數組的每一個元素是指向一個環境變量的字元指針。

envp先放一下,先講argc和argv。

示例(book101.c)

/*
 * 程式名:book101.c,此程式示範main函數的參數。
 * 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main(int argc,char *argv[])
{
  int ii=0;

  // 顯示參數的個數
  printf("argc is %d\n",argc);

  // 列出全部的參數
  for (ii=0;ii<argc;ii++)
  {
    printf("argv[%d] is %s\n",ii,argv[ii]);
  }
}
           

運作結果

C語言main函數的參數一、main函數的參數二、C程式的規範寫法三、envp參數四、課後作業五、版權聲明

注意幾個事項:

1)argc的值是參數個數加1,因為程式名稱是程式的第一個參數,即argv[0],在上面的示例中,argv[0]是./book101。

2)main函數的參數,不管是書寫的整數還是浮點數,全部被認為是字元串。

3)參數的命名argc和argv是程式員的約定,您也可以用argd或args,但是不建議這麼做。

二、C程式的規範寫法

先假設程式執行都是有參數的,也就是說main函數都有參數,那麼使用者怎麼知道程式的參數個數和含義,記住它?看使用手冊?不是,優秀的程式員會在程式中提供說明文字。我們先來看一個例子。

示例(book103.c)

/*
 * 程式名:book103.c,此程式示範main函數的參數。
 * 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main(int argc,char *argv[])
{
  if (argc!=6)
  {
    printf("\n這是一個超女選秀程式,根據提供的超女資訊,判斷"\
           "她是否符合王妃的标準。\n\n");
    printf("用法:./book103 name age height sc yz\n");
    printf("例如:./book103 西施 22 170 火辣 漂亮\n");
    printf("name   超女的姓名。\n");
    printf("age    超女的年齡。\n");
    printf("height 超女的身高,機關:cm。\n");
    printf("sc     超女的身材,火辣;普通;飛機場。\n");
    printf("yz     超女的顔值,漂亮;一般;歪瓜裂棗。\n\n");

    return -1;
  }

  printf("您輸入的超女資訊是:姓名(%s),年齡(%s),身高(%s),身材(%s),顔值(%s)。\n",\
          argv[1],argv[2],argv[3],argv[4],argv[5]);

  printf("正在計算中,請稍候......\n");

  if (((atoi(argv[2]) >=  20) && (atoi(argv[2]) <=  30)) &&  // 年齡在20-30之間
      ((atoi(argv[3]) >= 165) && (atoi(argv[3]) <= 175)) &&  // 身高在165-175之間
      ((strcmp(argv[4],"火辣")==0)                     ) &&  // 身材火辣
      ((strcmp(argv[5],"漂亮")==0)                     ))    // 顔值漂亮
  {
    printf("超女(%s)選秀合格,送往後宮。\n",argv[1]); return 0;
  }
  else
  {
    printf("超女(%s)選秀不合格,發放五兩銀子後送回家。\n", argv[1]); return 0;
  }
}
           

運作程式的時候,如果參數不符,運作效果如下。

C語言main函數的參數一、main函數的參數二、C程式的規範寫法三、envp參數四、課後作業五、版權聲明

如果參數個數相符,運作效果如下。

C語言main函數的參數一、main函數的參數二、C程式的規範寫法三、envp參數四、課後作業五、版權聲明

從以上的例子可以看出,如果執行程式的時候提供的參數與設計不符,顯示程式的使用說明,說明文字應該包括程式的功能和全部參數的解釋,還可以包括作者、聯系方式等更詳細的資訊。

程式的使用說明文字非常重要,有幾個原因:

1)程式的使用者不一定會寫程式,也沒必要去查使用手冊等資料;

2)程式的使用者就算會寫程式,也沒必要在使用的時候去看源代碼,并且,您也不一定想讓他看到源代碼;

3)如果程式的使用者是您自己,時間一長,您也會忘記程式的參數。

當然,這些隻是程式員的約定,不是C語言的規定。

三、envp參數

envp存放了目前程式運作環境的參數。

示例(book105.c)

/*
 * 程式名:book105.c,此程式用于示範目前程式運作環境的參數envp。
 * 作者:C語言技術網(www.freecplus.net) 日期:20190525
*/
#include <stdio.h>

int main(int argc,char *argv[],char *envp[])
{
  int ii = 0;

  while (envp[ii] != 0)  // 數組最後一個元素是0
  {
    printf("%s\n",envp[ii]); ii++;
  }
}
           

運作效果

C語言main函數的參數一、main函數的參數二、C程式的規範寫法三、envp參數四、課後作業五、版權聲明

注意了,book105運作的結果與linux系統的env指令相同。

在實際開發中,envp參數的應用場景不多,各位了解一下就行了。

四、課後作業

編寫示例程式,把本章節介紹的知識點全部示範一遍,用程式示範可以加深您的了解和映象。

五、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的連結。

來源:C語言技術網(www.freecplus.net)

作者:碼農有道

如果這篇文章對您有幫助,請點贊支援,或在您的部落格中轉發我的文章,謝謝!!!

如果文章有錯别字,或者内容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!

繼續閱讀