Проблема со сравнением строк (strcmp) в C - PullRequest
1 голос
/ 30 августа 2010

Я новичок в 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: ожидаемое выражение перед токеном‘ = ’". Но если я перехожу на «if (strcmp (buf, SRV_SHOWMENU) == 0)», то достаточно одного сравнения.

Спасибо.

Ответы [ 2 ]

6 голосов
/ 30 августа 2010

Вам не нужно использовать знак «=» после #define. Вы можете прочитать больше здесь .

4 голосов
/ 30 августа 2010

Как уже было сказано, удалите знаки = в # определяет

#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) 
...