我一直有麻煩與終端,但我想知道,如果這樣的事情是合法的:比較參數[]在主
int main(int argc, char *argv[])
{
if(argv[3] = "today")
{
//do something
}
}
否則,我可以比較他們使用C字符串?
我一直有麻煩與終端,但我想知道,如果這樣的事情是合法的:比較參數[]在主
int main(int argc, char *argv[])
{
if(argv[3] = "today")
{
//do something
}
}
否則,我可以比較他們使用C字符串?
不,語法或邏輯上是不合法的。您需要使用strcmp
。
if (argc >= 4 && strcmp(argv[3], "today") == 0) {
//matched
}
(或者,如迪特馬爾·庫爾建議,你可以使用的std :: string和許多簡化您的編碼的生活。)
如果你不知道'argc'是4或更多,即使使用C++方法,也需要進行第一次比較。如果'argc'是3,'argv [3]'將是一個空指針,並且幼稚的C++方法會被嘲諷。 Ff'argc'小於2,訪問'argv [3]'是未定義的行爲。 –
@DavidHammen我從來沒有說過它不是必需的? – Corbin
我知道你沒有。你做得正確。沒有其他答案,包括我的,解決了'argv [3]'可能是空指針或未定義的事實。 +1是一個好的偏執狂程序員,並測試使用'argv [3]'執行比較是否有效。 –
程序參數只是指向char
數組的指針。您正在比較指針而不是字符串內容。最簡單的方法是使用std::string
比較參數,例如:
if (argv[3] == std::string("today")) {
...
}
char* or arrays
不能=
運營商進行比較。您需要使用strcmp()
功能
int main(int argc, char *argv[])
{
if(strcmp(argv[3], "today") == 0)
{
//do something
}
}
這將始終返回false。您正在比較兩個地址,而不是兩個字符串。你想要做的是比較這些地址的內容,或比較字符串本身。
在C的優選的方法是使用功能strcmp
:
if (strcmp(argv[3], "today") == 0) {
// Do something
}
在C++中,使用字符串:
if (std::string("today") == argv[3]) {
// Do something
}
int main(int argc, char *argv[])
{
std::vector<std::string> arguments(argv, argv + argc);
if (arguments[3] == "today")
{
//do something
}
}
是的,這就是我通常在編寫使用命令行參數的嚴肅程序時所做的事情。 –
是應該是'='?或者'=='?無論哪種方式都是錯誤的,但每個人都會得到不同的結果。 –