程序運行的時候,有些需要帶參數,有些不帶參數,例如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 命令。
在以上示例中ls命令有兩個參數,-l和book1?.c。
一、main函數的參數
main函數有三個參數,argc、argv和envp,它的標準寫法如下:
int main(int argc,char *argv[],char *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]);
}
}
運行結果
注意幾個事項:
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;
}
}
運行程序的時候,如果參數不符,運行效果如下。
如果參數個數相符,運行效果如下。
從以上的例子可以看出,如果執行程序的時候提供的參數與設計不符,顯示程序的使用說明,說明文字應該包括程序的功能和全部參數的解釋,還可以包括作者、聯繫方式等更詳細的信息。
程序的使用說明文字非常重要,有幾個原因:
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++;
}
}
運行效果
注意了,book105運行的結果與linux系統的env命令相同。
在實際開發中,envp參數的應用場景不多,各位瞭解一下就行了。
四、課後作業
編寫示例程序,把本章節介紹的知識點全部演示一遍,用程序演示可以加深您的理解和映象。
五、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!