【问题标题】:Why use strcmp instead of == in C++?为什么在 C++ 中使用 strcmp 而不是 ==?
【发布时间】:2014-04-29 15:50:42
【问题描述】:

我想知道我的代码在 C++ 中使用 strcmp 或简单地使用 == 来比较 2 个字符数组都可以正常工作。谁能证明使用strcmp而不是==的原因;

【问题讨论】:

  • 您的代码示例是否适用于==strcmp
  • char abc1[10] = "苹果"; char abc2[10]="芒果"; if (abc1 == abc2) cout
  • 但是现在我清楚 == 指向同一个位置。我对 NotEqual 结果感到困惑。

标签: c++ strcmp


【解决方案1】:

strcmp 比较实际的C-string 内容,而在两个C-string 之间使用== 是询问这两个char 指针是否指向同一个位置。

如果我们有一些C-string 定义如下:

char string_a[] = "foo";
char string_b[] = "foo";
char * string_c = string_a;

strcmp(string_a, string_b) == 0 将返回 true,而 string_a == string_b 将返回 false。只有当使用==“比较”string_astring_c 时才会返回true

如果你想比较两个C-string的实际内容而不是它们是否只是彼此的别名,使用strcmp

附带说明:如果您使用C++ 而不是问题标签显示的C,那么您应该使用std::string。例如,

std::string string_d = "bar";
std::string string_e = "bar";

然后string_d == string_e 将返回truestring_d.compare(string_e) 将返回 0,这是 C++ 版本的 strcmp

【讨论】:

  • 注意:这不适用于 std::string (以防有人怀疑)
  • +1 击败了我,因为我写了一个例子来展示 OP。无需编写另一个答案,因为您已经掌握了所有内容,只需留下示例 here(将变量重命名为您的版本)。
【解决方案2】:

使用 strcmp 的一个优点是......它会返回

0 如果 str1 大于 str2 如果它们相等,则为 0。

但如果你简单地使用 == 它只会返回真或假。

【讨论】:

  • 它将返回 bool 以进行不同的比较。
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2016-04-16
  • 1970-01-01
  • 2014-01-12
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多