Почему результат неверен при назначении строки для const char * и последующей передаче const char * в качестве буфера (void *) в функцию? - PullRequest
1 голос
/ 05 мая 2019

(я использую библиотеку libmicrohttpd )

Const char *, как это работает просто отлично:

const char *page = "Hello World";
MHD_create_response_from_buffer(strlen(page), (void*)page, MHD_RESPMEM_PERSISTENT);

Но присвоение строки const char * выведет на клиента странную строку:

std::string str = "Hello World";
const char *page = str.c_str();
MHD_create_response_from_buffer(strlen(page), (void*)page, MHD_RESPMEM_PERSISTENT);

или

std::string str = "Hello World";
MHD_create_response_from_buffer(strlen(page.c_str()), &page[0], MHD_RESPMEM_PERSISTENT);

Вывод второго и третьего фрагментов кода на клиенте - «ججججججججججج». Не «Hello World».

Почему?

1 Ответ

1 голос
/ 05 мая 2019
Время жизни

str заканчивается до ее использования библиотекой.

В этом конкретном случае создание libmicrohttpd копии в буфере должно решить проблему.

В частности, MHD_create_response_from_buffer* Параметр режима 1008 * должен быть установлен на MHD_RESPMEM_MUST_COPY, так как ваш исходный буфер (внутренняя строка) имеет более короткое время жизни, чем MHD_Response, возвращаемый функцией.

...