这是一个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。

07-24 15:03