2012-01-02 63 views
0

我們作爲如何在其他函數中使用cmd傳遞參數?

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

聲明的main(),並通過命令行傳遞一些參數和使用它

argv[1]argv[2]在main()函數的定義,但如果我想使用一些其他的什麼函數的定義?

我可以做的一件事總是通過參數從main()傳遞那個指針char** argv到那個函數。但是有沒有其他方法可以這樣做?

+1

我真的不明白,你想問什麼。 – datenwolf 2012-01-02 11:08:06

回答

1

爲了使數據提供給其他的功能,你需要把它作爲參數傳遞,或使其可通過全球(不推薦)或者一個靜態變量。

static char** args cmd_args; 
static int cmd_arg_count; 

int main(int argc, char** argv) { 
    cmd_arg_count = argc; 
    cmd_args = argv; 
    do_work(); 
    return 0; 
} 

void do_work() { 
    if (cmd_args > 1) { 
     printf("'%s'\n", cmd_args[1]); 
    } 
} 

最好的辦法是使解析命令行參數的函數,並存儲在您爲代表的命令行參數的目的專門定義struct結果。然後你可以傳遞這個結構,或者靜態或全局地使用它(再次,使用全局變量幾乎是個不錯的主意)。

+0

哦,這是我一直在尋找的感謝。 – 2012-01-02 11:15:45

+0

僅僅通過指針是更好的恕我直言,除非在整個程序執行過程中數據必須可用 – 2012-01-02 11:22:09

+0

@MatthiasvanderVlies在C中,它提供封裝的方法有限,我認爲使用'static'變量是可以的:它們不會「泄漏」過編制單位,所以潛在的損害範圍非常有限。 – dasblinkenlight 2012-01-02 11:30:57

2

只要通過指針?

int main(int argc, char** argv) { 
    do_something_with_params(argv); 
} 

void do_something_with_params(char** argv) { 
    // do something 
} 

或者,如果你的意思是通過單一的參數:

int main(int argc, char** argv) { 
    do_something_with_argv1(argv[1]); 
    do_something_with_argv2(argv[2]); 
} 

void do_something_with_argv1(char* arg) { 
    // do something 
} 

void do_something_with_argv2(char* arg) { 
    // do something 
} 
0

您可以使用main()中的代碼將值存儲在非局部變量中,然後從其他函數中引用這些變量。

0

如果你真的需要,將它們存儲在全局變量中。

0

但如果我想在其他函數的定義中使用它,該怎麼辦?

你的意思是有主要另一組的參數?這是不可能的,因爲主要在C標準被定義爲

int main(); 

int main(int, char*[]); 

它是有道理的:第一個參數告訴你在命令行上給出的參數個數第二個包含指向這些參數的指針數組。

您有責任理解這些參數並將它們傳遞給其他功能。使用字符串轉換函數,如果你需要使他們的數字。

1

我可以做的一件事情總是通過參數將這個值從main()傳遞給該函數。但是有沒有其他方法可以這樣做?

不會。將argcargv傳遞給其他函數是完全有效的。

int main(int argc, char *argv[]) 
{ 
    typedef struct _cmdline_arg_struct { 
     // all your command line arguments go here 
    }cmdline_arg_struct; 

    /* command line arguments - parsed */ 
    cmdline_arg_struct *pc = (cmdline_arg_struct *) malloc(sizeof(cmdline_arg_struct)); 

    if (parse_cmdline_args(&pc, argc, argv) == PARSE_FAILURE) { 
     usage(); 
     return 0; 
    } 

    /* Now go through the structure and do what ever you wanted to do.. *? 
} 
相關問題