2010-11-24 50 views
0

我正在編寫一些C代碼作爲大學作業的一部分。考慮代碼:不能鍛鍊爲什麼這個C條件不成功

printf("%s\n", argv[1]); 
if ((argv[1] == "--verbose") || (argv[1] == "-v")) { 
    printf("%d\n", argc); 
} 

現在:printf("%s\n", argv[1]);打印「--verbose」所以我知道應該argv[1] == "--verbose"是真實的,但行printf("%d\n", argc);從未執行。我無法鍛鍊爲什麼。有任何想法嗎?

+1

以這種方式使用`==`來比較字符串的*位置*,而不是它們的內容。 – caf 2010-11-24 01:35:04

回答

9

使用strcmp功能:

strcmp(argv[1], "--verbose") == 0 

==檢查這兩個指針具有相同的地址,這是不是你想要的。

+1

現貨,接受並繼續! – 2010-11-24 01:26:58

1

因爲你不能在C中用==比較字符串。使用strcmp或類似的。

1

您不應該使用strcmp來比較字符串嗎?當然,argv[1] == "--verbose"不會比較字符串與字母的平等。

3

參照Wikipedia Article on strcmp

這裏的關鍵是你不能直接比較字符串與在C中的==運算符。這隻會比較字符串的指針,這將是不同的。

0

在你的代碼中,你實際上是將argv[1]指針(指向包含程序第一個參數的字符串)的內容與每個字符串的地址(「-v」等)進行比較。這在所有情況下都保證是錯誤的。

您應該使用strcmp()函數或類似函數來比較字符串本身,而不是它們的地址。