这是一个mplab和谐代码,我在客户端接收到一个数据,我想控制来自服务器插座的led,文本“START”会打开led,文本“STOP”会关闭led,当我调试代码时,它显示Appbuffer[80]有所有空变量,ACK[]=最后一个变量为空\0,与AOK[]相同。我想知道这是正确的方法吗比较我在代码中写的字符串。因为当我调试代码时,它会转义这一行并跳转到服务器task init()。请帮帮我。
case APP_TCPIP_WAIT_FOR_RESPONSE:
{
char Appbuffer[80];
static const char ACK[]="START";
static const char AOK[]="STOP";
memset(Appbuffer, 0, sizeof(Appbuffer));
if (!TCPIP_TCP_IsConnected(appData.clientSocket))
{
SYS_CONSOLE_MESSAGE("\r\nConnection Closed\r\n");
appData.clientState = APP_TCPIP_WAITING_FOR_COMMAND;
break;
}
if (TCPIP_TCP_GetIsReady(appData.clientSocket))
{
TCPIP_TCP_ArrayGet(appData.clientSocket, (uint8_t*)Appbuffer, sizeof(Appbuffer) - 1);
SYS_CONSOLE_PRINT("%s", Appbuffer);
if(!strcmp(Appbuffer, ACK)) //// breakpoint
{
BSP_LEDStateSet(BSP_LED_1,BSP_LED_STATE_ON);
BSP_LEDStateSet(BSP_LED_2,BSP_LED_STATE_ON);
BSP_LEDStateSet(BSP_LED_3,BSP_LED_STATE_ON);
}
else if(!strcmp(Appbuffer, AOK)) // breakpoint
{
BSP_LEDStateSet(BSP_LED_1,BSP_LED_STATE_OFF);
appData.serverState = APP_TCPIP_CLOSING_CONNECTION;
SYS_CONSOLE_MESSAGE("Connection was closed\r\n");
}
}
}
最佳答案
由于调用了函数memset,AppBuffer的所有值都为空。
我在你发布的代码中没有看到,AppBuffer被分配了一个值。
因此AppBuffer本质上是一个长度为零的字符串,因此当您将其与AOK进行比较时,结果为false。