1. 程式人生 > >int main(int argc,char* argv[]) 的含義和用法

int main(int argc,char* argv[]) 的含義和用法

 

1、基本概念

  argc,argv 用 命令列編譯程式時有用。   主函式main中變數(int argc,char *argv[ ])的含義,有些 編譯器允許將main()的返回型別宣告為void,這已不再是合法的C++   main(int argc, char *argv[ ], char **env)才是 UNIXLinux中的標準寫法。     argc: 整數,用來統計你執行程式時送給 main函式命令列引數的個數     * argv[ ]: 指標 陣列,用來存放指向你的字串引數的指標,每一個元素指向一個引數     argv[0] 指向程式執行的全路徑名     argv[1] 指向在DOS命令列中執行程式名後的第一個字串     argv[2] 指向執行程式名後的第二個字串     ...     argv[argc]為NULL。     **env:字串陣列。env[ ]的每一個元素都包含ENVVAR=value形式的字串。其中ENVVAR為環境變數,value 為ENVVAR的對應值。   argc, argv,env是在main( )函式之前被賦值的,
編譯器
生成的 可執行檔案,main( )不是真正的入口點,而是一個標準的函式,這個函式名與具體的作業系統有關。  

2、具體用法

  經典例子   對於理解argv[ ]函式很管用:
1 2 3 4 5 6 7 8 9 #include <stdio.h>//#包含<stdio.h>   int  main( int  argc, char * argv[])     //整數型別主函式(整數型別統計引數個數,字元型別指標陣列指向字串引數) {
     printf ( "%d\n" ,argc);            //格式化輸出      while (argc)                     //當(統計引數個數)          printf ( "%s\n" ,argv[--argc]);    //格式化輸出      return  0;                       //返回0;正常退出 }
    假設將其編譯為 test.exe   在命令列下   > test.exe test hello   得到的輸出結果為   3   hello   test   test.exe   main(int argc, char* argv[ ]),其中argc是指變數的個數,本例中即指test和hello這兩個變數和程式執行的全路徑名或程式的名字,argc即為3。   argv是一個char *的陣列,其中存放指向引數變數的指標,此處argv[0]指向test.exe的全路徑名或test.exe,argv[1]指向test,argv[2]指向hello。     再例:
1 2 3 4 5 6 7 8 9 #include<stdio.h> int  main( int  argc, char  *argv[]) {      if (argc==1||argc>2)          printf ( "請輸入想要編輯的檔名如:fillname" );      if (argc==2)          printf ( "編輯%s\n" ,argv[1]);      return  0; }
    編譯該程式:gcc -o edit edit.c   執行:〉edit   結果:請輸入想要編輯的檔名如:fillname   執行:〉edit f1.txt   結果:編輯 f1.txt   執行edit時,argc為1,argv[0]指向edit   而執行edit f1.txt時,argc的值為2,argv[0]指向edit,argv[1]指向f1.txt   列印argv預設值
1 2 for (;n<=(26+i);n++)      printf ( "argv_%d=[%s]\n" ,n,argv[n]);
     無引數執行,得到的輸出結果為:   argv_0=[main]   argv_1=[(null)]   argv_2=[REMOTEHOST=10.229.26.252]   argv_3=[HOSTNAME=localhost.localdomain]   argv_4=[SHELL=/bin/bash]   argv_5=[TERM=vt100]   argv_6=[HISTSIZE=1000]   argv_7=[QTDIR=/usr/lib64/qt-3.3]   argv_8=[OLDPWD=/home/view/zx]   argv_9=[QTINC=/usr/lib64/qt-3.3/include]   argv_10=[USER=view]   argv_11=    [LS_COLORS=no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=01;32:*.cmd=01;32:*.exe=01;32:*.com=01;32:*.btm=01;32:*.bat=01;32:*.sh=01;32:*.csh=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:*.bz2=01;31:*.bz=01;31:*.tz=01;31:*.rpm=01;31:*.cpio=01;31:*.jpg=01;35:*.gif=01;35:*.bmp=01;35:*.xbm=01;35:*.xpm=01;35:*.png=01;35:*.tif=01;35:]   argv_12=[MAIL=/var/spool/mail/view]   argv_13=[PATH=/usr/lib64/qt-3.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/usr/lib/jdk/bin:/home/view/bin:.]   argv_14=[INPUTRC=/etc/inputrc]   argv_15=[PWD=/home/view/zx/c]   argv_16=[JAVA_HOME=/usr/lib/jdk]   argv_17=[LANG=zh_CN. GB18030]   argv_18=[SSH_ASKPASS=/usr/libexec/openssh/gnome-ssh-askpass]   argv_19=[SHLVL=1]   argv_20=[HOME=/home/view]   argv_21=[LANGUAGE=zh_CN. GB18030:zh_CN. GB2312:zh_CN]   argv_22=[LOGNAME=view]   argv_23=[QTLIB=/usr/lib64/qt-3.3/lib]   argv_24=[LESSOPEN=|/usr/bin/lesspipe. sh %s]   argv_25=[G_BROKEN_FILENAMES=1]   argv_26=[_=./main]   argv_27=[(null)]