1
#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

这让我很困惑

4

6 回答 6

3

我要继续告诉你,你不想要strcmp。C++ 处理命令行参数的方式是尽快把它们变成std::strings:

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::strings 与==运算符进行比较。在 的情况下args[1] == "-r"const char[]字符串文字被转换为 astd::string以进行比较。在您的代码中,argv[1]=="-r"比较两个不相等的独立指针 - 它不比较 C 样式字符串的内容。

于 2012-11-24T19:54:01.360 回答
2

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

要比较两个 C 字符串,请strcmp像这样使用:

if (strcmp(argv[1], "-r") == 0)
于 2012-11-24T19:44:17.217 回答
1

您可能想要strcmp比较这两个字符串。确实,您==的两个字符串必须引用相同的内存位置,这是不可能发生的,就像"-r"编译时常量一样。

于 2012-11-24T19:44:09.940 回答
1

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

于 2012-11-24T19:44:19.093 回答
1

您应该尝试使用:

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

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

于 2012-11-24T19:44:20.113 回答
1

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

#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";
}

或者

#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";
}
于 2012-11-24T19:51:18.157 回答