为什么我发了一个有PAHO mqtt的话题,出现了return-8的情况?

问题描述 投票:1回答:1
MQTTAsync_responseOptions sendOptions = MQTTAsync_responseOptions_initializer;
MQTTAsync_message pubMsg = MQTTAsync_message_initializer;
int rc = 0;
char msgSend[48] = {0};
json_object *pValue = NULL;
json_object *pObjectSerPro = NULL;
int waitCount = 0;

if (pLoopCount == NULL)
{
     printf("(%s) This is an empty data.\n", __FUNCTION__);
     return DEAL_ERROR;
}

while(!ConnectedFlag && ++waitCount<WAIT_COUNT);
if (waitCount >= WAIT_COUNT)
{
    printf("(%s) Failed to wait for the connection.\n", __FUNCTION__);
    return DEAL_ERROR;
}

/*
{
    "loop1_count": 1,
    "loop2_count": 2
}
*/

pObjectSerPro = json_object_new_object();

pValue = json_object_new_int(pLoopCount->loop1Count);
json_object_object_add(pObjectSerPro, LOOP1_COUNT, pValue);
pValue = json_object_new_int(pLoopCount->loop2Count);
json_object_object_add(pObjectSerPro, LOOP2_COUNT, pValue);


memset(msgSend, 0, 48);
sprintf(msgSend, "%s", json_object_to_json_string(pObjectSerPro));

json_object_put(pObjectSerPro);

sendOptions.onSuccess = onSend;
sendOptions.context = GlobalClient;
pubMsg.payload = msgSend;
pubMsg.payloadlen = strlen(pubMsg.payload);
pubMsg.qos = 1;
pubMsg.retained = 1;

if ((rc = MQTTAsync_sendMessage(GlobalClient, ORENA_SMARTFIRE_EC_RESPONSE_LOOP_REGISTER, &pubMsg, 
&sendOptions)) != MQTTASYNC_SUCCESS)
{
    printf("(%s) Failed to start sendMessage, return code %d\n", __FUNCTION__, rc);
    return DEAL_ERROR;
}
return DEAL_OK;

我打算封装一个JSON消息({"loop1_count": 1,"loop2_count": 2}我的问题是:当我把这个代码从CHAR msgSend[48] = {0};改成CHAR msgSend[40] = {0};的时候,遇到了一个返回错误代码-8,但我看了一下数据,说返回-8的问题是由于版本问题,为什么?一个结构参数没有正确的eyecatcher和版本号)

mqtt
1个回答
0
投票

猜测是字符串长度超过数组大小,发生内存覆盖,要发送的数据头被改变。

© www.soinside.com 2019 - 2024. All rights reserved.