2012-10-18 77 views
1

我一直有麻煩與終端,但我想知道,如果這樣的事情是合法的:比較參數[]在主

int main(int argc, char *argv[]) 
{ 
    if(argv[3] = "today") 
    { 
     //do something 
    } 
} 

否則,我可以比較他們使用C字符串?

+0

是應該是'='?或者'=='?無論哪種方式都是錯誤的,但每個人都會得到不同的結果。 –

回答

3

不,語法或邏輯上是不合法的。您需要使用strcmp

if (argc >= 4 && strcmp(argv[3], "today") == 0) { 
    //matched 
} 

(或者,如迪特馬爾·庫爾建議,你可以使用的std :: string和許多簡化您的編碼的生活。)

+0

如果你不知道'argc'是4或更多,即使使用C++方法,也需要進行第一次比較。如果'argc'是3,'argv [3]'將是一個空指針,並且幼稚的C++方法會被嘲諷。 Ff'argc'小於2,訪問'argv [3]'是未定義的行爲。 –

+0

@DavidHammen我從來沒有說過它不是必需的? – Corbin

+0

我知道你沒有。你做得正確。沒有其他答案,包括我的,解決了'argv [3]'可能是空指針或未定義的事實。 +1是一個好的偏執狂程序員,並測試使用'argv [3]'執行比較是否有效。 –

2

程序參數只是指向char數組的指針。您正在比較指針而不是字符串內容。最簡單的方法是使用std::string比較參數,例如:

if (argv[3] == std::string("today")) { 
    ... 
} 
0

char* or arrays不能=運營商進行比較。您需要使用strcmp()功能

int main(int argc, char *argv[]) 
{ 
    if(strcmp(argv[3], "today") == 0) 
    { 
     //do something 
    } 
} 
0

這將始終返回false。您正在比較兩個地址,而不是兩個字符串。你想要做的是比較這些地址的內容,或比較字符串本身。

在C的優選的方法是使用功能strcmp

if (strcmp(argv[3], "today") == 0) { 
    // Do something 
} 

在C++中,使用字符串:

if (std::string("today") == argv[3]) { 
    // Do something 
} 
2
int main(int argc, char *argv[]) 
{ 
    std::vector<std::string> arguments(argv, argv + argc); 
    if (arguments[3] == "today") 
    { 
     //do something 
    } 
} 
+0

是的,這就是我通常在編寫使用命令行參數的嚴肅程序時所做的事情。 –