命令行选项

时间:2012-11-24 19:41:15

标签: c++ command-line-arguments

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
using namespace std;

    int main(int argc, char* argv[]) 
    {
    cout << argv[1] << endl;
    if (argv[1]=="-r") cout << "success\n";
    }

“成功”不会打印出来。我跑的时候:$ ./hearts -r 唯一出现的是:

-r

这让我很困惑

6 个答案:

答案 0 :(得分:3)

我要继续告诉你,你不想strcmp。处理命令行参数的C ++方法是尽快将它们转换为std::string

int main(int argc, const char* argv[])
{
  // Make a vector of all command-line arguments
  std::vector<std::string> args(argv, argv+argc);
  // Now we can use std::string's operator==
  if (args.size() > 1 && args[1] == "-r") {
    std::cout << "Success" << std::endl;
  }
  return 0;
}

您可以将两个std::string==运算符进行比较。对于args[1] == "-r"const char[]字符串文字将转换为std::string进行比较。在你的代码中,argv[1]=="-r"比较了两个不相等的独立指针 - 它不会比较C风格字符串的内容。

答案 1 :(得分:2)

那是因为你在两个指针上使用==。它将检查指针是否相等,而不是指向相同数据点。

要比较两个C字符串,请使用strcmp,如下所示:

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

答案 2 :(得分:1)

您可能希望strcmp比较两个字符串。要使==为真,您的两个字符串必须引用相同的内存位置,这是不可能发生的,因为"-r"是编译时常量。

答案 3 :(得分:1)

您应该使用strcmp(),它将按预期工作。当你使用==比较指针时,它们不能相同。

答案 4 :(得分:1)

你应该尝试使用:

if (strcmp(argv[1],"-r")==0) cout << "success\n";

将参数与字符串文字进行比较。

答案 5 :(得分:1)

在C中,string是字符数组(指向字符序列的指针)。在您的代码中,相等运算符只是比较两个指针值,它们完全不同。您应该使用strcmp函数,或使用string class:

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <cstring> // <-- here

using namespace std;

int main(int argc, char* argv[]) 
{
    cout << argv[1] << endl;
    if (strcmp(argv[1], "-r") == 0) // <-- and here
        cout << "success\n";
}

OR

#include <iostream>
#include <cstdlib>
#include <sstream>
#include <fstream>
#include <string> // <-- here

using namespace std;

int main(int argc, char* argv[]) 
{
    cout << argv[1] << endl;
    if (string(argv[1]) == "-r") // <-- and here
        cout << "success\n";
}