2016-11-29 19 views
0

我試圖讓程序檢查用戶在運行程序時是否傳遞程序參數。外匯:編程參數在C - ./dev --print -

./dev --print 

我想出了以下內容:

int main(int argc, char *argv[]) { 
    char print[] = "--print"; 
    if(strcmp(argv[1], print) == 0) { 
    solve_a_bunch_of_functions_and_print_without_user_input(); 
    } 
    else { 
    ask_for_user_input(); 
    then_solve_bunch_of_functions(); 
    } 
} 

這是這樣做的正確的/最聰明的方法是什麼?

目前我遇到seg-faults的問題後,這個實現每次我進入else語句。不確定我在這裏的實現與它有什麼關係。

+2

如果沒有參數傳遞,那麼'argv [1]'將是'NULL',並且'NULL'傳遞給'strcmp'不起作用。您可能需要遍歷每個參數,將其與已知值進行比較,並根據此值設置一些布爾值。這是通常的getopt模式(這也可能是你想使用的東西)。 – Ryan

+0

你說得對。現在工作。謝謝! – asdasd

回答

1

是的,這是一種方式,雖然我想大多數C程序員不會與單獨的變量打擾,只是做:

if(strcmp(argv[1], "--print") == 0) 

當然,你應該首先確認有在爭吵argv[1],也檢查argc。否則,你通過NULLstrcmp(),這是一個壞主意。

if(argc > 1 && strcmp(argv[1], "--print") == 0) 
{ 
} 
+0

謝謝!絕對清潔。 – asdasd