就是int argc char *argv[ ] 這個是什麼意思,怎麼樣進行傳參的,求大神指點迷津。。。
C編譯器允許main()函數沒有參數,或者有兩個參數(有些實現允許更多的參數,但這只是對標准的擴展)。這兩個參數,一個是int類型,一個是字符串類型。第一個參數是命令行中的字符串數。按照慣例(但不是必須的),這個int參數被稱為argc(argument count)。大家或許現在才明白這個形參為什麼要取這麼個奇怪的名字吧,呵呵!至於英文的意思,自己查字典吧。第二個參數是一個指向字符串的指針數組。命令行中的每個字符串被存儲到內存中,並且分配一個指針指向它。按照慣例,這個指針數組被稱為argv(argument value)。系統使用空格把各個字符串格開。一般情況下,把程序本身的名字賦值給argv[0],接著,把最後的第一個字符串賦給argv[1],等等。
現在我們來看一個例子:
//c.c
#include "stdio.h"
int main(int argc, char *argv[])
{
int count;
printf("The command line has %d arguments:
", argc - 1);
for(count = 1; count < argc; count++)
printf("%d: %s
", count, argv[count]);
return 0;
}
編譯運行,在命令行輸入c I love you 回車,下面是從命令行運行該程序的結果:
The command line has 3 arguments:
1:I
2:love
3:you
從本例可以看出,程序從命令行中接受到4個字符串(包括程序名),並將它們存放在字符串數組中,其對應關系:
argv[0] ------> c(程序名)
argv[1] ------> I
argv[2] ------> love
argv[3] ------> you
至於argc的值,也即是參數的個數,程序在運行時會自動統計,不必我們操心。
這個例子中,每個字符串都時一個單詞(字母),那既然是字符串,要把一句話當作參數賦給程序該怎麼辦?你可以在命令行裡這樣輸入 c "I love you." "I’m too."。程序運行結果:
The command line has 2 arguments:
1:I love you.
2:I’m too.
其對應關系:
argv[0] ------> c(程序名)
argv[1] ------> I love you.
argv[2] ------> I’m too.
要注意的是,你在命令行的輸入都將作為字符串形式存儲於內存中。也就是說,如果你輸入一個數字,那麼要輸出這個數字,你應該用%s格式而非%d或者其他。
再來看一個例子:
//d.c
#include "stdio.h"
int main(int argc, char *argv[])
{
FILE *fp;
fp = fopen(argv[1], "w");
fputs("I love you.", fp);
fclose(fp);
return 0;
}
編譯運行,打開命令行並輸入d love.txt 回車。這樣,打開d.c文件所在的目錄,你會發現多了一個名為 love.txt 的文件,打開後裡面的內容正是世界上說的最多的那句話。