c++ - 根据字符串检查 argv[]? (C++)

标签 c++

所以我试图检查我输入到程序中的参数,其中之一是单词“yes”或“no”,输入时不带引号。

我正在尝试测试等效性( if (argv[n] == "yes") ),但是每次输入实际上都是肯定的(当我输出它时,它证实了这一点) )。我在这里错过了什么,我做错了什么? 如果我理解正确 argv[n] 返回一个以 null 结尾的 cstring,那么它应该允许我这样做。

最佳答案

您正在比较指针。使用 strcmp 或 std::string。

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

  if (argv[1] == "yes"); // Wrong, compares two pointers
  if (strcmp(argv[1], "yes") == 0); // This compares what the pointers point to
  if (std::string(argv[1]) == "yes"); // Works fine
  if (argv[1] == std::string("yes")); // Works fine

  // Easy-mode    
  std::vector<std::string> args(argv, argv+argc);
  for (size_t i = 1; i < args.size(); ++i) {
      if (args[i] == "yes") {
          // do something
      }
  }

}

关于c++ - 根据字符串检查 argv[]? (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5183203/

相关文章:

c++ - Release模式下的 Dartium 构建错误

c++ - 如何通过 Crypto++ 和 RSA 对文件进行签名

c++ - 在 Crypto++ 中加载 PEM 编码的私有(private) RSA key

c++ - 有哪些方法可以让主线程等待所有工作线程完成?

c++ - 如何将paraview源码编译成Qt工程(.pro)?

C++ STL : Custom sorting one vector based on contents of another

c++ - cout 两次返回一串字符

c++ - C++ 中的流使程序崩溃

c++ - 为什么下面的程序会报错?

c++ - 如何使 QLabel 自动换行?