argc argv

ARGc和ARGv中的ARG指的是"參數"(外語:ARGuments, argument counter 和 argument vector

至少有兩個參數至主函式:ARGc和ARGv;

首先是一個計算提供的參數到程式,

第二個是對字元串數組的指針

基本介紹

  • 外文名:argc argv
  • 參數:至少有兩個
  • 包括:ARGc和ARGv;
  • 第二個:對字元串數組的指針
基本作用,事例解析,

基本作用

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( )不是真正的入口點,而是一個標準的函式,這個函式名與具體的作業系統有關。

事例解析

經典例子
對於理解argv[ ]函式很管用:
#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。
再例:
#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默認值
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)]

相關詞條

熱門詞條

聯絡我們