argv: 指針的指針
argc: 整數
char **argv or char *argv[] or char argv[][]
為了能形象的說明這兩個參數的含義,我們先用一個實例來進行講解:
假設程序的名稱為test,當只輸入test,則由操作系統傳來的參數為:
argc = 1,表示只有一程序名稱;
argc只有一個元素,argv[0]指向輸入的程序路徑及名稱:./ test
當輸入test para_1,有一個參數,則由操作系統傳來的參數為:
argc = 2,表示除了程序名外還有一個參數;
argv[0]指向輸入的程序路徑及名稱;
argv[1]指向參數para_1字符串
當輸入test para_1 para_2 有2個參數,則由操作系統傳來的參數為:
argc = 3,表示除了程序名外還有兩個參數;
argv[0]指向輸入的程序路徑及名稱;
argv[1]指向參數para_1字符串;
argv[2]指向參數para_2字符串;
以此類推………………
void main( int argc, char *argv[] )
char *argv[]: argv是一個指針數組,元素個數是argc,存放的是指向每一個參數的指針,第一個元素即argv[0]為程序運行的全路徑名,從二個元素(argv[1])開始,是每一個參數的名稱,最后一個元素為NULL。總的來說,即:
* argv: 字符串數組
argv[0] 為程序運行的全路徑名
argv[1] 為執行程序名后的第一個字符串;
argv[2] 為執行程序名后的第二個字符串;
...
argv[argc]為NULL。
int argc: 表示argv的大小,是實際參數個數+1,其中+1是因為argv[0]是編譯后的可執行文件名
main() 參數 :
Turbo C2.0啟動時總是把argc、argv、env(存放環境變量)這三個參數傳遞給main()函數, 可以在用戶程序中說明(或不說明)它們, 如果說明了部分(或全部)參數, 它們就成為main()子程序的局部變量。
請注意: 一旦想說明這些參數, 則必須按argc, argv, env 的順序, 如以下的例子:
main()
main(int argc)
main(int argc, char *argv[])
main(int argc, char *argv[], char *env[])
其中第二種情況是合法的, 但不常見, 因為在程序中很少有只用argc, 而不
用argv[]的情況。
以下提供一樣例程序EXAMPLE.EXE, 演示如何在main()函數中使用三個參數:
#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
注意: 可以用雙引號括起內含空格的參數, 如本例中的: " argument with blanks"和"Last but one")。
結果是這樣的:
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)