关于 命令行参数 main(int argc,char** argv)
void?main(int?argc,?char*?argv[?])等同于void?main(int?argc,?char*?*argv)
這行中有三個字符串分別為 cp.exe doc1.txt doc2.txt
則argc為3,即argc是命令行中參數的個數。
char *argv[]為一個指像字符串的數組。
argv[0]="cp.exe"
argv[1]="doc1.txt"
argv[2]="doc2.txt"
agv[0]為一個字符串指針,它就象 *p=”goodbye” ?實際上是*argv[0]=”cp.exe”
p為goodbye的首地址,*p則指向goodbye的第一個字符, *p=”goodbye”與p[ ]=”goodbye”完全致的作用, 同理argv[0]就指向cp.exe的地址,*argv[0]指向cp.exe的第一個字符,即c
再如下一個文件為test.c的文件
#i nclude <stdio.h>
#i nclude <unistd.h>
#i nclude <string.h>
int main(int argc, char **argv)
{?? //用 gcc –o a test.c? 然后執行 ./a? 12345,以下為原程序和執行結果
char *p="goodbye";??????
?????? char *p1[2]={"hello!!!!!!!","world"};
printf("%s\n",p); // goodbye
?????? printf("%c\n",*p);//? g
?????? printf("%s\n",p1[0]); // hello!!!!!!!
?????? printf("%s\n",p1[1]); // world
??? ?? printf("%s\n",argv[0]);//? ./a
?????? printf("%s\n",argv[1]);//? 12345
}
在你運行程序以后,操作系統會自動將參數傳給你。
例如你編譯好的程序叫做program.exe
你運行 program a b
這個時候,argc = 3
argv[0] = "program"
argv[1] = "a"
argv[2] = "b"
int???? main(?? int?? argc?? ,?? char?? *argv[ ]?? ,?? char?? *envp[ ]?? )??
or int???? main(?? int?? argc?? ,?? char?? **argv?? ,?? char?? **envp? )
? 三個參數的形式。?
?? main()函數一般用int或者void形的。我比較喜歡用int型定義main。因為在結束的時候可以返回給操作系統一個值以表示執行情況。??
????
?? int?? argc??
?? 這個東東用來表示你在命令行下輸入命令的時候,一共有多少個參數。比方說你的程序編譯后,可執行文件是test.exe??
?? D:\tc2>test??
?? 這個時候,argc的值是1??
?? 但是??
?? D:\tc2>test.exe?? myarg1?? myarg2??
?? 的話,argc的值是3。也就是?? 命令名?? 加上兩個參數,一共三個參數??
????
?? char?? *argv[]??
?? 這個東東用來取得你所輸入的參數??
?? D:\tc2>test??
?? 這個時候,argc的值是1,argv[0]的值是?? "test"??
?? D:\tc2>test?? myarg1?? myarg2??
?? 這個時候,argc的值是3,argc[0]的值是"test",argc[1]的值是"myarg1",argc[2]的值是"myarg2"。??
?? 這個東東一般用來為程序提供非常重要的信息,如:數據文件名,等等。??
?? 如:copy?? a.c?? b.txt??
?? 這個時候,a.c和b.txt就是所謂的“非常重要的信息”。不指定這兩個文件,你沒法進行拷貝。??
?? 當你的程序用到argc和argv這兩個參數的時候,可以簡單地通過判斷argc的值,來看看程序的參數是否符合要求??
????
?? char?? *envp[]??
?? 這個東東相對來說用得比較少。它是用來取得系統的環境變量的。??
?? 如:在DOS下,有一個PATH變量。當你在DOS提示符下輸入一個命令(當然,這個命令不是dir一類的內部命令)的時候,DOS會首先在當前目錄下找 這個命令的執行文件。如果找不到,則到PATH定義的路徑下去找,找到則執行,找不到返回Bad?? command?? or?? file?? name??
?? 在DOS命令提示符下鍵入set可查看系統的環境變量??
?? 同樣,在UNIX或者LINUX下,也有系統環境變量,而且用得比DOS要多。如常用的$PATH,$USER,$HOME等等。??
?? envp保存所有的環境變量。其格式為(UNIX下)??
?? PATH=/usr/bin;/local/bin;??
?? HOME=/home/shuui??
?? 即:??
?? 環境變量名=值??
?? DOS下大概也一樣。??
?? 環境變量一般用來為程序提供附加信息。如,你做了一個顯示文本的內容的程序。你想控制其一行中顯示的字符的個數。你可以自己定義一個環境變量(UNIX下)??
?? %setenv?? NUMBER?? =?? 10??
?? %echo?? $NUMBER??
?? 10??
?? 然后你可以在程序中讀入這個環境變量。然后根據其值決定一行輸出多少個字符。這樣,如果你不修改環境變量的話,你每次執行這個程序,一行中顯示的字符數都是不一樣的??
?? 下面是一個例子程序??
????
?? /* 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????
總結
以上是生活随笔為你收集整理的关于 命令行参数 main(int argc,char** argv)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Clubhouse是干嘛的 为什么这么火
- 下一篇: 直流耦合and交流耦合