argv: 指針的指針
argc: 整數(shù)
char **argv or char *argv[] or char argv[][]
為了能形象的說(shuō)明這兩個(gè)參數(shù)的含義,我們先用一個(gè)實(shí)例來(lái)進(jìn)行講解:
假設(shè)程序的名稱為test,當(dāng)只輸入test,則由操作系統(tǒng)傳來(lái)的參數(shù)為:
argc = 1,表示只有一程序名稱;
argc只有一個(gè)元素,argv[0]指向輸入的程序路徑及名稱:./ test
當(dāng)輸入test para_1,有一個(gè)參數(shù),則由操作系統(tǒng)傳來(lái)的參數(shù)為:
argc = 2,表示除了程序名外還有一個(gè)參數(shù);
argv[0]指向輸入的程序路徑及名稱;
argv[1]指向參數(shù)para_1字符串
當(dāng)輸入test para_1 para_2 有2個(gè)參數(shù),則由操作系統(tǒng)傳來(lái)的參數(shù)為:
argc = 3,表示除了程序名外還有兩個(gè)參數(shù);
argv[0]指向輸入的程序路徑及名稱;
argv[1]指向參數(shù)para_1字符串;
argv[2]指向參數(shù)para_2字符串;
以此類推………………
void main( int argc, char *argv[] )
char *argv[]: argv是一個(gè)指針數(shù)組,元素個(gè)數(shù)是argc,存放的是指向每一個(gè)參數(shù)的指針,第一個(gè)元素即argv[0]為程序運(yùn)行的全路徑名,從二個(gè)元素(argv[1])開(kāi)始,是每一個(gè)參數(shù)的名稱,最后一個(gè)元素為NULL。總的來(lái)說(shuō),即:
* argv: 字符串?dāng)?shù)組
argv[0] 為程序運(yùn)行的全路徑名
argv[1] 為執(zhí)行程序名后的第一個(gè)字符串;
argv[2] 為執(zhí)行程序名后的第二個(gè)字符串;
...
argv[argc]為NULL。
int argc: 表示argv的大小,是實(shí)際參數(shù)個(gè)數(shù)+1,其中+1是因?yàn)閍rgv[0]是編譯后的可執(zhí)行文件名
main() 參數(shù) :
Turbo C2.0啟動(dòng)時(shí)總是把a(bǔ)rgc、argv、env(存放環(huán)境變量)這三個(gè)參數(shù)傳遞給main()函數(shù), 可以在用戶程序中說(shuō)明(或不說(shuō)明)它們, 如果說(shuō)明了部分(或全部)參數(shù), 它們就成為main()子程序的局部變量。
請(qǐng)注意: 一旦想說(shuō)明這些參數(shù), 則必須按argc, argv, env 的順序, 如以下的例子:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二種情況是合法的, 但不常見(jiàn), 因?yàn)樵诔绦蛑泻苌儆兄挥胊rgc, 而不
用argv[]的情況。
以下提供一樣例程序EXAMPLE.EXE, 演示如何在main()函數(shù)中使用三個(gè)參數(shù):
#include <stdio.h>
#include <stdlib.h>
main(int argc, char *argv[], char *env[])
{
int i;
printf( "These are the %d command- line arguments passed to
main:\n\n", argc);
for( i = 0; i <= argc; i++)
printf( "argv[%d]:%s\n", i, argv[i] );
printf( "\nThe environment string(s)on this system are:\n\n");
for( i = 0; env[i] != NULL; i++ )
printf( " env[%d]:%s\n", i, env[i] );
}
./EXAMPLE first "I’m a good boy" c "last " stop
注意: 可以用雙引號(hào)括起內(nèi)含空格的參數(shù), 如本例中的: " argument with blanks"和"Last but one")。
結(jié)果是這樣的:
These are the 6 command-linearguments passed to main:
argv[0]:./ EXAMPLE
argv[1]:first
argv[2]: I’m a good boy
argv[3]:c
argv[4]: last
argv[5]:stop
argv[6]:(NULL)