2011-11-20 94 views
2

我讀的命令行,看起來像這樣的線路比較:C++:閱讀和從命令行

"./test -C original.txt compressed.txt"

變量-C也可以-D(這是不相干的陳述他們意思)。

我想在我的代碼中驗證它是這兩個選項之一,但我在使用代碼中的argv[]字符數組時遇到問題。

這裏就是我想在我的if語句:

if((strcmp(av[1], "-C") == 0)||(strcmp(av[1], "-c") == 0))

我也試過直接比較值

if((av[1] == "-C") || (av[1] == "-c"))

+0

你試過打印'AV [1]'? –

+0

是的,它打印'-C',這是正確的 –

+0

您是否嘗試過打印'strcmp'的返回值? –

回答

2

如果您在C++中它能夠更好地使用std::string

if((std::string(argv[1]) == "-C") || (std::string(argv[1]) == "-c")) 

如果它仍然無法正常工作,請嘗試打印該變量並查看它是否符合您的期望。

+0

太棒了!這工作。非常感謝! –

+0

@Lady_ari如果這個答案解決了你的問題,接受就是要走的路。如果你不知道我在說什麼以及這個問答網站是如何工作的,那麼查看[FAQ](http://stackoverflow.com/faq)應該是你的第一個動作。 –

1

如果main()的原型是int main(int argc, char *argv[]);,那麼正確的方法來檢查,如果第一個參數是不是‘-c’或‘-C’,而無需使用std::string s是

if((strcmp(argv[1], "-C") == 0)||(strcmp(argv[1], "-c") == 0)) 
    // do things 

您可能需要#include <cstring>要利用strcmp()

+0

我做到了,但沒有奏效。 我使用了'std :: string',所以它現在可以工作了 –

0
if((argv[1] == "-C") || (argv[1] == "-c")) 

這不能將以argv [1]是指向字符的特定陣列至極包含第一個命令行參數工作。另一方面「-c」是一個指向特定其他字符的常量指針,它包含「-C」

所以這不會比較這些指針實際指向的值,它會比較兩個陣列最有可能是不同的,在任何情況下,我可以想象...