从主C ++中解析参数

时间:2012-11-27 10:05:30

标签: c++ main argv

  

可能重复:
  C String — Using Equality Operator == for comparing two strings for equality

基本问题在这里。我正在用g ++编译这个程序并使用单个-r参数(./a.out -r)运行它,但是它不输出下面指定的cout语句。这段代码有什么问题吗?

#include <string>
using namespace std;

int main(int argc, char* argv[]) {

    if (argv[1] == "-r" ) {
        cout << "First arg is -r" << endl;
    }

    return 0;
}  

4 个答案:

答案 0 :(得分:6)

您无法使用==比较字符串文字,因为它的作用是比较指针(即内存地址,在这种情况下总是会有所不同)。

使用strcmp或比较std::string个对象:

if (strcmp(argv[1], "-r") == 0) { ... }

if (std::string(argv[1]) == "-r") { ... }

答案 1 :(得分:1)

您无法将字符串文字与==进行比较。使用strcmp。

(另外,不要忘记检查argc是否至少为2)。

答案 2 :(得分:1)

代码中的一个错误是您正在比较char数组的地址,而不是比较数组中的值。正如人们所说,你可以C方式使用strcmp(尽管使用strncmp来避免缓冲区溢出更安全)。

但是,在C ++中使用std::string会更容易。

我会将args复制到字符串向量中。

#include <vector>
#include <string>

int main(int argc, char* argv[])
{
    vector<string> args(argv, argv+argc);
    ...

答案 3 :(得分:0)

通常你会沿着这些方向做点什么:

while (--argc && **++argv=='-')
{
   char *p;
    p=*argv+1;
    switch(tolower(*p))
    {
        case 'r':                                       
            break;

    }
}

基本上,虽然还有一些args,但检查是否有' - '字符,然后打开下一个字符以查看修饰符('r'或'a'等)