C ++命令行参数比较

时间:2010-09-06 01:54:42

标签: c++ command-line-arguments

我正在对C ++中命令行传递的参数进行一些验证,并且遇到了一些困难。

我是这样做的

./a.exe inputfile.txt outputfile.txt 16 flush_left

我正在尝试像这样进行验证

if(argv[4] == "flush_left" || argv[4] == "flush_justify" || argv[4] == "flush_right"){

它没有按计划进行。虽然我没有看到为什么这不起作用。从我阅读和看过的所有内容都应该没问题

2 个答案:

答案 0 :(得分:12)

尝试:

std::string argv4 = argv[4];
if(argv4 == "flush_left" || argv4 == "flush_justify" || argv4 == "flush_right"){
  //...
}

或(未经测试):

if( argc >=4 && (!strcmp(argv[4],"flush_left")  || !strcmp(argv[4],"flush_justify") || !strcmp(argv[4],"flush_right")) ) {
  //...
}

argv [4]的类型为char*,字符串文字的类型为const char*,您无法使用==运算符比较这些类型(=文本)的内容使用类似strcmpstd::string类的内容。

==上使用char*比较变量的地址,而不是内容。

答案 1 :(得分:2)

./ a.exe inputfile.txt outputfile.txt 16 flush_left

基于零的argv为您提供: argv [0] = a.exe argv [1] = inputfile.txt argv [2] = outputfile.txt argv [3] = 16 argv [4] = flush_left

所以索引是正确的,但你应该使用strcmp(stringa,stringb)并确保返回0。