【问题标题】:If and else if with strcmp sequence fault / overlappingif 和 else if 与 strcmp 序列错误/重叠
【发布时间】:2014-06-17 09:19:14
【问题描述】:

首先我会发布所需的代码。

#define STRING_LEFT        "05000858FB"
#define STRING_RIGHT       "05000B3E45"
#define STRING_LENGTH_MAX   16

char stringname[STRING_LENGTH_MAX+1];

if(strcmp(stringname, STRING_LEFT)==0)
{
// do stuff A here
}
else if(strcmp(stringname, STRING_RIGHT)==0)
{
// do stuff B here
}

stringname 是通过传输十六进制值的传感器触发的,需要与 STRING_LEFT 和 STRING_RIGHT 进行比较,然后执行不同的操作。当 stringname 和 STRING_LEFT 相等(==0)时,它会做 A。如果我下次激活 STRING_RIGHT,它会再次做 A。当我第二次使用 RIGHT 时,它会做 B。如果我再次使用 LEFT,它会做B,第二次 A。所以这个功能总是像“一个事件背后”......我不想那样做。我怎样才能避免这种情况?

TIA

【问题讨论】:

  • stringname 在您的代码中也是变量和函数。 stringname 函数在哪里?有错别字吗?
  • 是的,编辑那个,只是这里的一个错字,不是在原始代码中
  • 您的描述没有意义。可能stringname 的内容实际上并不是您认为的那样,但是我们无法仅根据您发布的内容来判断。请发布一个不依赖任何外部输入的示例程序(例如硬编码某些传感器响应)并显示问题。

标签: c string strcmp


【解决方案1】:

我认为您的代码中有一个重要的错字:

else if(stringname(stringname, STRING_RIGHT)==0)

应该是

else if(strcmp(stringname, STRING_RIGHT)==0)

(除非 stringname 也是变量以外的函数;在这种情况下,您应该发布该代码,但那将是不好的做法

【讨论】:

  • 原来的其实不应该编译;即使有一个函数 stringname ,一个名称也会影响另一个名称(在 C 中没有基于上下文的名称“重载”)。
【解决方案2】:

我认为您正在尝试执行以下操作:

#include <string.h>
#include <stdio.h>

#define STRING_LEFT        "05000858FB"
#define STRING_RIGHT       "05000B3E45"
#define STRING_LENGTH_MAX   16

#define STRING_TO_COMPARE "05000858FB"

int main()
{
    char stringname[STRING_LENGTH_MAX+1];
    /* initialize the string to compare */
    strcpy(stringname, STRING_TO_COMPARE);

    if(strcmp(stringname, STRING_LEFT)==0)
    {
    // do stuff A here
    }
    /* call strcmp */
    else if(strcmp(stringname, STRING_RIGHT)==0)
    {
    // do stuff B here
    }
    return 0;
}

在该示例中,stringname 包含与STRING_LEFT 相同的字符串,因此程序将执行stuff B。 当然,您必须使用所需的字符串设置stringname

【讨论】:

  • 为什么使用与 STRING_LEFT 具有相同值的 STRING_TO_COMPARE?对不起,我不明白:/
  • 只为成功,我加注
  • 我的意思是成功,进入一个案例
猜你喜欢
  • 2016-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
相关资源
最近更新 更多