如何将字符分配给结构指向的字符串?

How to assign a character to a string pointed by a struct?

我有一个包含名为 void * user_data 的字段的结构。 这是库声明:

typedef struct esp_http_client_event {
    esp_http_client_event_id_t event_id;
    esp_http_client_handle_t client;
    void *data;
    int data_len;
    void *user_data;
    char *header_key;
    char *header_value;
} esp_http_client_event_t;

当我声明结构时,我将缓冲区分配给 user_data:

char g_http_response_buffer[MAX_HTTP_OUTPUT_BUFFER] = { 0 };
...
esp_http_client_config_t config = {
    .url = WEB_URL,
    .event_handler = client_event_handler,
    .transport_type = HTTP_TRANSPORT_OVER_SSL,
    .crt_bundle_attach = esp_crt_bundle_attach,
    .buffer_size_tx = 1024,
    .user_data = g_http_response_buffer,
};

在那之后,我想通过使用传递给函数的结构来操作g_http_response_buffer(函数是一个回调,但我认为它不相关)。 在函数内部,我按以下方式使用它:

esp_err_t
client_event_handler (esp_http_client_event_handle_t evt)
{
    static int output_len = 0;
    esp_err_t ret = ESP_OK;

    switch (evt->event_id)
    {
        case HTTP_EVENT_ERROR:
            ESP_LOGI(g_p_tag, "HTTP_EVENT_ERROR");
        break;

        case HTTP_EVENT_ON_CONNECTED:
            ESP_LOGI(g_p_tag, "HTTP_EVENT_ON_CONNECTED");
        break;

        case HTTP_EVENT_HEADER_SENT:
            ESP_LOGI(g_p_tag, "HTTP_EVENT_HEADER_SENT");
        break;

        case HTTP_EVENT_ON_HEADER:
            ESP_LOGI(g_p_tag, "HTTP_EVENT_ON_HEADER, key=%s, value=%s",
                     evt->header_key, evt->header_value);
        break;

        case HTTP_EVENT_ON_DATA:
            ESP_LOGI(g_p_tag, "HTTP_EVENT_ON_DATA, len=%d", evt->data_len);
            if (!esp_http_client_is_chunked_response(evt->client))
            {
                if (evt->user_data)
                {
                    memcpy(evt->user_data + output_len, evt->data,
                           evt->data_len);
                    ESP_LOGI(g_p_tag, "Dati non chunk: %s",
                             (char *) evt->user_data);
                }

                if (ESP_OK == ret)
                {
                    output_len += evt->data_len;
                }
            }
            else
            {
                if (evt->user_data)
                {
                    memcpy(evt->user_data + output_len, evt->data,
                           evt->data_len);
                    ESP_LOGI(g_p_tag, "Dati chunk: %s",
                             (char *) evt->user_data);
                }

                if (ESP_OK == ret)
                {
                    output_len += evt->data_len;
                }
            }
        break;

        case HTTP_EVENT_ON_FINISH:
            ESP_LOGI(g_p_tag, "HTTP_EVENT_ON_FINISH");
            g_http_response_buffer[output_len] = '[=12=]'; // <- HERE!
            ESP_LOGI(g_p_tag, "Dato finale: %s", (char *) evt->user_data);
            output_len = 0;
        break;
    }
    return ret;
}   /* client_event_handler() */

如何使用指向 user_data 的指针插入终止符字符串? 我试过 (evt + output_len)->user_data = '[=14=]' 但似乎不对。

How can I insert the terminator string by using a pointer to user_data?

严格来说,您不能“插入”到数组中。您可以将任何索引中的 char 指定为空终止符,如下所示:

char* ptr_to_user_data = config.user_data;
assert(index < MAX_HTTP_OUTPUT_BUFFER);
ptr_to_user_data[index] = '[=10=]';