2010-09-06 128 views
2

我對C++中命令行傳遞的參數進行了一些驗證,並且遇到了一些困難。C++命令行參數比較

我在做,像這樣

./a.exe inputfile.txt outputfile.txt 16 flush_left 

,我試圖做驗證,像這樣

if(argv[4] == "flush_left" || argv[4] == "flush_justify" || argv[4] == "flush_right"){ 

而且它不工作按計劃進行。雖然我不明白爲什麼這不起作用。一切從我讀過的和看到,應該就好

+1

它應該是args [3]? – 2010-09-06 01:56:42

+1

@moi編號'0:./a.exe','1:inputfile.txt','2:outputfile.txt','3:16','4:flush_left' – 2010-09-06 02:19:04

回答

11

嘗試:

std::string argv4 = argv[4]; 
if(argv4 == "flush_left" || argv4 == "flush_justify" || argv4 == "flush_right"){ 
    //... 
} 

或(未經測試):

if(argc >=4 && (!strcmp(argv[4],"flush_left") || !strcmp(argv[4],"flush_justify") || !strcmp(argv[4],"flush_right"))) { 
    //... 
} 

的argv [4]的類型爲char*,和字符串有鍵入const char*,您無法使用==運算符比較這些類型的內容(=文本),您將不得不使用類似strcmpstd::string類的內容。

使用==char*比較變量的地址而不是內容。

+0

+1:我有點倉促,刪除了我的答案。 – 2010-09-06 02:04:38

+0

另一種可能性是使用strcmp()。然而,正如你所示,我會用std :: string去。 – 2010-09-06 02:05:12

+2

「strcmp/strncmp返回不匹配的字符數量」 - 這是一個勇敢的斷言。注意說明你的來源? – paxdiablo 2010-09-06 02:10:26

2

./a.exe inputfile.txt outputfile.txt 16 flush_left

零基於argv的給你: 的argv [0] = A.EXE 的argv [1] = inputfile.txt 的argv [2 ] = outputfile.txt 的argv [3] = 16 的argv [4] = flush_left

因此指數是正確的,但是應該使用的strcmp(stringa,stringb)並確保代替返回0。