关于libcurl示例

时间:2017-06-28 03:34:55

标签: c libcurl memcpy

手册说memcpy()的第一个参数是指针。但在此代码中,第一个参数是数组的地址。为什么它不能与数组重叠?

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");
    return 0;
  }

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

  return realsize;
}

1 个答案:

答案 0 :(得分:0)

realloc()扩展了mem的大小,因此它不能重叠。