我在C中使用cURL,希望将页眉和正文写入内存而不是文件:

static size_t writeData(void *ptr, size_t size, size_t nmemb, void *stream)
{
  int written = fwrite(ptr, size, nmemb, (FILE *)stream);
  return written;
}


This thread详细说明了在C ++中执行此操作的过程,而this thread详细说明了在GCC中进行操作的情况。

从我可以找到的(herehere)中,无法在MVSC中做到这一点-还是不容易。

当然,一定有某种方法可以做到这一点,如果不是通过用cURL库的某些功能代替文件流呢?也许有某种方法可以绕过指向流的指针?我很沮丧!

最佳答案

您链接的第一个问题确切显示了如何执行此操作。您不需要任何花哨的东西。如果您使用的是C ++,则最好使用stringstream。如果没有,您可以使用普通memcpy追加到缓冲区。

struct buffer {
   void *mem;
   size_t size;
};

....
struct buffer b = {0};
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &b);


static size_t writeData(void *ptr, size_t size, size_t nmemb, void *data)
{
    void *mem;
    struct buffer *b = data;

    /* Save old size and try to realloc buffer. */
    size_t oldsize = b->size;
    b->size += size * nmemb;
    if (!(mem = realloc(b->mem, b->size))) {
        /* realloc failed, handle error. */
    }

    /* If realloc worked, just append. */
    b->mem = mem;
    mempy(b->mem + oldsize, ptr, nmemb * size);
}


该代码未经测试,但是应该可以很容易地解决这些问题。

09-10 05:06
查看更多