2012-05-21 39 views
1

當我嘗試分析命令行參數時出現奇怪的錯誤。我爲什麼稱它奇怪?那麼,那是因爲我事先就C++中的命令行解析進行了大量的研究,沒有人的測試代碼在我的visual studio 2010 IDE上工作。當我使用調試器時,我發現當我嘗試檢查參數時,總是返回FALSE。在下面的例子中,我做了一個if(argv [1] ==「-in」)。我試着在觀察窗口中以幾種不同的方式進行測試。我試着先把它傳遞給一個字符串。或者使用單引號。然後,我搜索了互聯網,並使用了其他人的代碼,他們認爲這些代碼能夠起作用。我究竟做錯了什麼?這是我在Visual Studio環境中設置錯誤的設置嗎?解析C++中的命令行參數。我遇到一個奇怪的錯誤

這是我原本

#include <iostream> 
#include <stdlib.h> 
#include <sstream> 
#include <fstream> 

using namespace std; 





int main(int argc, char * argv []) //Usage FileSplitter -in [filename] -sz [chunk size] 
{ 

if (argc==5) 
    { 
    string strTest = argv[1]; 
    if ((argv[1] == "-in") && (argv[3] == "-sz")) 
       { 
         //Code here 
       } 
    } 
} 

反正這是我的原代碼。我已經嘗試過多次調整,並嘗試使用以下網站的代碼...

http://www.cplusplus.com/forum/articles/13355/ 他有一些比較argv [1]和字符串的例子......他說它的工作原理。

http://www.cplusplus.com/forum/unices/26858/ 在這裏還有一個人發佈了一些關於比較的代碼..在Ryan Caywood的帖子下。

當我嘗試進行比較時,它們不適用於我。我想只是做一個合法的strcmp,但我想知道爲什麼我的視覺工作室環境不像其他人的系統那樣編譯?

另外,在調試過程中,我在項目屬性的調試部分輸入命令行參數。我不知道這是否會影響任何東西。我也嘗試過構建和運行這個項目,但唉,一切都無濟於事。在此先感謝任何能給我一些好建議的人。

回答

2

參數通過c字符串傳遞,所以如果我正確記得,使用==比較它們只會比較指向它們的指針。如果必須,請嘗試使用strcmp()比較兩個c字符串,或將它們轉換爲C++字符串並以這種方式進行比較。

+0

是的,我知道關於strcmp,如上所述。我得到它使用strcmp工作,但這並不能回答我的問題。爲什麼它適用於其他人,但不是我?我也嘗試通過聲明一個字符串變量並將argv傳遞給它來嘗試將其轉換爲C++字符串格式,但這也不起作用。 – Klik

+0

據我所知,它不應該爲其他任何人工作,也許這是一個編譯器特定的事情,但不知道。 – RoneRackal

+0

在我發佈的其中一個鏈接是一個人問這個具體問題,並在收到建議後使用,「如果(argv [1] ==」-t「)」他說它運作良好。我發佈的另一個鏈接是解析命令行參數的教程。我完全複製了代碼,但它不適用於我。嗯... – Klik

1

你正在做的字符串比較不正確。

要麼使用strcmp()或者(就像你提到的鏈接中建議的那樣)使用C風格,首先轉換爲C++風格string

if (string(argv[i]) == "stuff") { ... }