天天看點

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

微信公衆号:"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程式檔案名(包括它的完整路徑)。

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

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,這個就是編譯生成的可執行檔案,俗稱“程式/軟體”。

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

D:\test\main_argc_argv.exe

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

那麼怎麼運作呢?

打開指令行,滑鼠左鍵選中.exe檔案,拖到cmd視窗中:

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

然後在後面加上我們想要加的字元串。這裡加上"Cc"和"Aa"

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

然後,按Enter鍵運作。

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

如我們所期望的,指令行我們敲參數時,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[])。

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)
看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

掃描二維碼 關注微信公衆号"C語言初學者之家"

看完你就明白:什麼情況下該用int main(int argc, char *argv[])而不是int main(void)

繼續閱讀