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和版本号)
猜测是字符串长度超过数组大小,发生内存覆盖,要发送的数据头被改变。