2017-02-19 124 views
2

這是C++如何獲得從的argv []

在窗戶CMD線用戶類型

p3.exe X <data.txt 

其中 「p3.exe」 是程序名稱的元素,

「X 「將是一個1,2或3,

和」data.txt「是一些文本文件程序用於輸入。

在main方法中,我期待argv [1]等於在cmd行輸入的字符串X.事實上,如果我這樣做

wcout << argv[1] 

如預期的輸出是「X」。

所以,現在我做到這一點,

int main(int argc, char* argv[]) 
{ 
    if (argc > 1) 
    { 
      if (argv[1] == "X") 
      { 
       //do stuff 
      } 
    } 
    return 0; 
} // end main 

但(的argv [1] == 「X」)從未計算結果爲真

我缺少或不理解?

+0

並且'argv [1]'中存儲了什麼值?你有沒有嘗試過使用調試器,通過你的代碼來找出它? –

+0

@AlgirdasPreidžius問題說OP做了。 – interjay

+0

@interjay哦,沒注意到:/大概撇清了問題:/ –

回答

4

您不能比較C風格的字符串(char *)和==,因爲它只比較指針而不是指向的字符串。

您可以使用strcmp

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

,或者確保比較的至少一側是一個C++字符串:

if (std::string(argv[1]) == "X") 
+0

兩者都很完美。所以第二個答案通過將argv [1]指針「鑄造」成一個字符串來工作? – greg

+0

是的,它將C字符串複製到臨時std :: string對象中,該對象用於執行比較。如果您想將'argv [1]'與多個值進行比較,則可以在單獨的行中創建該字符串,然後將其與每個值進行比較。 – interjay

0

使用if(strcmp(argv[1],"X")==0) ...。應該解決問題。