命令行选项

command line option

本文关键字:选项 命令行      更新时间:2023-10-16
#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 << "successn";
    }

"成功"不会打印出来。当我运行时: $ ./hearts -r唯一出来的是:

-r

这让我很困惑

> 我会继续告诉你你不想要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 样式字符串的内容。

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

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

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

您应该尝试使用:

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

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

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

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

在 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 << "successn";
}

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