2011-11-20 90 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”

所以这不会比较这些指针实际指向的值,它会比较两个阵列最有可能是不同的,在任何情况下,我可以想象...