【问题标题】:Compare strings coming as char**比较以 char 形式出现的字符串**
【发布时间】:2011-05-23 23:38:38
【问题描述】:
int main( int argc, char ** argv ) 
{
   if ( *argv[2] == *argv[3]) { ... }
   return true;
}

错了,不是吗?!

这不是我的代码,我找到了,是的,我知道我们应该检查我们是否有超过 2 个参数...

【问题讨论】:

  • 而且它不是专门的 C++,C 会是一个更好的标签。

标签: c++ c string char string-comparison


【解决方案1】:

这是一个完全有效的代码,但它可能无法达到您的预期。 如果argv[2]argv[3] 以相同的字母开头,If condition 将为真,因为您比较了两个字符串的第一个字符。如果要比较整个字符串,请使用strcmp

还有 2 条建议: 当你处理参数时,总是检查它们的计数(argc)。 当您退出主线程时,如果一切正常,标准是返回 0。

【讨论】:

    【解决方案2】:

    对于 C++,从每个参数构造 std::string,然后使用 operator== 进行比较。

    对于 C 使用 strcmp

    对于两者,请在进行此检查之前检查argc >= 4

    【讨论】:

    • ssory,你想说,C++ 中的“默认”每个 (char *) 转换为 std::string?即使我们完全不这样做?
    • 比较字符串通常在 C++ 中以这种方式完成,即使您从手头的 const char* 开始。 strcmp 是 C 运行时的一部分 - 在 C++ 中,标准库提供 std::string 以减轻痛苦并避免常见错误,例如缓冲区溢出、忘记释放内存。
    【解决方案3】:

    试试这个:

    #include <string>
    
    int main( int argc, char  ** argv ) 
    {
       if (argc >= 4 &&  std::string(argv[2]) == std::string(argv[3])) { ... }
       return 0;
    }
    

    【讨论】:

      【解决方案4】:

      是的,错了。

      你需要strcmp

      【讨论】:

        【解决方案5】:

        使用strcmp,见这里:

        如果需要,您可以将 string 类用于纯 C++,请参见此处:

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-27
          • 1970-01-01
          • 2021-12-31
          • 1970-01-01
          • 1970-01-01
          • 2021-12-06
          相关资源
          最近更新 更多