我正在尝试打印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是最好的选择。
任何帮助都是非常感谢的。
发布于 2013-01-19 03:10:11
理想情况下,您需要一种方法来了解正在下载的文件(图像)的大小。
使用libcurl首先获取头部并获取大小。
假设您在的中存储大小
当你分配缓冲区时,你应该这样做
char *raw_image = malloc(s);因为的是您必须保存的数据的大小,而不是1024字节!
下载文件并将其存储在raw_image中
然后
fwrite(raw_image, 1, s, stdout);请注意,sizeof(raw_image)是指向缓冲区的指针的大小,因此在64位硬件架构中为8字节。不是文件的大小!
-
但是...
-
您正在获取一个图像,并将其流传输到stdout上。
为什么不简单地调用curl呢?
发布于 2013-01-19 03:09:47
微型语言不可知的评论:你确定把原始的PNG数据写入stdout是最好的吗?
此外,您似乎正在使用libcurl来获取该图像。如果您没有为CURL句柄设置自定义回调函数,那么它将直接写入stdout。
但是,如果这不是您想要做的,那么您可能想看看realloc()。
发布于 2013-01-19 03:10:43
你告诉fwrite写20000个指针大小的对象。这是因为sizeof( raw_image )返回raw_image的大小,这是一个指针,因此在大多数32位机器上是4字节,在大多数64位机器上是8字节。它不返回raw_image指向的缓冲区的大小。
我不知道您如何确定正在下载的图像的大小,但您需要以某种方式确定该大小。一旦你这样做了,你的fwrite调用应该是这样的:
fwrite(raw_image, 1, sizeOfTheImageInBytes, stdout)https://stackoverflow.com/questions/14405738
复制相似问题