2015-04-26 144 views
1

我正在一個程序,我從命令行輸入文件的名稱。我需要檢查輸入是否是給定的字符,如「 - 」,並根據此結果處理文件,但我不太確定如何執行此操作。我已經試過的方法,這似乎在邏輯上是有意義的,只是檢查是否比較字符*與字符

argv[1] == "-"; 

總是返回零,甚至當我寫「 - 」在命令輸入。我能做什麼?

+0

標籤您使用的語言... –

+1

如果你只是比較的第一個字符(* argv [1] =='a')' –

+1

'argv [1]'是一個以空字符結尾的字符數組的地址。 '「a」是另一個(以空字符結尾)字符數組的地址。這些地址不相等。 –

回答

3

你需要寫 strcmp(argv[1],"a")==0;

在你的榜樣,你比較兩個指針,而不是兩個字符串。
編譯時,編譯器會在內存中的某處聲明「a」,然後在編譯時用它的內存地址替換它。由於argv [1]不能真正坐在與(臨時)「a」相同的字節上,所以結果始終爲假。 您需要迭代兩個字符串並迭代比較每個字符。 strcmp比較2個字符串,並返回0,如果它們以這種確切的方式相等。

更多信息有關strcmphttp://www.cplusplus.com/reference/cstring/strcmp/

爲了處理多個字符,你可以放置一些的if-else的:

if (strcmp(argv[1],"-")==0){ 
    minus_character_handling_function(); 
} else if (strcmp(argv[1],"+")==0){ 
    plus_character_handling_function(); 
} else if (strcmp(argv[1],"a")==0){ 
    a_character_handling_function(); 
} 
+0

將字符指針與不能編譯的字符進行比較。 – IanPudney

+0

你已修復它。 – IanPudney

+0

這是有效的,但並不完全:/,當我說「a」是我的角色時,我會變得一般,並且它與其他角色必須一起使用,但實際上我需要比較輸入的角色是「 - 「並且它不起作用:(其他任何建議? –

0

做這個檢查:

argv[1] == "-"; 

你正在比較其中包含命令行的firrst參數的地址,以及t他地址你在程序中的文字"-",他們是不同的,所以這就是你的測試失敗的原因。您實際上想要比較這兩個地址開始的內存位置中包含的字符,這是通過strcmp系列的功能完成的。

1

表達式argv[1]是(空終止的)字符數組的地址。

表達式"-"是另一個以空字符結尾的字符數組的地址。

這些地址不相等,因此表達式argv[1] == "-"總是錯誤的。


這就是說,這裏是檢查的另一種方法,如果輸入的是一個給定的字符:

if (argv[1][0] != 0 && argv[1][1] == 0) 
{ 
    switch (argv[1][0]) 
    { 
    case '-': 
     ... 
     break; 
    case '+': 
     ... 
     break; 
    case '=': 
     ... 
     break; 
    ... 
    } 
}