【问题标题】:compare const char * with strcmp比较 const char * 和 strcmp
【发布时间】:2013-11-27 12:33:55
【问题描述】:

我将const char * 与一个字符串进行比较,出于某种原因它总是成功。

    if (std::strcmp(t->detectColor->name, "ghghjg") != 0) {
        printf("XXXXXXXXXXX\n");
        // check if it was allready a sequencer
        if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") != 0) {
          printf("what is going on?\n");

detectColor 名称总是类似于绿色或蓝色,例如,t->className 是“ofxDTangibleBase”。仍然会打印

XXXXXXXXXXX
what is going on?

在控制台中。 如何获得有效的比较?

【问题讨论】:

标签: c++ char constants strcmp


【解决方案1】:

根据cplusplus.com

返回一个整数值,表示两者之间的关系 字符串:零值表示两个字符串相等。一个值 大于零表示第一个字符不 match 在 str1 中的值大于在 str2 中的值;并且值小于 零表示相反。

或者cppreference.com的说法不同:

返回值

  • 如果 lhs 小于 rhs,则为负值。
  • 0​如果 lhs 等于 rhs。
  • 如果 lhs 大于 rhs,则为正值。

因此,在您的代码中,strcmp(t->detectColor->name, "ghghjg") 将返回不同于 0 的值。因此,将打印“XXXXXXXXXXX”。

你只需要改变:

if (std::strcmp(t->detectColor->name, "ghghjg") != 0)

if (std::strcmp(t->detectColor->name, "ghghjg") == 0)

其他比较也一样。

【讨论】:

  • 对引用使用更好的 cppreference
  • @piotruś:你是说这个引用是错误的吗?对我来说看起来不错,尽管引用 C 标准而不是某些网站可能会更好。
  • @piotruś 我已添加您的参考。我使用 cplusplus.com 是因为它们通常是 Google 上的第一个结果并且可以胜任。
  • 我只是想提供一个建议,cppreference 是更好的来源,在这种情况下,引用当然是正确的
  • @clankill3r:在 C++ 中,您将使用 std::string 并与 == 进行比较。之所以复杂,是因为您出于某种原因使用了 C 库。
【解决方案2】:

std::strcmp 字符串相同时返回 0,字符串不同时返回小于 0 或大于 0 的值。因此,您可以将代码更改为以下内容:

if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") != 0) {
  printf("indeed, strings are different\n");

如果 lhs 小于 rhs,则为负值。 ​0​ 如果 lhs 等于 rhs。 如果 lhs 大于 rhs,则为正值。

http://en.cppreference.com/w/cpp/string/byte/strcmp


如何获得有效的比较?

if (std::strcmp(t->className, "IM_SURE_IT_CANT_BE_THIS") == 0) {
      printf("strings are equal lexicographically\n");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多