微信公衆号:"C語言初學者之家"
之前的文章中提到,C語言main函數可以寫作int main(void),也可以寫成int main(int argc, char *argv[]) 。
到底哪種main函數寫法對?main()、int main(int argc, const char * argv [])...
文章的最後,我們說:一般情況下,你程式設計用int main(void)就可以了。那你可能會問:一般情況指哪些情況?什麼情況下要用int main(int argc, char *argv[]) ?
這篇文章給你解答。
1.什麼情況下用int main(int argc, char *argv[]) 。
我們需要和程式進行互動。你知道,在程式運作過程中,可以通過scanf函數,輸入數組、字元、字元串給程式處理。
那麼能不能在程式啟動的時候(),就攜帶參數給他,而不是運作過程中敲入東西給程式。這時候需要用用到帶參數(int argc, char *argv[])的main函數。
你很可能用過ping指令,去ping一個IP位址,比如:ping 192.168.0.1
其實這個裡的ping就是一個exe程式,"192.168.0.1"是一個字元串,是我們傳遞給程式的參數。
是以,當你需要程式帶參數地啟動的時候,就用int main(int argc, char *argv[])。
2.怎麼使用argc和argv參數。
你可能會想,argc和argv是傳給main函數的參數。那這個參數是誰傳的?main函數不是已經是入口函數了嗎?還有别的函數調用main函數?
argc和argv是你通過指令行視窗傳給程式的。
你先猜猜下面的程式運作結果是什麼?
#include <stdio.h>
int main(int argc , char *argv[])
{
printf("argc = %d\n", argc);
printf("%s\n", *argv);
}
我們編譯運作,結果如下。有沒有發現,*argv是字元串,字元串的内容是exe程式檔案名(包括它的完整路徑)。
argc = 1,這個表示什麼?表示的是指令行有1個字元串,這個字元串是"D\test\main_arg_argv.exe",也就是我們的程式名。
你可能會想:
(1)那怎麼通過指令行給程式傳遞字元串呢?
(2)程式是怎麼樣擷取到傳遞來的字元串呢?
答案是:
(1)用這樣的格式給程式傳遞字元串:
程式名.exe 字元串1 字元串2 字元串3 ... 字元串n
執行exe程式時,你可以在.exe名字後面加上任意多個字元串。每個字元串用空格隔開。
(2)在main函數裡通過循環依次一個個地來接收字元串。
舉個例子:
我們來做這樣一個程式:
要求:
傳遞的某個字元串等于"Aa"就列印"A for apple",傳遞的某個字元串裡等于"Bb"就輸出"B for ball",傳遞的某個字元串等于"Cc"就輸出"C for ball",傳遞的某個字元串等于"Dd"就輸出"D for dog".
先上代碼:
#include <stdio.h>
#include <string.h>
int main(int argc , int *argv[])
{
printf("argc = %d\n", argc);
argv++;
while (*argv){
if (strcmp(*argv, "Aa") == 0){
argv++;
printf("A for apple\n");
}else if (strcmp(*argv, "Bb") == 0){
argv++;
printf("B for ball\n");
}else if (strcmp(*argv, "Cc") == 0){
argv++;
printf("C for cat\n");
}else if (strcmp(*argv, "Dd") == 0){
printf("in d\n");
argv++;
printf("D for dog\n");
}
}
}
注意這個時候,我們就不能直接在編輯器裡直接運作程式,因為這樣自動運作是沒有參數的。
點下圖中的編譯按鈕。然後進入源檔案所在檔案夾:D:\test。可以看到生成了一個檔案名叫main_argc_argv.exe,這個就是編譯生成的可執行檔案,俗稱“程式/軟體”。
D:\test\main_argc_argv.exe
那麼怎麼運作呢?
打開指令行,滑鼠左鍵選中.exe檔案,拖到cmd視窗中:
然後在後面加上我們想要加的字元串。這裡加上"Cc"和"Aa"
然後,按Enter鍵運作。
如我們所期望的,指令行我們敲參數時,Cc在Aa前面,是以先列印出"C for cat",後打出"A for apple"。
注意:這裡的argc是3,表示的是什麼呢?
之前我們說過,arrgc=1時,表示指令行隻有一個字元串,是程式名"D\test\main_arg_argv.exe"。
3表示指令行有3個字元串,分别是:程式名"D\test\main_arg_argv.exe"、"Cc"和"Aa"。
這下你應該明白怎麼使用main函數中的參數了。
3.總結
當你需要程式帶參數地啟動的時候,就用int main(int argc, char *argv[])。
掃描二維碼 關注微信公衆号"C語言初學者之家"