int main(int argc,char* argv[])讲解
???????
??????? 分類:??????????? 學(xué)習(xí)筆記2011-11-07 21:502354人閱讀評(píng)論(0)收藏舉報(bào) dos編譯器pathunixcommandc???? 在最近學(xué)習(xí)中老是遇到? int main(int argc,char* argv[]),以為就是簡(jiǎn)單的參數(shù)應(yīng)用了,但是看代碼是沒能理解參數(shù)的具體傳遞過程,上網(wǎng)找資料才算弄明白點(diǎn),下面的一篇文章講的很好很詳細(xì),大家可以根據(jù)自己的情況看看,資源充分利用嘛。(原文重復(fù)的地方已重新整理,無贅述)轉(zhuǎn)自http://blog.csdn.net/lambol_8309/article/details/4524964
int main(int argc,char* argv[])
argc是命令行總的參數(shù)個(gè)數(shù)?? ?? argv[]是argc個(gè)參數(shù),其中第0個(gè)參數(shù)是程序的全名(包括文件絕對(duì)路徑),以后的參數(shù)命令行后面跟的用戶輸入的參數(shù),比如:?? ?? int? main(int argc,? char* argv[])?? ?? {?? ?????? int?? i;?? ?????? for (i = 0; i<argc; i++)?? ??????????? cout<<argv[i]<<endl;?? ?????? cin>>i;?
?????? return?? 0;??
?? }?? ?? 執(zhí)行時(shí)敲入?? ?? F:/MYDOCU~1/TEMPCODE/D1/DEBUG/D1.EXE?? aaaa?? bbb?? ccc?? ddd?? ?? 輸出如下:?? ?? F:/MYDOCU~1/TEMPCODE/D1/DEBUG/D1.EXE?? ?? aaaa?? ?? bbb?? ?? ccc?? ?? ddd?? -------------------------------------------------------------------- argc記錄了用戶在運(yùn)行程序的命令行中輸入的參數(shù)的個(gè)數(shù)。?? arg[]指向的數(shù)組中至少有一個(gè)字符指針,即arg[0].他通常指向程序中的可執(zhí)行文件的文件名。在有些版本的編譯器中還包括程序文件所在的路徑。 ------------------------------------------------------------------------- 在調(diào)用一個(gè)可執(zhí)行程序時(shí),某些情況下需要向程序傳遞參數(shù)。如我們可以在控制臺(tái)中鍵notepad.exe,回車后將執(zhí)行記事本程序。如果我們希望在打開notepad時(shí)同時(shí)打開一個(gè)文本文件,可以在notepad.exe 后面跟上文件的路徑和名字,如notepad.exe example.txt(文件在當(dāng)前路徑)。?? ???? 那么程序中如何能得到這些輸入?yún)?shù)呢?這個(gè)工作是編譯器幫我們完成的,編譯器將輸入?yún)?shù)的信息放入main函數(shù)的參數(shù)列表中。? main函數(shù)的參數(shù)列表保存了輸入?yún)?shù)的信息,第一個(gè)參數(shù)argc記錄了輸入?yún)?shù)的個(gè)數(shù),第二個(gè)參數(shù)是字符串?dāng)?shù)組的,字符串?dāng)?shù)組的每個(gè)單元是char*類型的,指向一個(gè)c風(fēng)格字符串。?? ?? 以notepad.exe?? example.txt為例?? ?? argc是2,就是說argv數(shù)組中有兩個(gè)有效單元?? ?? 第一單元指向的字符串是"notepad.exe"?? ?? 第二單元指向的字符串是"example.txt"?? ??? ?? argv數(shù)組中的第一個(gè)單元指向的字符串總是可執(zhí)行程序的名字,以后的單元指向的字符串依次是程序調(diào)用時(shí)的參數(shù)。?? ??? ?? 這個(gè)賦值過程是編譯器完成的,我們只需要讀出數(shù)據(jù)就可以了。 ----------------------------------------------------------------------------- ? int?? argc?? ?? 這個(gè)東東用來表示你在命令行下輸入命令的時(shí)候,一共有多少個(gè)參數(shù)。比方說你的程序編譯后,可執(zhí)行文件是test.exe?? ?? D:/tc2>test?? ?? 這個(gè)時(shí)候,argc的值是1?? ?? 但是?? ?? D:/tc2>test.exe?? myarg1?? myarg2? 的話,argc的值是3。也就是命令名加上兩個(gè)參數(shù),一共三個(gè)參數(shù)?? ??? ?? char?? *argv[]?? ?? 這個(gè)東東用來取得你所輸入的參數(shù)?? ?? D:/tc2>test?? ?? 這個(gè)時(shí)候,argc的值是1,argv[0]的值是?? "test"?? ?? D:/tc2>test?? myarg1?? myarg2?? ?? 這個(gè)時(shí)候,argc的值是3,argc[0]的值是"test",argc[1]的值是"myarg1",argc[2]的值是"myarg2"。?? ?? 這個(gè)東東一般用來為程序提供非常重要的信息,如:數(shù)據(jù)文件名,等等。?? ?? 如:copy?? a.c?? b.txt?? ?? 這個(gè)時(shí)候,a.c和b.txt就是所謂的“非常重要的信息”。不指定這兩個(gè)文件,你沒法進(jìn)行拷貝。?? ?? 當(dāng)你的程序用到argc和argv這兩個(gè)參數(shù)的時(shí)候,可以簡(jiǎn)單地通過判斷argc的值,來看看程序的參數(shù)是否符合要求?? ??? ?? char?? *envp[]?? ?? 這個(gè)東東相對(duì)來說用得比較少。它是用來取得系統(tǒng)的環(huán)境變量的。?? ?? 如:在DOS下,有一個(gè)PATH變量。當(dāng)你在DOS提示符下輸入一個(gè)命令(當(dāng)然,這個(gè)命令不是dir一類的內(nèi)部命令)的時(shí)候,DOS會(huì)首先在當(dāng)前目錄下找這個(gè)命令的執(zhí)行文件。如果找不到,則到PATH定義的路徑下去找,找到則執(zhí)行,找不到返回Bad?? command?? or?? file?? name?? ?? 在DOS命令提示符下鍵入set可查看系統(tǒng)的環(huán)境變量?? ?? 同樣,在UNIX或者LINUX下,也有系統(tǒng)環(huán)境變量,而且用得比DOS要多。如常用的$PATH,$USER,$HOME等等。?? ?? envp保存所有的環(huán)境變量。其格式為(UNIX下)?? ?? PATH=/usr/bin;/local/bin;?? ?? HOME=/home/shuui?? ?? 即:?? ?? 環(huán)境變量名=值?? ?? DOS下大概也一樣。?? ?? 環(huán)境變量一般用來為程序提供附加信息。如,你做了一個(gè)顯示文本的內(nèi)容的程序。你想控制其一行中顯示的字符的個(gè)數(shù)。你可以自己定義一個(gè)環(huán)境變量(UNIX下)?? ?? %setenv?? NUMBER?? =?? 10?? ?? %echo?? $NUMBER?? ?? 10?? ?? 然后你可以在程序中讀入這個(gè)環(huán)境變量。然后根據(jù)其值決定一行輸出多少個(gè)字符。這樣,如果你不修改環(huán)境變量的話,你每次執(zhí)行這個(gè)程序,一行中顯示的字符數(shù)都是不一樣的?? ?? 下面是一個(gè)例子程序?? ??? ?? /* argtest.c */?? ?? #include<stdio.h>?? ?? int main(?? int?? argc?? ,?? char?? *argv[]?? ,?? char?? *envp[]?? )?? ?? {?? ?? int?? i;?? ??? ?? printf(?? "You?? have?? inputed?? total?? %d?? argments/n"?? ,?? argc?? );?? ?? for(?? i=0?? ;?? i<argc?? ;?? i++)?? ?? {?? ?? printf(?? "arg%d?? :?? %s/n"?? ,?? i?? ,?? argv[i]?? );?? ?? }?? ??? ?? printf(?? "The?? follow?? is?? envp?? :/n"?? );?? ?? for(?? i=0?? ;?? *envp[i]!='/0'?? ;?? i++?? )?? ?? {?? ?? printf(?? "%s/n"?? ,?? envp[i]?? );?? ?? }?? ?? return?? 0;?? ?? }?? ??? ??? ?? D:/>argtest?? this?? is?? a?? test?? programe?? of?? main()'s?? argments?? ?? You?? have?? inputed?? total?? 9?? argments?? ?? arg0?? :?? D:/TC/NONAME.EXE?? ?? arg1?? :?? this?? ?? arg2?? :?? is?? ?? arg3?? :?? a?? ?? arg4?? :?? test?? ?? arg5?? :?? programe?? ?? arg6?? :?? of?? ?? arg7?? :?? main()'s?? ?? arg8?? :?? argments?? ?? The?? follow?? is?? envp?? :?? ?? TMP=C:/WINDOWS/TEMP?? ?? TEMP=C:/WINDOWS/TEMP?? ?? PROMPT=$p$g?? ?? winbootdir=C:/WINDOWS?? ?? PATH=C:/WINDOWS;C:/WINDOWS/COMMAND?? ?? COMSPEC=C:/WINDOWS/COMMAND.COM?? ?? SBPCI=C:/SBPCI?? ?? windir=C:/WINDOWS?? ?? BLASTER=A220?? I7?? D1?? H7?? P330?? T6?? ?? CMDLINE=noname?? this?? is?? a?? test?? programe?? of?? main()'s?? argments???? ----------------------------------------------------------------------------------------- 命令行參數(shù)啊。argc?? 是參數(shù)的個(gè)數(shù),argv[]是參數(shù),argv[0]是文件名,argv[1]是第一個(gè)參數(shù)...?? ?? 如你得exe文件名是:myprog.exe,那么?? ?? myprog?? 12?? 22?? 32?? ?? 則argv[0]="myprog",argv[1]="12",argv[2]="22"...?? ??? ?? exit()是程序退出時(shí)的返回碼。可以用其他程序接收,判斷是否正常退出。如exit(-1)認(rèn)為異常退出。
轉(zhuǎn)載于:https://www.cnblogs.com/sxudk/p/3481107.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的int main(int argc,char* argv[])讲解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梅花五角多少钱啊?
- 下一篇: 多线程之间共享数据的实现