Что я пытаюсь использовать libcurl, это отправить запрос GET на сервер и сохранить ответ. Он отлично работает, когда я не использую CURLOPT_WRITEFUNCTION и CURLOPT_WRITEFDATA, ответ идет на стандартный поток, и программа закрывается после нажатия кнопки.Appcrash with cURL
Когда я добавляю свою собственную функцию и переменную, чтобы сохранить ответ, однако, в конце ответа есть и дополнительный символ мусора, и программа вылетает после нажатия кнопки.
#include <iostream>
#include <tchar.h>
#include <stdio.h>
#include <conio.h>
#include "curl/curl.h"
#include "curl/easy.h"
#define FAIL 0
#define PASS 1
size_t curlWrite(void*, size_t, size_t, void*);
CURL *curl;
const char *baseURL = "XXXX";
const char *authHeader = "Authorization: Token token=YYYY";
int _tmain(int argc, _TCHAR* argv[])
{
bool cURLStatus = PASS;
CURLcode res;
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, authHeader);
char *response;
curl = curl_easy_init();
if(curl)
{
curl_easy_setopt(curl, CURLOPT_URL, baseURL);
curl_easy_setopt(curl, CURLOPT_HTTPGET, 1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWrite);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
res = curl_easy_perform(curl);
if(CURLE_OK != res) cURLStatus = FAIL;
}
else cURLStatus = FAIL;
if(cURLStatus) printf("Response: %s", response);
else printf("Error: %s", curl_easy_strerror(res));
curl_easy_cleanup(curl);
_getch();
return 0;
}
static size_t curlWrite(void *src, size_t size, size_t nmemb, void *dst)
{
printf("Source: %s", src);
memcpy(dst, src, size * nmemb);
return size * nmemb;
}
Это ответ я получаю, за которым следует APPCRASH, используя код выше:
Источник: { "current_bac": 0, "time_until_sober": 0}
Ответ: { "current_bac": 0, "time_until_sober": 0} Р
Если IC omment следующие строки (и Printf):
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, curlWrite);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, response);
Я получаю это:
{ "current_bac": 0, "time_until_sober": 0}
Что я делать не так?