转换为函数中的指针参数(C)

uujelgoq  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(100)

有一个函数采用以下参数:

int send_message(const char *topic)

我有一个结构体:

typedef struct mqtt_topic {
    char topic[200];
} mqtt_topic_t;

和类型为的值:mqtt_topic_t *mqtt_topic
我试图将mqtt_topic->topic作为参数传递给函数,但是它抛出了一个错误。我如何将这些数据转换为有用的格式,然后在我的函数中作为参数使用?
下面是代码片段:

int mqtt_publish(char message[])
{
    int msg_id = 0;
    ESP_LOGI(TAG, "MQTT_EVENT_CONNECTED");
    mqtt_topic_t *mqtt_topic = get_mqtt_topic();

    msg_id = esp_mqtt_client_publish(client,&mqtt_topic->topic, message, 0, 1, 0);
    ESP_LOGI(TAG, "sent publish successful, msg_id=%d", msg_id);
    return msg_id;
}

函数原型:

int esp_mqtt_client_publish(esp_mqtt_client_handle_t client, const char *topic, const char *data, int len, int qos, int retain);
sy5wg1nm

sy5wg1nm1#

参数&mqtt_topic->topic的类型为“指向char[200]的指针“。您需要的只是指向char的指针:

msg_id = esp_mqtt_client_publish(client, mqtt_topic->topic, message, 0, 1, 0);

当作为参数传递时,或以除&sizeof运算符之外几乎任何其他方式使用时,数组衰减为指向其第一个元素指针这就是mqtt_topic->topic给出char*原因,char*作为此处所需const char*参数是可以

yc0p9oo0

yc0p9oo02#

您不需要在mqtt_topic->topic前面加上&
如果您的代码没有编译(它给出错误-而不是警告),则意味着您使用了**C++编译器而不是C**编译器,或者您设置了将警告视为错误。

相关问题