2013-01-18 32 views
0

我试图打印由卷曲返回的动态下载图像,如图:FWRITE动态大小

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小 - 图像被削减。我怎样才能使这个数字动态?我不想写入文件 - 标准输出是最好的选择。

任何帮助表示赞赏。

回答

1

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

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

比方说您存储大小小号

当你的Alloc缓冲区您务必做好

char *raw_image = malloc(s); 

因为小号是你的数据的大小,以保持不是1024个字节!

下载文件并将其保存在raw_image

然后

fwrite(raw_image, 1, s, stdout); 

注意的sizeof(raw_image)是指向你的缓冲区的大小,在这样8个字节64位hw架构。 这不是文件的大小!

-

但是....

-

你获取的图像,并streming它在标准输出上。

为什么不做一个简单的电话curl

1

[微型语言无关的评论:你确定这是最好写的原始PNG数据到stdout]

而且,看来你正在使用libcurl来获取图像。那么,如果你没有为CURL句柄设置自定义回调函数,那么它将直接写入标准输出。

但是,如果这不是你打算做的,你可能想看看realloc()

0

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

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

fwrite(raw_image, 1, sizeOfTheImageInBytes, stdout)