幾個小時前,我問過關於C++中命令行參數的類似問題。現在我有另一個問題,據我所知,命令行參數將被保存爲argv數組中的字符串。所以用一個字符串比較的主題應該是合乎邏輯的,但它並不在我所希望的方式工作,看看這段代碼:命令行參數是否有一些字符串?
#include <iostream>
using namespace std;
int main(int argc,char** argv)
{
if (argv[2]=="stack") cout << "right";
cout << argv[2];
return 0;
}
現在我通過這個命令我叫zero.exe編譯的應用程序;
zero.exe stack
輸出應爲「rightstack」,但if
命令將跳過並且僅cout << argv[2];
將執行,所以只堆將監視器上顯示被。它顯示"stack"
被保存到argv[2]
,所以if (argv[2]=="stack")
應該可以工作,但事實並非如此。哪裏有問題?
你說「你的代碼比較兩個指針,即使字符串值相等,它也不會相等。」這當然是這種情況,我不是在爭辯。但在其他情況下,例如如果在同一源代碼中有兩個相同的字符串文字,它們很可能會被摺疊,並且'(「test」==「test」)'將評估爲true。 –
@Mike Seymour尼斯回答,非常感謝:)) – Nofuzy
另一個整潔的技巧是'std :: vector(argv,argv + argc);' –