0

我正在尝试打印 cURL 返回的动态下载图像,如下所示:

    char *raw_image = malloc(1024);

    raw_image = doCurl("GET", img_url, NULL, NULL);

    printf("Content-Type: image/png\n\n");

    fwrite(raw_image, sizeof(raw_image), 20000, stdout);

如果我的尺寸小于 20000 - 图像会被剪切。如何使该数字动态化?我不想写入文件 - stdout 是最好的选择。

任何帮助表示赞赏。

4

3 回答 3

1

[与语言无关的小型评论:您确定将原始 PNG 数据写入标准输出是最好的吗?]

此外,您似乎正在使用libcurl该图像。好吧,如果您没有为 CURL 句柄设置自定义回调函数,那么它将直接写入标准输出。

但是,如果这不是您打算做的,您可能需要查看realloc().

于 2013-01-18T19:09:46.733 回答
1

理想情况下,您需要一种方法来了解正在下载的文件(图像)的大小。

首先使用 libcurl 获取标头并获取大小。

假设您将大小存储在s

当您分配缓冲区时,您应该这样做

char *raw_image = malloc(s);

因为s是您必须保存的数据的大小,而不是 1024 字节!

下载文件并将其存储在raw_image

然后

fwrite(raw_image, 1, s, stdout);

请注意,sizeof(raw_image)是指向缓冲区的指针的大小,因此在 64 位硬件架构中为 8 个字节。这不是文件的大小!

-

但....

-

您正在获取图像,并将其放在标准输出上。

你为什么不做一个简单的调用curl

于 2013-01-18T19:10:11.093 回答
0

您告诉 fwrite 写入 20000 个指针大小的对象。这是因为 sizeof(raw_image) 返回 raw_image 的大小,它是一个指针,因此在大多数 32 位机器上为 4 个字节,在大多数 64 位机器上为 8 个字节。它不返回raw_image 指向的缓冲区的大小。

我不知道如何确定要下载的图像的大小,但您需要以某种方式确定该大小。一旦你这样做了,你的 fwrite 调用应该如下所示:

fwrite(raw_image, 1, sizeOfTheImageInBytes, stdout)
于 2013-01-18T19:10:43.497 回答