C中字符串比较(strcmp)的问题

时间:2010-08-30 14:34:53

标签: c string strcmp

我是C的新手。我想比较使用'#DEFINE'和char buf [256]的字符串。 这是我的代码。

#define SRV_SHOWMENU "SRV_SHOWMENU"
#define SRV_LOGIN_TRUE = "SRV_LOGIN_SUC"
#define SRV_LOGIN_FAIL = "SRV_LOGIN_FAIL"
#define SRV_REGISTER_OK = "SRV_REGISTER_SUC"
#define SRV_REGISTER_FAIL = "SRV_REGISTER_FAIL"
char buf[256];      // buffer for client data
...
...
...
...
...
...
if(strcmp(buf,SRV_SHOWMENU) == 0 || strcmp(buf,SRV_REGISTER_FAIL) == 0)
{

}

我的C编译器告诉我systax错误“../src/server.c:417:error:在'='token之前的预期表达式”。但如果我改为“if(strcmp(buf,SRV_SHOWMENU)== 0)”,只需一次比较即可。

谢谢。

2 个答案:

答案 0 :(得分:6)

#define后不需要使用'='符号。您可以阅读更多here

答案 1 :(得分:4)

如前所述,删除#defines

中的=标志
#define SRV_SHOWMENU "SRV_SHOWMENU" 
#define SRV_LOGIN_TRUE "SRV_LOGIN_SUC" 
#define SRV_LOGIN_FAIL "SRV_LOGIN_FAIL" 
#define SRV_REGISTER_OK "SRV_REGISTER_SUC" 
#define SRV_REGISTER_FAIL "SRV_REGISTER_FAIL" 
char buf[256];      // buffer for client data 
... 
if(strcmp(buf,SRV_SHOWMENU) == 0 || strcmp(buf,SRV_REGISTER_FAIL) == 0) 
{ 

}

使用=,预编译器会将if(strcmp(buf,SRV_SHOWMENU) == 0 || strcmp(buf,SRV_REGISTER_FAIL) == 0)变为

if(strcmp(buf,"SRV_SHOWMENU") == 0 || strcmp(buf,= "SRV_REGISTER_FAIL") == 0)