9.4 帶參數(shù)的主函數(shù)
在操作系統(tǒng)下執(zhí)行某個(gè)C程序,是環(huán)境對(duì)C程序的啟動(dòng),可以看作是對(duì)該程序的main()函數(shù)的調(diào)用。main()函數(shù)執(zhí)行結(jié)束后,控制返回環(huán)境。為能從環(huán)境向C程序傳遞信息,啟動(dòng)C程序的命令行可帶有任選的參數(shù)。命令行的一般形式為
程序名 參數(shù)1 參數(shù)2……參數(shù)n
其中程序名和各參數(shù)之間用空白符分隔。
為能讓main()函數(shù)讀取命令行中的參數(shù),環(huán)境將多個(gè)參數(shù)以兩個(gè)參數(shù)形式傳遞給main()函數(shù)、其中第一個(gè)參數(shù)(習(xí)慣記作argc) 表示命令行中參數(shù)的個(gè)數(shù)(包括程序名);第二個(gè)參數(shù)(習(xí)慣記作argv)是一個(gè)字符指針數(shù)組。其中argv[0] 指向程序名字符串的第一個(gè)字符,argv[1]指向參數(shù)1字符串的第一個(gè)字符,…,argv[argc-1] 指向最后一個(gè)參數(shù)字符串的第一個(gè)字符。如果利因山等于1,則表示程序名后面沒(méi)有參數(shù)。下面的例子用于說(shuō)明main()函數(shù)對(duì)參數(shù)argc
與argv的引用方法。
【例9.l】 回打啟動(dòng)程序時(shí)的命令行各參數(shù)。
# include
void main(int argc, char *argv[] /* 或char **argv; */)
{ int k;
for( k=l; k
printf(“%c”,argv[k],k printf(“\n\n”);
}
如上述程序的執(zhí)行程序名為echopro.exe,執(zhí)行該程序的命令行為:
echopro Hello world!
則程序?qū)⑤敵?/P>
Hello world!
在以上命令行中,根據(jù)約定,main()函數(shù)的參數(shù)argc的值為3;argv[0],argv[1],argv[2]分別指向字符串“echopro”、“Hello”、“world!”的第一個(gè)字符。在程序的printf()函數(shù)調(diào)用中,字符輸出格式%c輸出一個(gè)字符,若是已輸出了命令行最后一個(gè)參數(shù),該格式將輸出一個(gè)換行符,若是輸出其它參數(shù),則輸出一個(gè)空白符。
因函數(shù)的數(shù)組參數(shù)是指向數(shù)組首元素的指針變量,所以在主函數(shù)main()中可對(duì)argv施行增量運(yùn)算。例如,在argv[0]指針指向程序名字符串的第一個(gè)字符情況下,對(duì)argv施增量運(yùn)算++argv后,argv[0](或*argv)就指向參數(shù)1的第一個(gè)字符c利用argv的這一性質(zhì),可改寫上述程序?yàn)橐韵滦问剑?/P>
# include
void main(int argc,char **argv)
{ while(--argc>0)
printf(“%s%c”,*++argv,argc>1? '':'\n');
}
這里,++argv使指針argv先加1,讓它一開始就指向參數(shù)1;逐次增回,使它遍歷指向各參數(shù)。又利用函數(shù)printf()的第一個(gè)格式參數(shù)是字符串表達(dá)式,上述程序?qū)rintf()的調(diào)用可改寫成:
printf((argc> l) ? “%s”:“%s\n”,* ++argv);
【例9.2】 假定啟動(dòng)程序時(shí)給出的命令行參數(shù)是一串整數(shù),程序?qū)⑷空麛?shù)求和后輸出。
# include
# include
void main( int argc,char **argv)
{ int k,s;
for(s=0, k=l;)
s+=atoi(*++agv); /* 從數(shù)字字符串譯出整數(shù) */
printf( “\t%d\n”, s);
}
相關(guān)推薦:北京 | 天津 | 上海 | 江蘇 | 山東 |
安徽 | 浙江 | 江西 | 福建 | 深圳 |
廣東 | 河北 | 湖南 | 廣西 | 河南 |
海南 | 湖北 | 四川 | 重慶 | 云南 |
貴州 | 西藏 | 新疆 | 陜西 | 山西 |
寧夏 | 甘肅 | 青海 | 遼寧 | 吉林 |
黑龍江 | 內(nèi)蒙古 |