Как реализовать функцию Ftp Get in Memory в cUrl C ++? - PullRequest
0 голосов
/ 06 марта 2020

В настоящее время я использую функцию cUrl Ftp Get, которая загружает файл с ftp-сервера и сохраняет его на локальном компьютере, и он отлично работает. Что мне нужно сделать, это сделать следующий шаг и получить файл с сервера, не сохраняя его напрямую, а помещая его в память. Для этой цели я знаю, что есть еще одна функция cUrl, Ftp Get in Memory, но не могу понять, почему она не работает. Есть ли какая-либо реализация этой функции в C ++?

Проблемы, которые я получаю: «значение типа void * не может быть использовано для инициализации объекта типа char *» Пытался выполнить некоторое приведение, но ничего. Это происходит на Mallo c (1) и reallo c ().

1 Ответ

1 голос
/ 06 марта 2020

Этот пример показывает, как именно это сделать:

static size_t
WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp)
{
  size_t realsize = size * nmemb;
  struct MemoryStruct *mem = (struct MemoryStruct *)userp;

  char *ptr = static_cast<char*>(realloc(mem->memory, mem->size + realsize + 1));
  if(ptr == NULL) {
    /* out of memory! */ 
    printf("not enough memory (realloc returned NULL)\n");
    return 0;
  }

  mem->memory = ptr;
  memcpy(&(mem->memory[mem->size]), contents, realsize);
  mem->size += realsize;
  mem->memory[mem->size] = 0;

  return realsize;
}


curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

Проверьте этот пост и этот пост , чтобы узнать, как правильно приведение malloc / reallo c возвращаемое значение в C ++

...