如果和其他如果strcmp序列错误/重叠

时间:2014-06-17 09:19:14

标签: c string strcmp

起初我会发布所需的代码。

#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

2 个答案:

答案 0 :(得分:3)

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

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

应该是

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

(除非stringname也是一个除变量之外的函数;在这种情况下你应该发布那个代码,但那将是糟糕的做法

答案 1 :(得分:1)

我认为你正在尝试做以下事情:

#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