Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Espressif ESP-IDF的C语言字符串处理_C_Arrays_String - Fatal编程技术网

Espressif ESP-IDF的C语言字符串处理

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

以下函数调用派生自ESPRESIF ESP-IDF,并将发送长度为event->data_len的mqtt消息(event->data)

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到多个订阅者,每个订阅者可能希望对原始数据执行不同的操作(包括根本不显示)。在发布者中,围绕着原始数据添加了令人眼花缭乱的内容,为每个订阅者解析原始数据增加了不必要的复杂性。同时,我编辑了我的原始问题,以显示我使用的解决方案。