Espressif ESP-IDF的C语言字符串处理
以下函数调用派生自ESPRESIF ESP-IDF,并将发送长度为event->data_len的mqtt消息(event->data)Espressif ESP-IDF的C语言字符串处理,c,arrays,string,C,Arrays,String,以下函数调用派生自ESPRESIF ESP-IDF,并将发送长度为event->data_len的mqtt消息(event->data) esp_mqtt_客户端发布(mqtt_客户端,配置示例发布主题,事件->数据,事件->数据,1,0) 相反,如果事件->数据,我想通过一些额外的字符来扩展这个字符数组,比如“我得到了[事件->数据]!”并通过上面显示的函数发送此消息 我知道,有很多方法可以做到这一点,但我找到的每一个解决方案,都会产生一些在我看来非常复杂可笑的句子 //Buffer
esp_mqtt_客户端发布(mqtt_客户端,配置示例发布主题,事件->数据,事件->数据,1,0)代码>
相反,如果事件->数据,我想通过一些额外的字符来扩展这个字符数组,比如“我得到了[事件->数据]!”并通过上面显示的函数发送此消息
我知道,有很多方法可以做到这一点,但我找到的每一个解决方案,都会产生一些在我看来非常复杂可笑的句子
//Buffer to hold event->data as a string with \0 termination
char *bufData = calloc(event->data_len + 1, sizeof(char));
snprintf(bufData, event->data_len + 1, "%s", event->data); // get a zero ended string from event->data
//Additional Buffer to hold complete String
int mqttStringBufSize = strlen(bufData) + 30;
char *mqttStringBuf = calloc(mqttStringBufSize, sizeof(char));
snprintf(mqttStringBuf, mqttStringBufSize, "I received [%s]", bufData);
esp_mqtt_client_publish(mqtt_client, CONFIG_EXAMPLE_PUBLISH_TOPIC,
mqttStringBuf, strlen(mqttStringBuf), 1, 0);
free(bufData);
free(mqttStringBuf);
因此,我正在寻找一个干净的解决方案。如果它能够完成任务,那么一些复杂的代码并不一定是坏的,而且可能需要复杂的代码。不复杂,您需要创建一个新字符串,包含您希望它说的任何内容,然后发送它。我想,确保新字符串有足够的空间会带来任何麻烦。不过,在我看来,你应该保持原样,在接收器上的显示中添加任何需要的窗口装饰。取决于您的具体情况,但一般来说,您希望发送原始数据,并让接收者决定如何呈现数据。这是一个publish
函数,表明可能有1到多个订阅者,每个订阅者可能希望对原始数据执行不同的操作(包括根本不显示)。在发布者中,围绕着原始数据添加了令人眼花缭乱的内容,为每个订阅者解析原始数据增加了不必要的复杂性。同时,我编辑了我的原始问题,以显示我使用的解决方案。