2013/10/27

[C/C++] argc 和 argv 引數的應用

寫程式的時候常常可以看到main函數裡面的argc和argv這兩個變數。

int main(int argc, char **argv)
但這兩個變數有什麼應用呢?這兩個是用來傳遞參數到程式裡面。
舉例來說:

./a.out      CCC        aaa        bbb
argv[0]   argv[1]    argv[2]    argv[3], argc=4


argc會記錄我們總共輸入了幾個參數;而argv則會記錄每一個變數的內容。以上列例子來說,我們總共輸入了./a.out, CCC, aaa 和 bbb四個參數,所以argc就等於4,而argv會從argv[0]開始依序記錄每一個參數值。這可以大大的增加我們執行程式的便利性。

以檔案輸入輸出來說,假設每次都要去程式碼中修改檔案的名稱,是否太麻煩了呢?因此可以利用這兩個參數,來增加執行程式時候的便利性。底下結合一個檔案輸入輸出的例子。


#include <stdio.h>
#include <stdlib.h>
#define BUFFER_MAX 64
int main(int argc, char **argv)
{
    FILE *fp_in, *fp_out;
    char *buf_in;
    int ret_in;
    char *in_file, *out_file;
    in_file = argv[1];
    out_file = argv[2];
    fp_in = fopen(in_file, "rb");
    fp_out = fopen(out_file, "wb");
    buf_in = (char *)malloc(BUFFER_MAX);
    ret_in = fread(buf_in,1,BUFFER_MAX,fp_in);
    while(ret_in>0)
    {
        fwrite(buf_in,1,BUFFER_MAX,fp_out);
        ret_in=fread(buf_in,1,BUFFER_MAX,fp_in);
    }
    fclose(fp_in);
    fclose(fp_out);
    return 0;
 }


執行結果如下:
輸入檔案:aaa.txt
輸出檔案:bbb.txt



使用argc,argv參數,就可以簡化不用每次都去修改程式的麻煩,在檔案輸出輸入這部分挺方便的!

沒有留言:

張貼留言