首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fwrite动态大小

fwrite动态大小
EN

Stack Overflow用户
提问于 2013-01-19 02:59:24
回答 3查看 195关注 0票数 0

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

代码语言:javascript
复制
    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是最好的选择。

任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-01-19 03:10:11

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

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

假设您在中存储大小

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

代码语言:javascript
复制
char *raw_image = malloc(s);

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

下载文件并将其存储在raw_image

然后

代码语言:javascript
复制
fwrite(raw_image, 1, s, stdout);

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

-

但是...

-

您正在获取一个图像,并将其流传输到stdout上。

为什么不简单地调用curl呢?

票数 1
EN

Stack Overflow用户

发布于 2013-01-19 03:09:47

微型语言不可知的评论:你确定把原始的PNG数据写入stdout是最好的吗?

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

但是,如果这不是您想要做的,那么您可能想看看realloc()

票数 1
EN

Stack Overflow用户

发布于 2013-01-19 03:10:43

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

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

代码语言:javascript
复制
fwrite(raw_image, 1, sizeOfTheImageInBytes, stdout)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14405738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档