Пример кода Libcurl содержит ошибку - PullRequest
0 голосов
/ 12 октября 2011

Привет, я очень новичок в libcurl и хочу по сути получить исходный код с веб-сайта в строку, чтобы я мог извлекать данные из него с помощью простых функций в Visual C ++.

Это кодЯ использую (взято с сайта curl, пример раздела):

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#include <curl/curl.h>

struct MemoryStruct {
   char *memory;
   size_t size;
};


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;

  mem->memory = realloc(mem->memory, mem->size + realsize + 1);
  if (mem->memory == NULL) {
    /* out of memory! */ 
    printf("not enough memory (realloc returned NULL)\n");
    exit(EXIT_FAILURE);
  }

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

  return realsize;
}


int main(void)
{
  CURL *curl_handle;

  struct MemoryStruct chunk;

  chunk.memory = malloc(1);  /* will be grown as needed by the realloc above */ 
  chunk.size = 0;    /* no data at this point */ 

  curl_global_init(CURL_GLOBAL_ALL);

  /* init the curl session */ 
  curl_handle = curl_easy_init();

  /* specify URL to get */ 
  curl_easy_setopt(curl_handle, CURLOPT_URL, "http://www.example.com/");

  /* send all data to this function  */ 
  curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);

  /* we pass our 'chunk' struct to the callback function */ 
  curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);

  /* some servers don't like requests that are made without a user-agent
     field, so we provide one */ 
  curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");

  /* get it! */ 
  curl_easy_perform(curl_handle);

  /* cleanup curl stuff */ 
  curl_easy_cleanup(curl_handle);

  /*
   * Now, our chunk.memory points to a memory block that is chunk.size
   * bytes big and contains the remote file.
   *
   * Do something nice with it!
   *
   * You should be aware of the fact that at this point we might have an
   * allocated data block, and nothing has yet deallocated that data. So when
   * you're done with it, you should free() it as a nice application.
   */ 

  printf("%lu bytes retrieved\n", (long)chunk.size);

  if(chunk.memory)
    free(chunk.memory);

  /* we're done with libcurl, so clean it up */ 
  curl_global_cleanup();

  return 0;
}

Я получаю эти ошибки, когда пытаюсь скомпилировать.

cpp(25): error C2440: '=' : cannot convert from 'void *' to 'char *'
 Conversion from 'void*' to pointer to non-'void' requires an explicit cast

cpp(46): error C2440: '=' : cannot convert from 'void *' to 'char *'
Conversion from 'void*' to pointer to non-'void' requires an explicit cast

Я не знаю многоо наведении или приведении, но если кто-нибудь знает, как это исправить, чтобы я мог буквально прочитать весь исходный код HTML в строке.Отсюда я планирую просмотреть строку и извлечь из нее данные.

1 Ответ

1 голос
/ 12 октября 2011

первая ошибка, измените

mem->memory = realloc(mem->memory, mem->size + realsize + 1);

на

mem->memory = (char *) realloc(mem->memory, mem->size + realsize + 1);

, вторая ошибка, измените

chunk.memory = malloc(1);  /* will be grown as needed by the realloc above */

на

chunk.memory = (char *) malloc(1);  /* will be grown as needed by the realloc above */

иДа благословит вас Бог, работая с libcurl, если вы не можете исправить эти ошибки самостоятельно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...