我正在一個程序,我從命令行輸入文件的名稱。我需要檢查輸入是否是給定的字符,如「 - 」,並根據此結果處理文件,但我不太確定如何執行此操作。我已經試過的方法,這似乎在邏輯上是有意義的,只是檢查是否比較字符*與字符
argv[1] == "-";
總是返回零,甚至當我寫「 - 」在命令輸入。我能做什麼?
我正在一個程序,我從命令行輸入文件的名稱。我需要檢查輸入是否是給定的字符,如「 - 」,並根據此結果處理文件,但我不太確定如何執行此操作。我已經試過的方法,這似乎在邏輯上是有意義的,只是檢查是否比較字符*與字符
argv[1] == "-";
總是返回零,甚至當我寫「 - 」在命令輸入。我能做什麼?
你需要寫 strcmp(argv[1],"a")==0;
在你的榜樣,你比較兩個指針,而不是兩個字符串。
編譯時,編譯器會在內存中的某處聲明「a」,然後在編譯時用它的內存地址替換它。由於argv [1]不能真正坐在與(臨時)「a」相同的字節上,所以結果始終爲假。 您需要迭代兩個字符串並迭代比較每個字符。 strcmp
比較2個字符串,並返回0,如果它們以這種確切的方式相等。
更多信息有關strcmp
:http://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();
}
做這個檢查:
argv[1] == "-";
你正在比較其中包含命令行的firrst參數的地址,以及t他地址你在程序中的文字"-"
,他們是不同的,所以這就是你的測試失敗的原因。您實際上想要比較這兩個地址開始的內存位置中包含的字符,這是通過strcmp
系列的功能完成的。
表達式argv[1]
是(空終止的)字符數組的地址。
表達式"-"
是另一個以空字符結尾的字符數組的地址。
這些地址不相等,因此表達式argv[1] == "-"
總是錯誤的。
這就是說,這裏是檢查的另一種方法,如果輸入的是一個給定的字符:
if (argv[1][0] != 0 && argv[1][1] == 0)
{
switch (argv[1][0])
{
case '-':
...
break;
case '+':
...
break;
case '=':
...
break;
...
}
}
標籤您使用的語言... –
如果你只是比較的第一個字符(* argv [1] =='a')' –
'argv [1]'是一個以空字符結尾的字符數組的地址。 '「a」是另一個(以空字符結尾)字符數組的地址。這些地址不相等。 –