argc & argv的使用

 0. 使用你的命令提示字元 

在進入正題的時候,這裏教你如何使用命令提示字元 (應該說如何會用命令列)。請您先按下開始->執行-> cmd.exe 按下 Enter。

好了後按下 "dir.exe /?",你會看到會有一堆參數跑出來,雖平常都說 "dir 這個指令是用來查目錄、檔案",但實際上dir 它是一個小的應用程序,副檔名是 .exe,只是在命令提示字元裏面我可以給它「外部參數」,比如說我鍵入

dir.exe C:\ 

它便會幫我找出 C:\ 底下所有檔案、資料夾,我再鍵入

dir.exe C:\ /b 

它也會幫我找出 C:\ 底下所有資料夾與檔案,只是這次是簡單模式的輸出。這裏就可以開始說一點點 argc, argv 了。

第一次我鍵入  dir.exe C:\ ,總共有二個單字,所以 argc = 2;第一個字是 "dir.exe",所以 argv[0] = "dir.exe",第二個字是 "C:\",所以 argv[1] = "C:\\"。

第二次我鍵入 dir.exe C:\ /b,一樣的道理,argc = 3,argv[0]="dir.exe",argv[1] = "C:\\",argv[2] = "/b"。


1. main 函式傳回值 

「現今」的 main 函式傳回值一律都是 int ,這也是您常看到 int main() 或是 int main(void);在早期,main 是可以用 void main() 方式,而現在部份 compiler 實做,即使你寫

main()
{
    // dothing
}
 
很不建議這種寫法,實際上它是把它看成

int main()
{
    // do thing
    return 0;


2. main 函式引數列 

在上面有提到傳回值是 int ,而上面的例子引數列都是 void ,事實上目前比較通用、能接用的是二種寫法,

int main()
int main(int argc, char *argv[]) 

第二種寫法就是您要問的 argv,回到第 0 點所提到的,這種程序事實上就是要在命令提示字元底下下參數纔會用到 argc, argv,你直接快點二下或是用 IDE 直接 compile - run,是看不出什麼結果的。

3. 範例 1  更多:http://www.51240.com

這裏先舉一個簡單的程序碼,我要寫的程序是,你於命令列輸入了什麼,我就把它輸出出來。

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int i=0;
    printf("共 %d 個參數\n", argc);
    for(i=0; i<argc; ++i){
    printf("第 %d 個參數:%s\n", i+1, argv[i]);
    }
    // system("pause"); // 用命令字元的話就不要再暫停
    return 0;
}
 
接下來就是重點了,怎麼去測試這個程序?假設我生成是 Test.exe,爲方便說明,先把它複製到 C:\ 底下。

開啓你的命令提示字元,輸入
"C:\Test.exe"  Param1 Param2 Param3

 
你會發現結果是

共 4 個參數
第 1 個參數: "C:\Test.exe"
第 2 個參數: Param1
第 3 個參數: Param2
第 4 個參數: Param3
 
由上敘述可知,任何程序的 argc 必大於等於1,而且 argv[0] 就是程序名字本身。

4. 範例 2 

現在假設要寫的這個程序是,輸入 sum.exe 1 2 3 4 56 7 ,後面跟一大堆數字,最後會把這些數字加總後再顯示出來,於是我們便可這麼做

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
    int i=0, sum=0;
    for(i=1; i<argc; ++i) // 注意,我們要的數字是從 argv[1] 開始
    {
    sum += atoi(argv[i]); 
    // 由於 argv[i] 是字串,但我們要算的是"數字" 的總合,
    // 所以用 atoi 將  argv[i] 這字串轉成數字再加總
    }
    printf("Sum=%d\n", sum); // 最後再輸出總合
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章